Share
Embed
SnowCamp 2022 - InfraAsCode et multicloud à la sauce Kubernetes avec Crossplane
WeScale
February 09, 2022
Transcript
54 slides
-
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 -
Kubernetes, un standard any cloud oui 88% Utilisez vous Kubernetes
pour orchestrer vos conteneurs? source: redhat.com service managé hybride -
Kubernetes est une boîte à outils • Plugins et exécutables
• Service catalog • Webhook • Opérateurs -
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 -
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 -
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 -
apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ...
crossplane RBAC-manager watch crossplane-system Crossplane “core” -
Providers Crossplane • Ensemble de Custom Resource Definitions - CRD
• Contrôleur pour reconciliation ressources managées / ressource cloud providers officiels -
apiextensions.crossplane.io • ProviderConfig • ... pkg.crossplane.io • Provider • ...
crossplane RBAC-manager watch crossplane-system Provider AWS - installation kubectl apply -f aws-provider.yaml -
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 -
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 -
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 -
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 -
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é -
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 -
VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1
pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 Fini les “drifts” -
VPC IGW EIP1 EIP2 priv subnet1 priv subnet2 pub subnet1
pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 Fini les “drifts” -
Fini les “drifts” VPC IGW EIP1 EIP2 priv subnet1 priv
subnet2 pub subnet1 pub subnet2 NAT1 NAT2 pub RT priv RT1 priv RT2 -
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 -
RBAC kubectl apply -f vpc.yaml cluster-admin cluster-admin rules: - apiGroups:
- '*' resources: - '*' verbs: - '*' - nonResourceURLs: - '*' verbs: - '*' system:masters -
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 -
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 -
Composite Resource Definition Une interface ClaimNames Kind/group of the XRD
OpenAPI 3 spec Version of XRD -
Composition Une implémentation Kind/group/version of the XRD Set of resources
and applied patches Labels -
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” -
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 -
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 -
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