rancher rke 集群恢复
如果 rancher 是 HA 架構(gòu)部署,在 HA 架構(gòu)下,rancher 的數(shù)據(jù)是保存在 rke local K8S 集群中。所以在 rancher HA 架構(gòu)下只需要通過 RKE 恢復(fù) local 集群數(shù)據(jù),即可同時(shí)恢復(fù) rancher 的數(shù)據(jù)。
重要提示 此方法直接使用 RKE 進(jìn)行集群恢復(fù),它適用于 RKE 創(chuàng)建并導(dǎo)入的集群或者 RKE 部署的 local 集群
恢復(fù)準(zhǔn)備
提示
- 需要在進(jìn)行操作的主機(jī)上提前安裝 RKE、RKE 下載和安裝 kubectl。
- 在開始還原之前,請(qǐng)確保已停止舊集群節(jié)點(diǎn)上的所有 kubernetes 服務(wù)。
- 建議創(chuàng)建三個(gè)全新節(jié)點(diǎn)作為集群恢復(fù)的目標(biāo)節(jié)點(diǎn)。有關(guān)節(jié)點(diǎn)需求,請(qǐng)參閱HA 安裝。您也可以使用現(xiàn)有節(jié)點(diǎn),清除 Kubernetes 和 Rancher 配置,這將破壞這些節(jié)點(diǎn)上的數(shù)據(jù)請(qǐng)做好備份,點(diǎn)擊了解節(jié)點(diǎn)初始化。
準(zhǔn)備恢復(fù)節(jié)點(diǎn)并復(fù)制最新快照
假設(shè)集群中一個(gè)或者多個(gè) etcd 節(jié)點(diǎn)發(fā)生故障,或者整個(gè)集群數(shù)據(jù)丟失,則需要進(jìn)行 etcd 集群恢復(fù)。
添加恢復(fù)節(jié)點(diǎn)并復(fù)制最新快照:
恢復(fù)節(jié)點(diǎn)可以是全新的節(jié)點(diǎn),或者是之前集群中經(jīng)過初始化的某個(gè)節(jié)點(diǎn);
通過遠(yuǎn)程終端登錄恢復(fù)節(jié)點(diǎn);
創(chuàng)建快照目錄:
| mkdir -p /opt/rke/etcd-snapshots/ |
復(fù)制備份的最新快照到 /opt/rke/etcd-snapshots/ 目錄
- 如果使用 rke 0.2 之前版本做的備份,需拷貝 pki.bundle.tar.gz 到 /opt/rke/etcd-snapshots/ 目錄下;
- 如果使用 rke 0.2 以及以后版本做的備份,拷貝 xxx..rkestate 文件到 rke 配置文件相同目錄下;
設(shè)置 RKE 配置文件
創(chuàng)建原始 rancher-cluster.yml 文件的副本,比如:
| cp rancher-cluster.yml rancher-cluster-restore.yml |
對(duì)副本配置文件進(jìn)行以下修改:
注釋 service 中 etcd 的配置;
刪除或注釋掉整個(gè) addons:部分,Rancher 部署和設(shè)置配置已在 etcd 數(shù)據(jù)庫中,恢復(fù)不再需要;
在 nodes:部分添加恢復(fù)節(jié)點(diǎn),注釋掉其他節(jié)點(diǎn);
例: rancher-cluster-restore.yml
nodes:
- address: 52.15.238.179 # `添加恢復(fù)節(jié)點(diǎn)`
user: ubuntu
role: [ etcd, controlplane, worker ]
# 注釋掉其他節(jié)點(diǎn);
# - address: 52.15.23.24
# user: ubuntu
# role: [ etcd, controlplane, worker ]
# - address: 52.15.238.133
# user: ubuntu
# role: [ etcd, controlplane, worker ]
# 注釋掉 `addons:`部分
# addons: |-
# ---
# kind: Namespace
# apiVersion: v1
# metadata:
# ---
...恢復(fù) ETCD 數(shù)據(jù)
打開 shell 終端,切換到 RKE 二進(jìn)制文件所在的目錄,并且上一步修改的 rancher-cluster-restore.yml 文件也需要放在同一路徑下。
根據(jù)系統(tǒng)類型,選擇運(yùn)行以下命令還原 etcd 數(shù)據(jù):
| # MacOS ./rke etcd snapshot-restore --name <snapshot>.db --config rancher-cluster-restore.yml # Linux ./rke etcd snapshot-restore --name <snapshot>.db --config rancher-cluster-restore.yml |
RKE 將在恢復(fù)節(jié)點(diǎn)上創(chuàng)建包含已還原數(shù)據(jù)的 ETCD 容器,此容器將保持運(yùn)行狀態(tài),但無法完成 etcd 初始化。
恢復(fù)集群
通過 RKE 在恢復(fù)節(jié)點(diǎn)節(jié)點(diǎn)上啟動(dòng)集群。根據(jù)系統(tǒng)類型,選擇運(yùn)行以下命令運(yùn)行集群:
| # MacOS ./rke up --config ./rancher-cluster-restore.yml # Linux ./rke up --config ./rancher-cluster-restore.yml |
查看節(jié)點(diǎn)狀態(tài)
RKE 運(yùn)行完成后會(huì)創(chuàng)建 kubectl 的配置文件 kube_config_rancher-cluster-restore.yml,可通過這個(gè)配置文件查詢 K8S 集群節(jié)點(diǎn)狀態(tài):
| kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml 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 |
清理舊節(jié)點(diǎn)
通過 kubectl 從集群中刪除舊節(jié)點(diǎn)
| kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml delete node 18.217.82.189 18.222.22.56 18.191.222.99 |
重啟 恢復(fù)節(jié)點(diǎn)
恢復(fù)節(jié)點(diǎn)重啟后,檢查 Kubernetes Pods 的狀態(tài)
| kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml 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 服務(wù)器啟動(dòng)并且 DNS/負(fù)載均衡器指向新集群,cattle-cluster-agent 和 cattle-node-agentpods 將處于 Error 或者 CrashLoopBackOff 狀態(tài)。
刪除殘留文件
集群恢復(fù)有可能會(huì)導(dǎo)致一些組件對(duì)應(yīng)的 SA 鑒權(quán)失效,通過查看 kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get pods --all-namespaces 可以看到很多 pod 一直無法正常運(yùn)行,查看 pod 日志可以看到 Authentication failed 等信息。這個(gè)時(shí)候需要?jiǎng)h除一些舊的認(rèn)證配置然后重新生成。
| kubeconfig=kube_config_cluster.yml # 重建 SA Token 密文 kubectl --kubeconfig=$kubeconfig -n kube-system get secrets | \ grep 'kubernetes.io/service-account-token'| awk '{print $1}' | \ grep -E 'coredns|flannel|metrics-server|horizontal|canal|calico' | \ xargs kubectl -n kube-system --kubeconfig=$kubeconfig delete --force --grace-period=0 secrets kubectl --kubeconfig=$kubeconfig -n cattle-system get secrets | \ grep 'kubernetes.io/service-account-token'| awk '{print $1}' | grep -E 'rancher|cattle' | \ xargs kubectl -n cattle-system --kubeconfig=$kubeconfig delete --force --grace-period=0 secrets kubectl --kubeconfig=$kubeconfig -n ingress-nginx get secrets | \ grep 'kubernetes.io/service-account-token'| awk '{print $1}' | \ grep -E 'nginx-ingress-serviceaccount' | \ xargs kubectl -n ingress-nginx --kubeconfig=$kubeconfig delete --force --grace-period=0 secrets # 重建 kube-system 命名空間的 pod kubectl -n kube-system --kubeconfig=$kubeconfig get pod | awk '{print $1}' | \ grep -E 'coredns|flannel|metrics-server|horizontal|canal|calico' | \ xargs kubectl -n kube-system --kubeconfig=$kubeconfig delete --force --grace-period=0 pod # 重建 cattle-system 命名空間的 pod kubectl -n cattle-system --kubeconfig=$kubeconfig get pod | awk '{print $1}' | \ grep -E 'rancher|cattle-node|cattle-cluster-agent' | \ xargs kubectl -n cattle-system --kubeconfig=$kubeconfig delete --force --grace-period=0 pod # 重建 ingress-nginx 命名空間的 pod kubectl -n ingress-nginx --kubeconfig=$kubeconfig get pod | awk '{print $1}' | \ grep -E 'nginx-ingress-controller' | \ xargs kubectl -n ingress-nginx --kubeconfig=$kubeconfig delete --force --grace-period=0 pod |
添加其他節(jié)點(diǎn)
編輯 RKE 配置文件 rancher-cluster-restore.yml,添加或者取消其他節(jié)點(diǎn)的注釋,addons 保持注釋狀態(tài)。
| 例:rancher-cluster-restore.yml nodes: - address: 52.15.238.179 # `恢復(fù)節(jié)點(diǎn)` 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 ... |
更新集群
根據(jù)系統(tǒng)類型,選擇運(yùn)行以下命令更新集群:
| # MacOS ./rke up --config ./rancher-cluster-restore.yml # Linux ./rke up --config ./rancher-cluster-restore.yml |
總結(jié)
以上是生活随笔為你收集整理的rancher rke 集群恢复的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【能效管理】AcrelEMS-UT综合管
- 下一篇: QQ云控引流 为您定制营销推广方案