rancher rke 集群恢复
如果 rancher 是 HA 架構部署,在 HA 架構下,rancher 的數據是保存在 rke local K8S 集群中。所以在 rancher HA 架構下只需要通過 RKE 恢復 local 集群數據,即可同時恢復 rancher 的數據。
重要提示 此方法直接使用 RKE 進行集群恢復,它適用于 RKE 創建并導入的集群或者 RKE 部署的 local 集群
恢復準備
提示
- 需要在進行操作的主機上提前安裝 RKE、RKE 下載和安裝 kubectl。
- 在開始還原之前,請確保已停止舊集群節點上的所有 kubernetes 服務。
- 建議創建三個全新節點作為集群恢復的目標節點。有關節點需求,請參閱HA 安裝。您也可以使用現有節點,清除 Kubernetes 和 Rancher 配置,這將破壞這些節點上的數據請做好備份,點擊了解節點初始化。
準備恢復節點并復制最新快照
假設集群中一個或者多個 etcd 節點發生故障,或者整個集群數據丟失,則需要進行 etcd 集群恢復。
添加恢復節點并復制最新快照:
恢復節點可以是全新的節點,或者是之前集群中經過初始化的某個節點;
通過遠程終端登錄恢復節點;
創建快照目錄:
| mkdir -p /opt/rke/etcd-snapshots/ |
復制備份的最新快照到 /opt/rke/etcd-snapshots/ 目錄
- 如果使用 rke 0.2 之前版本做的備份,需拷貝 pki.bundle.tar.gz 到 /opt/rke/etcd-snapshots/ 目錄下;
- 如果使用 rke 0.2 以及以后版本做的備份,拷貝 xxx..rkestate 文件到 rke 配置文件相同目錄下;
設置 RKE 配置文件
創建原始 rancher-cluster.yml 文件的副本,比如:
| cp rancher-cluster.yml rancher-cluster-restore.yml |
對副本配置文件進行以下修改:
注釋 service 中 etcd 的配置;
刪除或注釋掉整個 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:`部分
# addons: |-
# ---
# kind: Namespace
# apiVersion: v1
# metadata:
# ---
...恢復 ETCD 數據
打開 shell 終端,切換到 RKE 二進制文件所在的目錄,并且上一步修改的 rancher-cluster-restore.yml 文件也需要放在同一路徑下。
根據系統類型,選擇運行以下命令還原 etcd 數據:
| # 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 將在恢復節點上創建包含已還原數據的 ETCD 容器,此容器將保持運行狀態,但無法完成 etcd 初始化。
恢復集群
通過 RKE 在恢復節點節點上啟動集群。根據系統類型,選擇運行以下命令運行集群:
| # MacOS ./rke up --config ./rancher-cluster-restore.yml # Linux ./rke up --config ./rancher-cluster-restore.yml |
查看節點狀態
RKE 運行完成后會創建 kubectl 的配置文件 kube_config_rancher-cluster-restore.yml,可通過這個配置文件查詢 K8S 集群節點狀態:
| 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 |
清理舊節點
通過 kubectl 從集群中刪除舊節點
| kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml delete node 18.217.82.189 18.222.22.56 18.191.222.99 |
重啟 恢復節點
恢復節點重啟后,檢查 Kubernetes Pods 的狀態
| 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 服務器啟動并且 DNS/負載均衡器指向新集群,cattle-cluster-agent 和 cattle-node-agentpods 將處于 Error 或者 CrashLoopBackOff 狀態。
刪除殘留文件
集群恢復有可能會導致一些組件對應的 SA 鑒權失效,通過查看 kubectl --kubeconfig=kube_config_rancher-cluster-restore.yml get pods --all-namespaces 可以看到很多 pod 一直無法正常運行,查看 pod 日志可以看到 Authentication failed 等信息。這個時候需要刪除一些舊的認證配置然后重新生成。
| 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 |
添加其他節點
編輯 RKE 配置文件 rancher-cluster-restore.yml,添加或者取消其他節點的注釋,addons 保持注釋狀態。
| 例: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 ... |
更新集群
根據系統類型,選擇運行以下命令更新集群:
| # MacOS ./rke up --config ./rancher-cluster-restore.yml # Linux ./rke up --config ./rancher-cluster-restore.yml |
總結
以上是生活随笔為你收集整理的rancher rke 集群恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【能效管理】AcrelEMS-UT综合管
- 下一篇: QQ云控引流 为您定制营销推广方案