回滚 RKE2

您可以在升级后,通过 RKE2 二进制降级和数据存储恢复的组合来回滚 RKE2 Kubernetes 版本。回滚可以在所有类型的集群上执行,包括单节点 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 服务和所有正在运行的 pod 进程:

     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 -
    • 隔离集群:

  4. 在第一个服务器节点或其 RKE2 配置文件 中没有 server: 条目的节点上,启动集群恢复。有关更多信息,请参阅 快照恢复步骤

     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-serversystemctl 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 服务和所有正在运行的 pod 进程:

     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 -
    • 隔离集群:

  5. 在每个节点上启动 RKE2 服务:

     systemctl start rke2-server #or rke2-agent
  6. 使用 systemctl status rke2-serversystemctl status rke2-agent 验证 RKE2 服务状态。

校验

回滚后,验证以下内容:

  • RKE2 版本:rke2 --version

  • Kubernetes 集群健康状况:kubectl get nodes

  • 应用程序功能。

  • 检查 RKE2 日志以查找错误。