Codeer uw cloud en Kubernetes met Crossplane en IaC

Terwijl organisaties Kubernetes omarmen voor cloud-native applicaties, wordt het efficiënt beheren van de infrastructuur uitdagend. Traditionele Infrastructure as Code (IaC) tools zoals Terraform, Pulumi en anderen bieden declaratieve configuraties maar missen naadloze integratie in de Kubernetes-native workflows.

Crossplane overbrugt effectief de kloof tussen Kubernetes en cloud-infrastructuur in deze situatie. In deze blog zullen we verkennen hoe Crossplane IaC mogelijk maakt voor Kubernetes en verder.

Wat Is Crossplane?

Crossplane is een open-source Kubernetes add-on die je in staat stelt om cloud-infrastructuur te voorzien en beheren met behulp van Kubernetes Custom Resource Definitions (CRDs) en de Kubernetes API. In tegenstelling tot traditionele IaC-tools die externe uitvoering vereisen, zoals het extern uitvoeren van Terraform-scripts, integreert Crossplane het infrastructuurbeheer in Kubernetes. Dit maakt het echt declaratief en GitOps-vriendelijk.

Gebruiksscenario’s: Terraform vs. Crossplane

Wanneer Terraform te gebruiken?

  • Beste voor het beheren van infrastructuur buiten Kubernetes
  • Ideaal voor traditionele multi-cloud implementaties en VM’s
  • Sterk ecosysteem met uitgebreide modules en providers
  • Werkt goed met tools zoals Ansible, Packer en Vault voor automatisering

Wanneer Crossplane te gebruiken?

  • Ideaal voor op Kubernetes gerichte omgevingen
  • Ideaal voor GitOps-workflows (ArgoCD, Flux)
  • Mogelijkheid voor self-service provisioning via Kubernetes CRD’s
  • Geschikt voor multi-cloud Kubernetes-beheer (beheren van cloudservices via K8s API)

Aan de slag met Crossplane

Voor dit voorbeeld zullen we minikube gebruiken. Maar dezelfde stappen kunnen worden toegepast op elke Kubernetes-omgeving.

Stap 1: Implementeer MySQL in Kubernetes

1. Implementeer MySQL als een Deployment met een Service voor configuratie met behulp van Crossplane. Je kunt ook MySQL implementeren vanuit een andere locatie. 

2. Definieer een mysql-deployment.yaml, die de secret, deployment en service aanmaakt die nodig zijn om MySQL uit te voeren.

YAML

 

3. Pas de YAML toe met het commando kubectl apply -f mysql-deployment.yaml.

4. Controleer of de pods actief zijn met het commando kubectl get pods

5. Controleer de MySQL-verbinding door een tijdelijke SQL-pod te starten om de MySQL-implementatie te controleren. Maak de client aan met het commando kubectl run mysql-client --image=mysql:8.0 -it --rm -- bash.

6. Verbind met MySQL binnen de pod met het commando mysql -h mysql-service.default.svc.cluster.local -uroot -ppassword.

Stap 2:Installeer Crossplane op Kubernetes

1. Installeer Crossplane met behulp van Helm:

Shell

 

Let op: Het duurt even voordat Crossplane operationeel is. 

2. Verifieer de installatie van Crossplane met het commando kubectl get pods -n crossplane-system.

Stap 3: Installeer de Crossplane Provider voor SQL

1. Definieer een MySQL-provider met behulp van de onderstaande YAML-inhoud.

YAML

 

2. Maak de provider aan met het commando kubectl apply -f provider.yaml.

3. Verifieer de provider met de volgende commando’s: kubectl get pods -n crossplane-system en kubectl get providers

Let op: SQL-providers hebben enkele minuten nodig om operationeel te worden.

Stap 4: Configureer de Crossplane MySQL-provider

De providerconfiguratie vertelt Crossplane hoe te authenticeren met MySQL. Definieer de geheimen die moeten worden aangemaakt voor gebruik door de provider. Werk de stringData dienovereenkomstig bij in de onderstaande YAML. Pas de YAML toe met kubectl apply -f mysql-secret.yaml.

YAML

 

Pas de onderstaande providerconfiguratie toe voor Crossplane, die de bovenstaande geheimen gebruikt. Pas het toe met het commando kubectl apply -f providerconfig.yaml.

YAML

 

Verifieer de creatie van de providerconfiguratie met de commando’s — kubectl get providerconfigs.mysql.sql.crossplane.io en kubectl get crds | grep providerconfig.

Stap 5. Maak een MySQL-database aan met behulp van Crossplane

Gebruik nu Crossplane om een nieuwe database te provisioneren. Gebruik de onderstaande YAML en pas toe met kubectl apply -f mysqlinstance.yaml.

YAML

 

Stap 6: Verifieer de Database Creatie

Verifieer de database creatie met behulp van het commando kubectl get database.mysql.sql.crossplane.io/my-database.

Gebruik dezelfde verificatiestappen die in Stap 1 zijn genoemd om verbinding te maken met MySQL om de creatie van de database te verifiëren.

Met de bovenstaande stappen heb je Crossplane geïnstalleerd, de MySQL provider geconfigureerd en Crossplane gebruikt om een database te provisioneren.

Kunnen Terraform en Crossplane Samen Werken?

Terraform en Crossplane kunnen samen worden gebruikt voor vele scenario’s.

Scenario 1

In een volledig IaC scenario kan Terraform worden gebruikt om Kubernetes clusters op te zetten, en vervolgens kan Crossplane worden gebruikt om cloud resources te beheren vanuit Kubernetes. Terraform kan ook Crossplane zelf implementeren. Dit voorbeeld van een Hybride Workflow kan zijn

  • Terraform provisioneert de Kubernetes cluster in elke cloud provider.
  • Crossplane beheert cloud services (databases, opslag en netwerken) met behulp van Kubernetes CRD’s.

Scenario 2

Crossplane ondersteunt ook een Terraform provider, die kan worden gebruikt om Terraform-scripts uit te voeren als onderdeel van het IaC-model van Crossplane. Het uitvoeren van een Terraform provider voor Crossplane kan nuttig zijn in verschillende scenario’s waar de inheemse providers van Crossplane nog geen ondersteuning bieden voor bepaalde cloudresources of functionaliteiten. Hier zijn de redenen om een Terraform provider voor Crossplane uit te voeren:

  • Terraform heeft een uitgebreid ecosysteem van providers die veel cloudservices ondersteunen waarvoor Crossplane nog geen inheemse providers heeft.
  • Wanneer een organisatie al Terraform gebruikt voor infrastructuurbeheer, is er geen noodzaak om alles opnieuw te schrijven in Crossplane CRD’s.
  • Crossplane ondersteunt multi-cloudbeheer, maar de inheemse providers dekken mogelijk niet elke on-premise of SaaS-integratie.
  • Voor organisaties die geleidelijk willen overstappen van Terraform naar Crossplane, kunnen Terraform-providers binnen Crossplane fungeren als een hybride oplossing voordat de volledige migratie plaatsvindt.
  • Het uitvoeren van Terraform binnen Crossplane brengt Terraform onder het declaratieve GitOps-model van Kubernetes.

Stappen om IBM Cloud Cloudant DB te maken met behulp van Crossplane

Stap 1. Definieer de Terraform-provider.

YAML

 

Stap 2. Configureer de provider.

YAML

 

Stap 3. Lever een Cloudant DB in IBM Cloud door gebruik te maken van Terraform-scripts als onderdeel van de Crossplane.

YAML

 

Dit voorziet in een Cloudant DB met de naam crossplanecloudant in IBM Cloud.

Hoe Crossplane past in Platform Engineering

Platform engineering richt zich op het bouwen en onderhouden van interne ontwikkelaarsplatforms (IDP’s) die de infrastructuurbeheer en applicatie-implementatie vereenvoudigen. Crossplane speelt hierbij een belangrijke rol door een op Kubernetes gebaseerde benadering mogelijk te maken.

Crossplane zorgt voor declaratieve, self-service en op beleid gebaseerde voorziening van cloudresources. Crossplane-functies zoals declaratieve infrastructuur met K8s-API’s, aangepaste abstracties voor infra en apps, beveiliging en nalevingsrichtlijnen, versiebeheerde en geautomatiseerde implementaties, en continue correctie van afwijkingen helpen bij platformengineering.

Conclusie

Crossplane verandert hoe we cloudinfrastructuur beheren door IaC naar het Kubernetes-ecosysteem te brengen. Kubernetes-API’s maken een werkelijk declaratieve en op GitOps gebaseerde benadering mogelijk voor het voorzien en beheren van cloudresources. Als je al Kubernetes gebruikt en je IaC-strategie wilt moderniseren, is Crossplane zeker het verkennen waard.

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