Codez votre Cloud et Kubernetes avec Crossplane et IaC

À mesure que les organisations adoptent Kubernetes pour des applications cloud-native, la gestion efficace de l’infrastructure devient un défi. Les outils traditionnels d’Infrastructure as Code (IaC) comme Terraform, Pulumi et d’autres offrent des configurations déclaratives mais manquent d’une intégration fluide dans les workflows natifs de Kubernetes.

Crossplane comble efficacement le fossé entre Kubernetes et l’infrastructure cloud dans cette situation. Dans ce blog, nous explorerons comment Crossplane permet l’IaC pour Kubernetes et au-delà.

Qu’est-ce que Crossplane ?

Crossplane est un add-on Kubernetes open-source qui vous permet de provisionner et de gérer l’infrastructure cloud en utilisant les Définitions de Ressources Personnalisées (CRD) et l’API Kubernetes. Contrairement aux outils IaC traditionnels qui nécessitent une exécution externe, comme les scripts Terraform exécutés en externe, Crossplane intègre la gestion de l’infrastructure dans Kubernetes. Cela le rend véritablement déclaratif et compatible avec GitOps.

Cas d’utilisation : Terraform vs. Crossplane

Quand utiliser Terraform ?

  • Idéal pour gérer l’infrastructure en dehors de Kubernetes
  • Parfait pour les déploiements multi-cloud traditionnels et les VM
  • Écosystème solide avec de nombreux modules et fournisseurs
  • Fonctionne bien avec des outils comme Ansible, Packer et Vault pour l’automatisation

Quand utiliser Crossplane?

  • Idéal pour les environnements centrés sur Kubernetes
  • Idéal pour les flux de travail GitOps (ArgoCD, Flux)
  • Permet la provision en libre-service via les CRD Kubernetes
  • Bon pour le contrôle Kubernetes multi-cloud (gestion des services cloud via l’API K8s)

Commencer avec Crossplane

Pour cet exemple, nous utiliserons un minikube. Mais les mêmes étapes peuvent être appliquées à n’importe quel Kubernetes.

Étape 1: Déployer MySQL dans Kubernetes

1. Déployer MySQL en tant que Deployment avec un Service pour la configuration en utilisant Crossplane. Vous pouvez également utiliser MySQL déployé depuis un autre emplacement.

2. Définir un mysql-deployment.yaml, qui crée le secret, le déploiement et le service requis pour exécuter MySQL.

YAML

 

3. Appliquer le YAML en utilisant la commande kubectl apply -f mysql-deployment.yaml.

4. Vérifier que les pods sont en cours d’exécution en utilisant la commande kubectl get pods.

5. Vérifier la connexion MySQL en démarrant un pod SQL temporaire pour vérifier le déploiement MySQL. Créez le client en utilisant la commande kubectl run mysql-client --image=mysql:8.0 -it --rm -- bash.

6. Se connecter à MySQL à l’intérieur du pod en utilisant la commande mysql -h mysql-service.default.svc.cluster.local -uroot -ppassword.

Étape 2: Installer Crossplane sur Kubernetes

1. Installer Crossplane en utilisant Helm:

Shell

 

Note: Crossplane prend quelques minutes pour démarrer. 

2. Vérifier l’installation de Crossplane en utilisant la commande kubectl get pods -n crossplane-system.

Étape 3: Installer le Fournisseur Crossplane pour SQL

1. Définir un fournisseur MySQL en utilisant le contenu YAML ci-dessous.

YAML

 

2. Créer le fournisseur en utilisant la commande kubectl apply -f provider.yaml.

3. Vérifier le fournisseur en utilisant les commandes suivantes: kubectl get pods -n crossplane-system et kubectl get providers

Note: Les fournisseurs SQL prennent quelques minutes pour démarrer.

Étape 4: Configurer le Fournisseur MySQL Crossplane

La configuration du fournisseur indique à Crossplane comment s’authentifier avec MySQL. Définir les secrets à créer pour l’utilisation du fournisseur. Mettre à jour le stringData en conséquence dans le YAML ci-dessous. Appliquer le YAML en utilisant kubectl apply -f mysql-secret.yaml.

YAML

 

Appliquer la configuration du fournisseur ci-dessous pour Crossplane, qui utilise les secrets ci-dessus. L’appliquer en utilisant la commande kubectl apply -f providerconfig.yaml.

YAML

 

Vérifier la création de la configuration du fournisseur en utilisant les commandes — kubectl get providerconfigs.mysql.sql.crossplane.io et kubectl get crds | grep providerconfig.

Étape 5. Créer une Base de Données MySQL en Utilisant Crossplane

Maintenant, utilisez Crossplane pour provisionner une nouvelle base de données. Utilisez le YAML ci-dessous et appliquez-le en utilisant kubectl apply -f mysqlinstance.yaml.

YAML

 

Étape 6: Vérifier la Création de la Base de Données

Vérifiez la création de la base de données en utilisant la commande kubectl get database.mysql.sql.crossplane.io/my-database.

Utilisez les mêmes étapes de vérification mentionnées à l’étape 1 pour vous connecter à MySQL et vérifier la création de la base de données.

Avec les étapes ci-dessus, vous avez installé Crossplane, configuré le fournisseur MySQL et utilisé Crossplane pour provisionner une base de données.

Est-ce que Terraform et Crossplane Peuvent Fonctionner Ensemble?

Terraform et Crossplane peuvent être utilisés ensemble pour de nombreux scénarios.

Scénario 1

Dans un scénario complet d’IaC, Terraform peut être utilisé pour amorcer des clusters Kubernetes, puis Crossplane peut être utilisé pour gérer les ressources cloud depuis Kubernetes. Terraform peut également déployer Crossplane lui-même. Cet exemple de flux de travail hybride peut être

  • Terraform provisionne le cluster Kubernetes sur n’importe quel fournisseur cloud.
  • Crossplane gère les services cloud (bases de données, stockage et réseau) en utilisant les CRD Kubernetes.

Scénario 2

Crossplane prend également en charge un fournisseur Terraform, qui peut être utilisé pour exécuter des scripts Terraform dans le cadre du modèle IaC de Crossplane. L’exécution d’un fournisseur Terraform pour Crossplane peut être utile dans plusieurs scénarios où les fournisseurs natifs de Crossplane ne prennent pas encore en charge certaines ressources ou fonctionnalités cloud. Voici les raisons d’exécuter un fournisseur Terraform pour Crossplane :

  • Terraform dispose d’un vaste écosystème de fournisseurs, soutenant de nombreux services cloud pour lesquels Crossplane n’a peut-être pas encore de fournisseurs natifs.
  • Lorsque qu’une organisation utilise déjà Terraform pour la gestion de l’infrastructure, il n’est pas nécessaire de tout réécrire en CRDs Crossplane.
  • Crossplane prend en charge la gestion multi-cloud, mais ses fournisseurs natifs peuvent ne pas couvrir toutes les intégrations sur site ou SaaS.
  • Pour les organisations cherchant à passer progressivement de Terraform à Crossplane, l’utilisation de fournisseurs Terraform au sein de Crossplane peut servir de solution hybride avant une migration complète.
  • L’exécution de Terraform au sein de Crossplane place Terraform sous le modèle déclaratif GitOps de Kubernetes.

Étapes pour créer une base de données Cloudant sur IBM Cloud en utilisant Crossplane

Étape 1. Définir le fournisseur Terraform.

YAML

 

Étape 2. Configurer le fournisseur.

YAML

 

Étape 3. Provisionner une base de données Cloudant sur IBM Cloud en utilisant des scripts Terraform dans le cadre de Crossplane.

YAML

 

Cela provisionne une base de données Cloudant nommée crossplanecloudant sur IBM Cloud.

Comment Crossplane s’inscrit dans l’ingénierie des plateformes

L’ingénierie de plateforme se concentre sur la construction et la maintenance des plateformes de développeurs internes (IDP) qui simplifient la gestion de l’infrastructure et le déploiement d’applications. Crossplane joue un rôle important en permettant une approche native de Kubernetes.

Crossplane garantit la provision déclarative, en libre-service et pilotée par des politiques des ressources cloud. Des fonctionnalités de Crossplane telles que l’infrastructure déclarative avec des APIs K8s, des abstractions personnalisées pour l’infra et les apps, des garde-fous de sécurité et de conformité, des déploiements versionnés et automatisés, et une correction continue des dérives aident l’ingénierie de plateforme.

Conclusion

Crossplane transforme la manière dont nous gérons l’infrastructure cloud en intégrant l’IaC dans l’écosystème Kubernetes. Les APIs de Kubernetes permettent une approche vraiment déclarative et orientée GitOps pour la provision et la gestion des ressources cloud. Si vous utilisez déjà Kubernetes et cherchez à moderniser votre stratégie IaC, Crossplane vaut vraiment la peine d’être exploré.

Source:
https://dzone.com/articles/codify-cloud-kubernetes-crossplane-iac