此外,由于 v0.2.0 更改了 Kubernetes 集群状态的存储方式,因此不再需要使用 文件。

建议您从储存 cluster yaml、rke statefile 和 kubeconfig 的主机或堡垒机上进行高可用恢复。您需要安装 和 kubectl CLI 工具。

准备 3 个新节点作为还原的 Rancher 实例的目标。请参阅以了解节点要求。我们建议您使用新建的节点和干净状态开始准备工作,详情请参考节点要求

您也可以使用已有的节点进行准备工作,但是您需要清理节点内的数据和 Rancher 配置。该操作会抹去已有节点内的所有数据和配置,请谨慎使用。清理节点的详细操作指导请参考。

2. 放置快照

根据您的 RKE 版本,用于还原 etcd 集群的快照的处理方式有所不同。

RKE v0.2.0+

从 RKE v0.2.0 开始,快照可以保存在与 S3 兼容的后端中。要从存储在 S3 兼容后端中的快照还原集群,可以跳过此步骤,并在步骤 4:还原数据库中检索快照。否则,您将需要直接将快照放置在节点上。

选择一个干净的节点。该节点将成为初始还原的“目标节点”。将快照放在目标节点上的/opt/rke/etcd-snapshots中。

RKE v0.1.x

拍摄快照时,RKE 将证书的备份(即名为 pki.bundle.tar.gz 的文件)保存在同一位置。快照和 PKI 捆绑包文件是还原过程所必需的,它们应位于同一位置。

选择一个干净的节点。该节点将成为初始还原的“目标节点”。将快照和 PKI 证书捆绑文件放在目标节点上的/opt/rke/etcd-snapshots目录中。

  • 快照 - <snapshot>.db
  • PKI 捆绑包 - pki.bundle.tar.gz

修改副本并进行以下更改。

  • 删除或注释掉整个addons:部分。Rancher 的部署和支持配置已经在etcd数据库中。
  • 更改您的nodes:部分以指向还原节点。
  • 注释掉不是您的“目标节点”的节点。我们希望集群仅在该节点上启动。

示例 rancher-cluster-restore.yml

  1. nodes:
  2. - address: 52.15.238.179 # 新目标节点
  3. user: ubuntu
  4. role: [etcd, controlplane, worker]
  5. # user: ubuntu
  6. # role: [ etcd, controlplane, worker ]
  7. # - address: 52.15.238.133
  8. # user: ubuntu
  9. # role: [ etcd, controlplane, worker ]
  10. # addons: |-
  11. # ---
  12. # kind: Namespace
  13. # apiVersion: v1
  14. # metadata:
  15. # name: cattle-system
  16. # ---

4. 还原数据库

将 RKE 与新的 rancher-cluster-restore.yml 配置一起使用,并将数据库还原到单个“目标节点”。

RKE 将使用目标节点上已还原的数据库创建一个 etcd 容器。在下一步中完集群启动前,该容器将不会完成 etcd 初始化并保持运行状态。

从本地快照还原 etcd 时,假定快照位于目录/opt/rke/etcd-snapshots中的目标节点上。

  1. rke etcd snapshot-restore --name <snapshot>.db --config ./rancher-cluster-restore.yml

从 S3 中的快照还原

自 RKE v0.2.0 起可用

从位于兼容 S3 的后端中的快照还原 etcd 时,该命令需要 S3 信息才能连接到 S3 后端并检索快照。

S3 特定选项仅适用于 RKE v0.2.0 +。

  1. rke up --config ./rancher-cluster-restore.yml

测试集群

RKE 完成后,它将在本地目录中创建一个凭证文件。配置kubectl以使用kube_config_rancher-cluster-restore.yml凭据文件并检查集群的状态。有关详细信息,请参见)。

您的新集群将需要几分钟才能稳定下来。一旦看到新的“目标节点”过渡到Ready,并在NotReady中看到三个旧节点,您就可以继续。

  1. kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. 52.15.238.179 Ready controlplane,etcd,worker 1m v1.10.5
  4. 18.217.82.189 NotReady controlplane,etcd,worker 16d v1.10.5
  5. 18.222.22.56 NotReady controlplane,etcd,worker 16d v1.10.5
  6. 18.191.222.99 NotReady controlplane,etcd,worker 16d v1.10.5

使用kubectl从集群中删除旧节点。

重新启动目标节点

重新启动目标节点以确保集群网络和服务处于干净状态,然后再继续。

等待在kube-system, ingress-nginx中运行的 Pod 和在cattle-system中运行的rancher Pod 返回到 Running 状态。

  1. kubectl get pods --all-namespaces
  2. cattle-system cattle-cluster-agent-766585f6b-kj88m 0/1 Error 6 4m
  3. cattle-system cattle-node-agent-wvhqm 0/1 Error 8 8m
  4. cattle-system rancher-78947c8548-jzlsr 0/1 Running 1 4m
  5. ingress-nginx default-http-backend-797c5bc547-f5ztd 1/1 Running 1 4m
  6. ingress-nginx nginx-ingress-controller-ljvkf 1/1 Running 1 8m
  7. kube-system canal-4pf9v 3/3 Running 3 8m
  8. kube-system cert-manager-6b47fc5fc-jnrl5 1/1 Running 1 4m
  9. kube-system kube-dns-7588d5b5f5-kgskt 3/3 Running 3 4m
  10. kube-system kube-dns-autoscaler-5db9bbb766-s698d 1/1 Running 1 4m
  11. kube-system metrics-server-97bc649d5-6w7zc 1/1 Running 1 4m
  12. kube-system tiller-deploy-56c4cf647b-j4whh 1/1 Running 1 4m

添加其他节点

编辑rancher-cluster-restore.yml RKE 配置文件,并取消其他节点的注释。

示例 rancher-cluster-restore.yml

  1. nodes:
  2. - address: 52.15.238.179 # 新目标节点
  3. user: ubuntu
  4. role: [etcd, controlplane, worker]
  5. - address: 52.15.23.24
  6. user: ubuntu
  7. role: [etcd, controlplane, worker]
  8. - address: 52.15.238.133
  9. user: ubuntu
  10. role: [etcd, controlplane, worker]
  11. # addons: |-
  12. # ---
  13. # kind: Namespace

运行 RKE 并将节点添加到新集群。

完成

:::important 重要 请记住将新的 RKE 配置 和 Kubectl 凭据 kube_config_rancher-cluster-restore.yml 保存在安全的地方,以备将来维护。 :::