Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SnowCamp 2022 - InfraAsCode et multicloud à la sauce Kubernetes avec Crossplane

78605f82de8b2ea497603533d022f1e0?s=47 WeScale
February 09, 2022

SnowCamp 2022 - InfraAsCode et multicloud à la sauce Kubernetes avec Crossplane

78605f82de8b2ea497603533d022f1e0?s=128

WeScale

February 09, 2022
Tweet

More Decks by WeScale

Other Decks in Technology

Transcript

  1. None
  2. Stéphane TEYSSIER Linkedin personnel www.linkedin.com/in/stephaneteyssier InfraAsCode et multicloud à la

    sauce Kubernetes avec Crossplane SnowCamp - 04/02/2021 GitHub de la présentation https://github.com/yesteph/crossplane-demo WeScale Training training.wescale.fr Linkedin WeScale www.linkedin.com/company/wescale
  3. Sondage

  4. Kubernetes, un standard any cloud oui 88% Utilisez vous Kubernetes

    pour orchestrer vos conteneurs? source: redhat.com service managé hybride
  5. Déployer son application avec Kubernetes D’autres outils pour l’infrastructure Terraform

    AWS cloud formation
  6. Kubernetes est une boîte à outils • Plugins et exécutables

    • Service catalog • Webhook • Opérateurs
  7. Pour résumer… Kubernetes, disponible partout standardise les pratiques, outils et

    concepts Standard Infra et application Déployer de la même manière son application et les ressources cloud associées pourrait simplifier des choses Extensible Kubernetes est une boîte à outils évolutive
  8. None
  9. Crossplane “Manage any infrastructure your applications need directly from Kubernetes”

    Licence Apache 2.0 v1.0 dec 2020 CNCF incubation SaaS (upbound.io) ou self-hosted
  10. 01 02 03 05 04 06 Vendredi Mise en production

    multicloud Mardi Gitops Mercredi RTT mais on peut philosopher “Hello World” Lundi Jeudi Abstractions d’infrastructure Conclusion Alors, Crossplane ? La suite de la présentation
  11. Lundi “Hello World”

  12. Installation de Crossplane “Core”

  13. apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ...

    crossplane RBAC-manager watch crossplane-system Crossplane “core”
  14. Providers Crossplane • Ensemble de Custom Resource Definitions - CRD

    • Contrôleur pour reconciliation ressources managées / ressource cloud providers officiels
  15. apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ...

    crossplane RBAC-manager watch crossplane-system Provider AWS - installation kubectl apply -f aws-provider.yaml
  16. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch crossplane-provider-aws Type: provider.pkg.crossplane.io crossplane-system Provider AWS - installation
  17. Provider AWS - configuration

  18. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch crossplane-provider-aws Type: provider.pkg.crossplane.io crossplane-system Provider AWS - configuration aws-creds
  19. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch aws-creds crossplane-provider-aws Type: provider.pkg.crossplane.io default Type: providerconfig.aws.crossplane.io s y n c crossplane-system Provider AWS - configuration
  20. Une ressource managée https://doc.crds.dev/github.com/crossplane/provider-aws

  21. Une ressource managée

  22. ec2.aws.crossplane.io • CompositeResourceRevisio n • Composition@ s3.aws.crossplane.io • CompositeResourceRevisio n

    • Composition@ aws.crossplane.io • ProviderConfig • ... apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ... crossplane RBAC-manager watch provider-aws watch aws-creds crossplane-provider-aws Type: provider.pkg.crossplane.io default Type: providerconfig.aws.crossplane.io my-basic-crossplane-vpc Type: vpc.ec2.aws.crossplane.io vpc-097c39d01430 s y n c crossplane-system Une ressource managée
  23. Liens entre ressources politique de labels!

  24. None
  25. Mardi Gitops

  26. my-basic-crossplane-vpc my-private-crossplane-subnet1 my-crossplane-eip-2 my-crossplane-nat1 my-crossplane-nat2 my-private-crossplane-subnet2 my-public-crossplane-subnet1 my-public-crossplane-subnet2 my-crossplane-eip-1 my-basic-crossplane-igw

    my-public-crossplane-rt my-private-crossplane-rt-eu-west-3a my-private-crossplane-rt-eu-west-3a Un exemple plus poussé
  27. Packager son infra as code https://github.com/yesteph/crossplane-demo/tree/main/tuesday/vpc

  28. Gitops

  29. None
  30. VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1

    pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 apply:start apply:end temps Fini les “drifts” AWS Cloudformation
  31. VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1

    pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 Fini les “drifts”
  32. VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1

    pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 Fini les “drifts”
  33. Fini les “drifts” VPC IGW EIP1 EIP2 priv subnet1 priv

    subnet2 pub subnet1 pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2
  34. Récupération de credentials depuis Vault provider-aws vault-injector 4) retrieve vault

    token for secret request 5) retrieve vault secret 6) format as file in mounted volume 1) deploy pod with service account token 2) authenticate using service account token 3) validate service account token with Kubernetes API Kubernetes Control plane
  35. RBAC my-basic-crossplane-vpc Type: vpc.ec2.aws.crossplane.io kubectl apply -f vpc.yaml Authorized ?

  36. RBAC kubectl apply -f vpc.yaml cluster-admin cluster-admin rules: - apiGroups:

    - '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*' system:masters
  37. Mercredi RTT mais on peut philosopher

  38. Le sens de la vie

  39. Ou alors...

  40. Jeudi Abstraire la complexité avec les Compositions

  41. Les compositions Crossplane • Abstractions sur des ressources managées •

    Une interface mais plusieurs implémentations • Séparation infra builder/app operator • Différents provisionning • NoCode
  42. network Composition CompositeResource Definition interface Composition classe Claims instance vpc

    igw subnet subnet subnet subnet route table kind: Network metadata: name: demo-aws-network namespace: my-app spec: ... publish infra builder cluster scope app operator/dev namespace scope
  43. Composite Resource Definition Une interface ClaimNames Kind/group of the XRD

    OpenAPI 3 spec Version of XRD
  44. Composition Une implémentation Kind/group/version of the XRD Set of resources

    and applied patches Labels
  45. Claim Une instance Kind/group/version of the XRD Namespace

  46. CompositeResource Definition Composition Claims network vpc VPC kind: Network metadata:

    name: demo-aws-network namespace: ns1 spec: ... cluster eks.wescale services.wescale eks.wescale cluster.eks iam services.wescale helm/prometheus kind: Cluster metadata: name: demo-aws-cluster namespace: ns1 spec: ... Un exemple plus poussé - “cluster”
  47. None
  48. Vendredi Mise en production multicloud à 18H

  49. network cluster eks.wescale services.wescale gke.wescale services.wescale eks.wescale cluster.eks iam VPC

    VPC Subnetwork Subnetwork gke.wescale gkecluster kind: Network metadata: name: aws-network namespace: ns1 spec: compositionSelector: matchLabels: provider: AWS kind: Network metadata: name: gcp-network namespace: ns2 spec: compositionSelector: matchLabels: provider: GCP Multicloud
  50. SQLInstance Subnetwork Cloud SQL RDS RDS kind: SQLInstance metadata: name:

    aws-primary namespace: ns1 spec: compositionSelector: matchLabels: provider: AWS kind: SQLInstance metadata: name: gcp-secondary namespace: ns1 spec: compositionSelector: matchLabels: provider: GCP Et la data dans tout cela? Failover
  51. Alors, crossplane ?

  52. Nombre de ressources supportées

  53. Au final • Oui, pour mélanger InfraAsCode et déploiements applicatif

    k8s • Une solution qui se stabilise ◦ Stratégie de providers ◦ Nombre de ressources des providers ◦ De gros changements sur l’année écoulée • Une vraie rupture avec l’InfraAsCode traditionnelle 😄 ◦ Des patterns à construire! ◦ Monitoring de son infraAsCode? ◦ Scalabilité si > 1000 ressources
  54. Merci