Skip to main content

Risiken

Upgrade-Policy

Im Laufe der Zeit sind Aktualisierungen und Upgrades erforderlich, um die Stabilität, Sicherheit und Leistung von Kubernetes-Clustern zu gewährleisten. Kubernetes bietet Funktionen wie den kube-controller-manager, der dabei hilft, kurze Ausfälle abzufedern, indem er Pods verlagert, wenn ein Knoten unerreichbar wird. Ein strukturierter und sorgfältiger Ansatz für Upgrades ist jedoch unerlässlich, um minimale Ausfallzeiten zu gewährleisten und eine Unterbrechung des Clusters zu vermeiden.

Übersicht über den Upgrade-Prozess

  1. Betriebssystem-Updates: Aktualisieren Sie das Betriebssystem und seine Komponenten.
  2. Kubernetes-Updates: Aktualisieren Sie Kubernetes-Komponenten (kubeadm, kubelet, kubectl).
  3. Anwendungs-Updates: Aktualisieren Sie containerisierte Anwendungen, die im Cluster laufen.

Es wird empfohlen, mit den Master-Knoten zu beginnen und dann mit den Worker-Knoten fortzufahren. Jeder Knoten sollte einzeln abgearbeitet werden, um das Risiko von Ausfallzeiten zu minimieren.

Schritt-für-Schritt-Upgrade-Prozess

1. OS-Aktualisierungen

Zu den Betriebssystem-Updates gehören Sicherheitspatches, Kernel-Updates und andere System-Updates, die sich nicht direkt auf den Kubernetes-Cluster auswirken.

  1. Back-Up:

    • Führen Sie Backups des zu aktualisierenden Knotens durch. Detaillierte Anweisungen finden Sie im Abschnitt "Backups in Kubernetes".
    • Erstellen Sie, wenn möglich, einen Snapshot der VM.
  2. : Die Node entleeren:

    • Machen Sie den Knoten für den Cluster unerreichbar, um Unterbrechungen während der Aktualisierung zu vermeiden.
     
    kubectl drain <Nodename> --ignore-daemonsets --force
  3. OS-Update durchführen:

    • Führen Sie die Befehle zur Betriebssystemaktualisierung aus. Dies kann die Aktualisierung von Paketen, die Anwendung von Sicherheitspatches und den Neustart des Knotens umfassen.
  4. Dienste neu starten:

    • Nach dem Neustart laden Sie den Daemon neu und starten das Kubelet neu.
     
    systemctl daemon-reload && systemctl restart kubelet
  5. Koppeln Sie den Knotenpunkt ab:

    • Machen Sie den Knoten wieder für das Cluster verfügbar.
     
    kubectl uncordon <Nodename>

2. Kubernetes Updates

Kubernetes folgt einem dreimonatigen Veröffentlichungszyklus. Es ist wichtig, Kubernetes-Komponenten regelmäßig zu aktualisieren, um von neuen Funktionen, Sicherheits-Patches und Leistungsverbesserungen zu profitieren.

Master-Knoten Upgrade

  1. Back Up:

    • Lesen Sie den Abschnitt "Back-Ups in Kubernetes" und erstellen Sie einen VM-Snapshot.
  2. Den Knotenpunkt entleeren:

    • Entleeren Sie den Hauptknoten, um Unterbrechungen zu vermeiden.
     
    kubectl drain <Nodename> --ignore-daemonsets --force
  3. Neue kubeadm-Version installieren:

    • Aktualisieren Sie kubeadm auf die gewünschte Version.
     
    zypper install kubeadm-1.20.2
  4. Überprüfen Sie die Installation:

    • Überprüfen Sie die installierte kubeadm-Version.
     
    kubeadm version
  5. Erstellen Sie einen Upgrade-Plan:

    • Generieren Sie einen Upgrade-Plan, um die Durchführbarkeit zu prüfen und die verfügbaren Versionen abzurufen.
     
    kubeadm upgrade plan
  6. Wenden Sie das Upgrade an:

    • Für den ersten Masterknoten:
     
    kubeadm upgrade apply 1.20.2
    • Für nachfolgende Master-Knoten:
     
    kubeadm upgrade node
  7. Aktualisieren Sie kubelet und kubectl:

    • Installieren Sie die neuen Versionen von kubelet und kubectl.
     
    zypper install kubelet-1.20.2 kubectl-1.20.2
  8. Starten Sie kubelet neu:

    • Starten Sie den Kubelet-Dienst neu.
     
    systemctl daemon-reload && systemctl restart kubelet
  9. Den Knoten abkoppeln:

    • Machen Sie den Masterknoten wieder für das Cluster verfügbar.
     
    kubectl uncordon <Nodename>

Worker Node Upgrade

  1. Neue kubeadm-Version installieren:

    • Aktualisieren Sie kubeadm auf dem Arbeitsknoten.
     
    zypper install kubeadm-1.20.2
  2. Überprüfen Sie die Installation:

    • Überprüfen Sie die installierte kubeadm-Version.
     
    kubeadm version
  3. Upgrade kubeadm:

    • Wenden Sie das Upgrade auf der Worker Node an.
     
    kubeadm upgrade node
  4. Update kubelet und kubectl:

    • Installieren Sie die neuen Versionen von kubelet und kubectl.
     
    zypper install kubelet-1.20.2 kubectl-1.20.2
  5. Starten Sie kubelet neu:

    • Starten Sie den Kubelet-Dienst neu.
     
    systemctl daemon-reload && systemctl restart kubelet
  6. Den Knoten abkoppeln:

    • Machen Sie die worker node wieder für das Cluster verfügbar.
     
    kubectl uncordon <Nodename>

3. Updates der Anwendung

Die Aktualisierung der Container-Images der Anwendungen im Cluster ist von entscheidender Bedeutung, um sicherzustellen, dass sie mit den neuesten Versionen mit allen Sicherheits-Patches und neuen Funktionen laufen.

  1. Nutze kubectl rollout:

    • Verwalten Sie das Upgrade/Downgrade von Bereitstellungen, Daemonsets und Statefulsets.
  2. Beispiel für den Einsatz:

    • Erstellen Sie eine neue Bereitstellung mit einer aktualisierten Image-Version
     
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-1-19
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:1.19.0
            name: nginx
  3. Wenden Sie den Einsatz an:

    • Wenden Sie die neue Bereitstellungs-YAML an.
     
    kubectl apply -f /path/to/nginx-deployment.yaml
  4. Überprüfen Sie die Aktualisierung:

    • Überprüfen Sie den Status des Rollouts.
     
    kubectl rollout status deployment/nginx-1-19
  5. Rückgängig machen, wenn nötig:

    • Wenn die Aktualisierung fehlschlägt, stellen Sie auf die vorherige Version zurück und machen einen Rollback.
     
    kubectl rollout undo deployment/nginx-1-19

Fehlerhafte Update-Behandlung

Für den Fall, dass eine Aktualisierung schief geht:

  1. Ruhig bleiben: Der Cluster ist HA-fähig und der Ausfall eines Knotens führt nicht zu einer Unterbrechung des gesamten Systems.
  2. Überprüfen Sie Fehlermeldungen: Verwenden Sie journalctl, systemctl, kubectl logs und CRI-Protokolle, um das Problem zu identifizieren.
  3. Überprüfen Sie die Schritte: Stellen Sie sicher, dass die Reihenfolge und die Versionskonsistenz beibehalten wurden.
  4. Kehren Sie zum Snapshot zurück: Falls erforderlich, kehren Sie zu einem VM-Snapshot zurück.
  5. Verwenden Sie eine neue VM: Wenn die VM irreparabel beschädigt ist, verwenden Sie eine neue VM und fügen Sie sie wieder in den Cluster ein.

Schlussfolgerung

Eine klar definierte Upgrade-Richtlinie sorgt für minimale Unterbrechungen und erhält die Stabilität und Sicherheit Ihres Kubernetes-Clusters aufrecht. Durch die Einhaltung eines strukturierten Prozesses für Betriebssystem-, Kubernetes- und Anwendungsaktualisierungen und den ruhigen und systematischen Umgang mit fehlerhaften Aktualisierungen können Sie sicherstellen, dass Ihr Cluster widerstandsfähig und auf dem neuesten Stand bleibt.


Orientieren Sie sich an folgenden Maßnahmen: