FluxAirflowHelmKubernetes

Eine Airflow-Instanz auf einer frischen Kubernetes-Infrastruktur mit Helm, Flux und Rook-Ceph deployen? Geht es noch umständlicher? Falls es doch sein muss, nehme ich dir die Arbeit ab. Wir machen das Ganze auf Vultr.com – und mit Flux flutscht das Deployment. Pun intended!

Voraussetzungen

Bevor wir ins Eisbad springen, mache ich dir klar, was wir hier heute erreichen können:

  • Eine frische Kubernetes-Installation (wir verwenden Vultr)
  • Helm installiert und konfiguriert
  • Flux installiert und konfiguriert
  • Rook-Ceph Operator und Cluster konfiguriert
  • Airflow up and running in the Cluster

Was ist Flux?

Flux ist ein Toolset für Continuous Delivery auf Kubernetes, das dir dabei hilft, deine Kubernetes-Cluster in einem GitOps-Stil zu verwalten. GitOps bedeutet, dass die gesamte Konfiguration und Verwaltung deines Clusters in einem Git-Repository gespeichert wird. Änderungen an deinem Cluster kannst du dann schön per Terminal erledigen.

Vorteile von Flux

  • Automatisierung: Flux überwacht dein Git-Repository und wendet automatisch Änderungen an deinem Cluster an.
  • Transparenz: Alle Änderungen am Cluster sind nachvollziehbar und versioniert im Git-Repository.
  • Sicherheit: Durch GitOps hast du eine einzige Quelle der Wahrheit und kannst Änderungen durch Reviews und Genehmigungen im Git-Repository kontrollieren.
  • Kontinuität: Mit Flux kannst du sicherstellen, dass der Zustand deines Clusters immer mit dem übereinstimmt, was im Git-Repository definiert ist.

Kubernetes-Cluster auf Vultr einrichten

Los geht’s! Erstmal musst du sicherstellen, dass dein Kubernetes-Cluster auf Vultr läuft. Gehe zu Vultr.com, logge dich ein und erstelle einen neuen Kubernetes-Cluster. Befolge die Schritte im Vultr Kubernetes-Tutorial.

Nachdem dein Cluster am Laufen ist, verbinde dich mit ihm:

kubectl cluster-info

Helm installieren und konfigurieren

Falls du Helm noch nicht installiert hast, lass uns das schnell nachholen:

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash

Checke, ob Helm richtig installiert ist:

helm version

Flux installieren und konfigurieren

Zeit für Flux! Installiere Flux in deinem Kubernetes-Cluster:

kubectl apply -f https://github.com/fluxcd/flux2/releases/latest/download/install.yaml

Nun Flux in deinem Repository initialisieren:

flux bootstrap github \
  --owner=<github-username> \
  --repository=<repository-name> \
  --branch=main \
  --path=./clusters/my-cluster

Das war’s schon! Flux ist jetzt bereit, dein Git-Repository zu überwachen und Änderungen an deinem Cluster vorzunehmen. Alle Konfigurationen, die du im Repository speicherst, werden automatisch auf deinen Cluster angewendet. Boom!

Rook-Ceph installieren und konfigurieren

Installiere die Custom Resource Definitions (CRDs) für Rook-Ceph, den Rook-Ceph Operator und erstelle das Rook-Ceph Cluster:

kubectl apply -f /path/to/destination/crds.yaml
kubectl apply -f /path/to/destination/operator.yaml
kubectl apply -f /path/to/destination/cluster.yaml

Nun den StorageClass, den Object Store und den Bucket:

kubectl apply -f /path/to/destination/storageclass.yaml
kubectl apply -f /path/to/destination/object.yaml
kubectl apply -f /path/to/destination/bucket.yaml

Airflow-Helm-Chart konfigurieren

Die Datei airflow-values.yaml enthält die Konfiguration für das Airflow-Helm-Chart. Hier kannst du die Werte nach deinen Wünschen anpassen. Das macht die Sache flexibel!

Airflow mit Helm deployen

Wir fügen das Apache-Airflow-Helm-Repository hinzu und aktualisieren unsere Helm-Repositories:

helm repo add apache-airflow https://airflow.apache.org
helm repo update

Dann installieren wir das Airflow-Helm-Chart:

helm install airflow apache-airflow/airflow -f /path/to/destination/airflow-values.yaml
kubectl get pods --namespace default --> Checke die Installation

Flux konfigurieren, um Airflow-Deployments zu verwalten

Die Datei kustomization.yaml enthält die Kustomization-Konfiguration für Flux. Kopiere diese Datei in dein Git-Repository und passe die Pfade an. Beispielinhalt:

apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
kind: Kustomization
metadata:
  name: airflow
  namespace: default
spec:
  interval: 10m0s
  path: "./path/to/airflow/deployment"
  prune: true
  sourceRef:
    kind: GitRepository
    name: flux-system
    namespace: flux-system

Commit und Push, damit Flux die neuen Konfigurationen übernimmt:

git add .
git commit -m "Add Airflow deployment configuration"
git push origin main

Jetzt kommt Flux ins Spiel. Flux überwacht dein Git-Repository und wendet die Änderungen automatisch auf deinen Kubernetes-Cluster an. Du musst nichts weiter tun – Flux erledigt die ganze Arbeit!

Bonus: Safety first! RBAC einrichten

Damit dein Cluster so sicher ist wie die nächste Trump-Gerichtsverhandlung, richte dir RBAC ein! Wat dat denn schon wieder?

RBAC (Role-Based Access Control) in Kubernetes ist ein Mechanismus, der das Management von Zugriffsrechten steuert. Es ermöglicht die Zuweisung spezifischer Berechtigungen an Benutzer, Gruppen oder Dienste. RBAC stellt sicher, dass nur autorisierte Operationen von authentifizierten Benutzern oder Diensten durchgeführt werden können.