4.1 Kubernetes-Setup

Für die Bereitstellung meines Kubernetes-Clusters habe ich eine automatisierte Lösung gewählt. Mithilfe von Terraform kann ich sowohl den gesamten Cluster als auch einzelne Nodes konfigurieren und bei Bedarf neu erstellen. Dies ermöglicht eine schnelle Wiederherstellung und einfache Skalierung des Clusters.

Terraform-Konfiguration

Die Bereitstellung erfolgt mithilfe von Terraform. Es ermöglicht die Verwaltung der Infrastruktur als Code, wodurch Änderungen reproduzierbar und effizient umgesetzt werden können.

Hauptkomponenten

  • **main.tf**: Die Hauptkonfigurationsdatei definiert die Ressourcen wie virtuelle Maschinen und Netzwerke.

  • **provider.tf**: Konfiguriert den Provider, in diesem Fall MAAS (Metal as a Service).

  • **variables.tf**: Beinhaltet anpassbare Parameter, wie die Anzahl der Nodes und API-Keys.

  • **cloud_init_k0s.tftpl**: Ein Template für Cloud-init, das den K0s-Cluster auf jedem Node konfiguriert.

Beispiele aus der Konfiguration

Auszug aus variables.tf

variable "worker_instances_count" {
  description = "Anzahl der Worker-Nodes"
  default     = 3
}

variable "controller_instances_count" {
  description = "Anzahl der Controller-Nodes"
  default     = 2
}

Schritte zur Bereitstellung

Weitere Details und die zugehörigen Dateien finden sich im Repository: SEM4-EVENTGALLERY Terraform

  1. Initialisieren von Terraform:

     terraform init
    
  2. Exportieren notwendiger Variablen:

     export TF_VAR_url=<MAAS-URL>
     export TF_VAR_key=<API-KEY-4-MAAS>
     export TF_VAR_hostname_prefix=<KVM-HOST>
    
  3. Planen der Bereitstellung:

     terraform plan
    
  4. Anwenden der Bereitstellung:

     terraform apply
    
  5. Löschen der Bereitstellung:

     terraform destroy
    

Cluster-Validierung

Nach der Bereitstellung ist es wichtig, die Funktionalität des Clusters zu prüfen.

Überprüfung der Nodes

Überprüfen, ob alle Nodes korrekt im Cluster registriert sind:

kubectl get nodes

Erwartetes Ergebnis:

NAME                STATUS   ROLES                  AGE   VERSION
k8s-master          Ready    control-plane,master   5m    v1.25.0
k8s-worker-1        Ready    <none>                 5m    v1.25.0
k8s-worker-2        Ready    <none>                 5m    v1.25.0

Test der Core-Komponenten

Sicherstellen, dass alle System-Pods laufen:

kubectl get pods -n kube-system

Deployment eines Test-Pods

Ein einfacher Test-Pod wird bereitgestellt, um die Konnektivität zu überprüfen:

kubectl run test-pod --image=nginx
kubectl port-forward pod/test-pod 8080:80
curl localhost:8080

Falls die NGINX-Standardseite geladen wird, ist der Cluster korrekt konfiguriert.