Skip to main content

RKE Rancher 高可用恢复

此过程描述了如何使用 RKE 根据快照恢复 Rancher Kubernetes 集群的数据。集群快照了包括 Kubernetes 配置以及 Rancher 数据库和状态。使用集群快照恢复时,Kubernetes 配置以及 Rancher 数据库和状态都会被恢复到制作快照那一刻的状态,不会保留在制作快照之后进行的更改。

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

1. 准备#

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

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

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

重要: 在开始还原之前,请确保旧集群节点上的所有 Kubernetes 服务都已停止。我们建议关闭这些旧的节点。

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

3. 配置 RKE#

复制您原始的rancher-cluster.yml文件。

cp rancher-cluster.yml rancher-cluster-restore.yml

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

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

示例 rancher-cluster-restore.yml

nodes:
- address: 52.15.238.179 # 新目标节点
user: ubuntu
role: [etcd, controlplane, worker]
# - address: 52.15.23.24
# user: ubuntu
# role: [ etcd, controlplane, worker ]
# - address: 52.15.238.133
# user: ubuntu
# role: [ etcd, controlplane, worker ]
# addons: |-
# ---
# kind: Namespace
# apiVersion: v1
# metadata:
# name: cattle-system
# ---

4. 还原数据库#

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

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

从本地快照还原#

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

注意: 对于 RKE v0.1.x,pki.bundle.tar.gz 文件也应该位于同一位置。

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

从 S3 中的快照还原#

自 RKE v0.2.0 起可用

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

注意: 开始还原之前,请确保您的cluster.rkestate存在,因为其中包含集群的证书数据。

$ rke etcd snapshot-restore --config cluster.yml --name snapshot-name \
--s3 --access-key S3_ACCESS_KEY --secret-key S3_SECRET_KEY \
--bucket-name s3-bucket-name --s3-endpoint s3.amazonaws.com \
--folder folder-name # 自 v2.3.0 起可用

rke etcd snapshot-restore的选项#

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

选项描述S3 特定选项
--name指定快照名称
--config指定集群 YAML 文件(默认为:“cluster.yml”)[$RKE_CONFIG]
--s3启用备份到 s3*
--s3-endpoint指定 s3 端点 url (默认值:"s3.amazonaws.com")*
--access-key指定 s3 accessKey*
--secret-key指定 s3 secretKey*
--bucket-name指定 s3 桶名称*
--folder指定 s3 在桶中到文件夹 自 v2.3.0 起可用*
--region指定 s3 桶位置 (可选)*
--ssh-agent-auth使用 SSH_AUTH_SOCK 定义的 SSH 代理身份验证
--ignore-docker-version禁用 Docker 版本检查

5. 启动集群#

使用 RKE 并在单个“目标节点”上启动集群。

注意: 对于运行 RKE v0.2.0 +的用户,在开始还原之前,请确保存在您的cluster.rkestate,因为其中包含集群的证书数据。

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

测试集群#

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

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

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

清理旧节点#

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

kubectl delete node 18.217.82.189 18.222.22.56 18.191.222.99

重新启动目标节点#

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

检查 Kubernetes Pods#

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

注意: cattle-cluster-agentcattle-node-agent Pod 将处于 ErrorCrashLoopBackOff 状态,直到 Rancher Server 启动且 DNS /负载均衡器已指向新集群为止。

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

添加其他节点#

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

示例 rancher-cluster-restore.yml

nodes:
- address: 52.15.238.179 # 新目标节点
user: ubuntu
role: [etcd, controlplane, worker]
- address: 52.15.23.24
user: ubuntu
role: [etcd, controlplane, worker]
- address: 52.15.238.133
user: ubuntu
role: [etcd, controlplane, worker]
# addons: |-
# ---
# kind: Namespace

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

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

完成#

Rancher 现在应该正在运行,并且可以用来管理 Kubernetes 集群。查看高可用安装的推荐架构并更新 Rancher DNS 或负载均衡器的端点,从而定位到新集群。端点更新后,纳管的集群上的代理应自动重新连接。由于重新连接回退超时,这可能需要 10 到 15 分钟。

重要

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

Last updated on by yzeng25