Rollback von K3s

Sie können nach einem Upgrade einen Rollback der K3s Kubernetes-Version durchführen, indem Sie eine Kombination aus einem K3s-Binär-Downgrade und der Wiederherstellung des Datenspeichers anwenden. Rollback kann auf Clustern aller Art durchgeführt werden, einschließlich eines einzelnen SQLite-Knotens, eines externen Datenspeichers oder eines eingebetteten etcd. Beim Rollback auf eine frühere Kubernetes-Nebenversion müssen Sie einen Datenspeicher-Snapshot besitzen, der auf der gewünschten Kubernetes-Nebenversion aufgenommen wurde.

Wenn Sie die Datenbank nicht wiederherstellen können, ist ein Rollback auf eine frühere Nebenversion nicht möglich.

Wichtige Überlegungen

  • Sicherungen: Stellen Sie vor dem Upgrade sicher, dass Sie einen gültigen Datenbank- oder etcd-Snapshot von Ihrem Cluster haben, das die ältere Version von K3s ausführt. Ohne eine Sicherung ist ein Rollback unmöglich.

  • Potentieller Datenverlust: Das k3s-killall.sh Skript beendet K3s-Prozesse gewaltsam und kann zu Datenverlust führen, wenn Anwendungen nicht ordnungsgemäß heruntergefahren werden.

  • Versionsspezifika: Überprüfen Sie immer die K3s- und Komponenten-Versionen vor und nach dem Rollback.

Rollback eines K3s-Clusters

  • SQLite

  • Eingebettetes etcd

  • Externe Datenbank

Um einen Rollback eines K3s-Clusters mit einer SQLite-Datenbank durchzuführen, ersetzen Sie die .db Datei durch die Kopie der .db Datei, die Sie bei der Sicherung Ihrer Datenbank erstellt haben.

Um einen Rollback eines K3s-Clusters mit einem eingebetteten etcd durchzuführen, befolgen Sie diese Schritte:

  1. Wenn der Cluster läuft und die Kubernetes-API verfügbar ist, stoppen Sie die Arbeitslasten ordnungsgemäß, indem Sie alle Knoten entleeren:

    kubectl drain --ignore-daemonsets --delete-emptydir-data <NODE-ONE-NAME> <NODE-TWO-NAME> <NODE-THREE-NAME> ...
  2. Beenden Sie den K3s-Dienst und alle laufenden Pod-Prozesse auf jedem Knoten:

    k3s-killall.sh
  3. Führen Sie auf jedem Knoten einen Rollback der K3s-Binärdatei auf die vorherige Version durch, aber starten Sie K3s nicht.

    • Cluster mit Internetzugang:

      • Serverknoten:

        curl -sfL https://get.k3s.io | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s INSTALL_K3S_VERSION=vX.Y.Zk3s1 INSTALL_K3S_EXEC="server" INSTALL_K3S_SKIP_START="true" sh -
      • Agentenknoten:

        curl -sfL https://get.k3s.io | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s INSTALL_K3S_VERSION=vX.Y.Zk3s1 INSTALL_K3S_EXEC="agent" INSTALL_K3S_SKIP_START="true" sh -
    • Air-gapped Cluster:

      • Laden Sie die Artefakte herunter und führen Sie das Installationsskript lokal aus. Fügen Sie die Umgebungsvariable INSTALL_K3S_SKIP_START="true" hinzu, wenn Sie das Installationsskript ausführen, um zu verhindern, dass K3s gestartet wird.

  4. Initiieren Sie die Cluster-Wiederherstellung auf dem ersten Serverknoten oder dem Knoten ohne einen server: Eintrag in seiner K3s-Konfigurationsdatei. Siehe die Schritte zur Snapshot-Wiederherstellung für weitere Informationen:

    k3s server --cluster-reset --cluster-reset-restore-path=<PATH-TO-SNAPSHOT>

    Dies überschreibt alle Daten im etcd-Datenspeicher. Überprüfen Sie die Integrität des Snapshots, bevor Sie ihn wiederherstellen. Seien Sie sich bewusst, dass große Snapshots lange dauern können, um wiederhergestellt zu werden.

  5. Starten Sie den K3s-Dienst auf dem ersten Serverknoten:

    systemctl start k3s
  6. Entfernen Sie auf den anderen Serverknoten das K3s-Datenbankverzeichnis:

    rm -rf /var/lib/rancher/k3s/server/db
  7. Starten Sie den K3s-Dienst auf den anderen Serverknoten:

    systemctl start k3s
  8. Starten Sie den K3s-Dienst auf allen Agentenknoten:

    systemctl start k3s
  9. Überprüfen Sie den Status des K3s-Dienstes mit systemctl status k3s.

Um einen Rollback eines K3s-Clusters bei Verwendung einer externen Datenbank (z. B. PostgreSQL, MySQL) durchzuführen, befolgen Sie diese Schritte:

  1. Wenn der Cluster läuft und die Kubernetes-API verfügbar ist, stoppen Sie die Arbeitslasten ordnungsgemäß, indem Sie alle Knoten entleeren:

    kubectl drain --ignore-daemonsets --delete-emptydir-data <NODE-ONE-NAME> <NODE-TWO-NAME> <NODE-THREE-NAME> ...

    Dieser Prozess kann laufende Anwendungen stören.

  2. Beenden Sie den K3s-Dienst und alle laufenden Pod-Prozesse auf jedem Knoten:

    k3s-killall.sh
  3. Stellen Sie einen Datenbank-Snapshot wieder her, der vor dem Upgrade von K3s erstellt wurde, und überprüfen Sie die Integrität der Datenbank. Wenn Sie beispielsweise PostgreSQL verwenden, führen Sie den folgenden Befehl aus:

    pg_restore -U <DB-USER> -d <DB-NAME> <BACKUP-FILE>
  4. Führen Sie auf jedem Knoten ein Rollback der K3s-Binärdatei auf die vorherige Version durch.

    • Cluster mit Internetzugang:

      • Serverknoten:

        curl -sfL https://get.k3s.io | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s INSTALL_K3S_VERSION=vX.Y.Zk3s1 INSTALL_K3S_EXEC="server" sh -
      • Agentenknoten:

        curl -sfL https://get.k3s.io | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s INSTALL_K3S_VERSION=vX.Y.Zk3s1 INSTALL_K3S_EXEC="agent" sh -
    • Air-gapped Cluster:

      • Laden Sie die Artefakte herunter und führen Sie das Installationsskript lokal aus. Überprüfen Sie die K3s-Version nach der Installation mit k3s --version und wenden Sie alle benutzerdefinierten Konfigurationen erneut an, die vor dem Upgrade verwendet wurden.

  5. Starten Sie den K3s-Dienst auf jedem Knoten:

    systemctl start k3s
  6. Überprüfen Sie den Status des K3s-Dienstes mit systemctl status k3s.

Überprüfung

Überprüfen Sie nach dem Rollback Folgendes:

  • K3s-Version: k3s --version

  • Gesundheit des Kubernetes-Clusters: kubectl get nodes

  • Funktionalität der Anwendung.

  • Überprüfen Sie die K3s-Protokolle auf Fehler.