RKE2のロールバック

アップグレード後にRKE2のKubernetesバージョンをロールバックするには、RKE2バイナリのダウングレードとデータストアの復元を組み合わせて使用できます。ロールバックは、シングルノードのSQLite、外部データストア、または組み込みのetcdを含むすべてのタイプのクラスターで実行できます。以前のKubernetesマイナーバージョンにロールバックする場合、ロールバック先のKubernetesマイナーバージョンで取得したデータストアのスナップショットが必要です。

データベースを復元できない場合、以前のマイナーバージョンにロールバックすることはできません。

重要な考慮事項

  • *バックアップ:*アップグレード前に、古いバージョンのRKE2を実行しているクラスターから有効なデータベースまたはetcdのスナップショットを取得していることを確認してください。バックアップがない場合、ロールバックは不可能です。

  • データ損失の可能性:`rke2-killall.sh`スクリプトはRKE2プロセスを強制終了し、アプリケーションが適切にシャットダウンされていない場合、データ損失が発生する可能性があります。

  • *バージョンの詳細:*ロールバックの前後で、RKE2およびコンポーネントのバージョンを必ず確認してください。

RKE2クラスターのロールバック

  • SQLite

  • 組み込みetcd

  • 外部データベース

SQLiteデータベースを使用してRKE2クラスターをロールバックするには、.db`ファイルを、データベースのバックアップ時に作成した.db`ファイルのコピーと置き換えてください。

組み込みetcd(デフォルト)の場合、RKE2クラスターのロールバックには、次の手順に従ってください:

  1. クラスターが実行中でKubernetes APIが利用可能な場合、すべてのノードをドレインしてワークロードを優雅に停止します:

     kubectl drain --ignore-daemonsets --delete-emptydir-data <NODE-ONE-NAME> <NODE-TWO-NAME> <NODE-THREE-NAME> ...
  2. 各ノードで、RKE2サービスおよびすべての実行中のポッドプロセスを停止してください:

     rke2-killall.sh
  3. 各ノードで、RKE2バイナリを前のバージョンにロールバックしてください。

    • インターネットアクセスのあるクラスター:

      • サーバーノード:

        curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=vX.Y.Zrke2r1 sh -
      • エージェントノード:

        curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=vX.Y.Zrke2r1 INSTALL_RKE2_TYPE=agent sh -
    • エアギャップ(された)クラスター:

      • アーティファクトをダウンロードし、install scriptをローカルで実行してください。

  4. 最初のサーバーノード、または`server:`RKE2 config fileにエントリがないノードで、クラスターの復元を開始してください。詳細については、Snapshot Restore Stepsを参照してください:

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

    これはetcdデータストア内のすべてのデータを上書きします。復元する前にスナップショットの整合性を確認してください。大きなスナップショットは復元に時間がかかる場合があることに注意してください。

  5. 最初のサーバーノードでRKE2サービスを開始してください:

     systemctl start rke2-server
  6. 他のサーバーノードで、RKE2のデータベースディレクトリを削除してください:

     rm -rf /var/lib/rancher/rke2/server/db
  7. 他のサーバーノードでRKE2サービスを開始してください:

     systemctl start rke2-server
  8. すべてのエージェントノードでRKE2サービスを開始してください:

     systemctl start rke2-agent
  9. `systemctl status rke2-server`または`systemctl status rke2-agent`を使用して、RKE2サービスの状態を確認してください。

外部データベース(例:PostgreSQL、MySQL)を使用してRKE2クラスターをロールバックするには、次の手順に従ってください:

  1. クラスターが実行中でKubernetes APIが利用可能な場合、すべてのノードをドレインしてワークロードを優雅に停止します:

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

    このプロセスは、実行中のアプリケーションに影響を与える可能性があります。

  2. 各ノードで、RKE2サービスとすべての実行中のポッドプロセスを停止します:

     rke2-killall.sh
  3. RKE2のアップグレード前に取得したデータベーススナップショットを復元し、データベースの整合性を確認してください。例えば、PostgreSQLを使用している場合は、次のコマンドを実行してください:

     pg_restore -U <DB-USER> -d <DB-NAME> <BACKUP-FILE>
  4. 各ノードで、RKE2のバイナリを前のバージョンにロールバックします。

    • インターネットアクセスのあるクラスター:

      • サーバーノード:

        curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=vX.Y.Zrke2r1 sh -
      • エージェントノード:

        curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=vX.Y.Zrke2r1 INSTALL_RKE2_TYPE=agent sh -
    • エアギャップ(された)クラスター:

      • アーティファクトをダウンロードし、install scriptをローカルで実行してください。

  5. 各ノードでRKE2サービスを開始します:

     systemctl start rke2-server #or rke2-agent
  6. `systemctl status rke2-server`または`systemctl status rke2-agent`を使用して、RKE2サービスの状態を確認してください。

検証

ロールバック後、次のことを確認してください:

  • RKE2のバージョン:rke2 --version

  • Kubernetesクラスタの健康状態:kubectl get nodes

  • アプリケーションの機能。

  • RKE2のログでエラーを確認してください。