本文轉自Rancher Labsnode
做者介紹nginx
王海龍,Rancher中國社區技術經理,負責Rancher中國技術社區的維護和運營。擁有6年的雲計算領域經驗,經歷了OpenStack到Kubernetes的技術變革,不管底層操做系統Linux,仍是虛擬化KVM或是Docker容器技術都有豐富的運維和實踐經驗。docker
Rancher提供兩種安裝方法,單節點和高可用安裝。單節點安裝容許用戶快速部署適用於短時間開發測試爲目的的安裝工做。高可用部署明顯更適合Rancher的長期使用。ubuntu
在實際使用中可能會遇到須要將Rancher Server遷移到其餘的節點或local集羣去管理的狀況。 雖然可使用最簡單的import集羣方式納管,但帶來的問題是後續沒法作集羣的管理和升級維護,並且一些namespace和project的關聯關係將會消失。因此本文主要介紹如何將Rancher Server遷移到其餘節點或local集羣。瀏覽器
本文主要針對3個場景去講解如何遷移Rancher Server:bash
Rancher單節點安裝遷移至其餘主機微信
Rancher單節點安裝遷移至高可用安裝架構
Rancher高可用安裝遷移至其餘Local集羣app
Rancher 官方文檔文檔中並無說明支持如下場景的遷移,本文檔只是利用一些Rancher和RKE現有的功能實現遷移。負載均衡
若是您在此過程當中遇到問題,則應該熟悉Rancher架構/故障排除
遷移很是危險,遷移前必定剛要作好備份,以避免發生意外沒法恢復
您應該熟悉單節點安裝和高可用安裝之間的體系結構差別
本文檔基於Rancher 2.4.x測試,其餘版本操做可能會略有不一樣
本文檔主要講解Rancher Server的遷移,遷移過程當中不會影響業務集羣的使用
默認狀況下, Rancher UI 上覆制的 kubeconfig 經過cluster agent代理鏈接到 kubernetes 集羣。變動 Rancher Server會致使cluster agent沒法鏈接 Rancher Server,從而致使kubectl沒法使用 Rancher UI 上覆制的 kubeconfig 去操做 kubernetes 集羣。但可使用kubectl --context <CLUSTER_NAME>-fqdn 直接鏈接kubernetes集羣進行操做。因此在執行遷移以前,請準備好全部集羣的直連 kubeconfig 配置文件。
Rancher v2.2.2以及以後的版本,能夠直接從UI上下載kubeconfig文件。
Rancher v2.2.2以前的版本,請參考:恢復 kubectl 配置文件
Rancher單節點安裝遷移至其餘主機,只須要將舊集羣Rancher Server容器的/var/lib/rancher
目錄打包,而後替換到新Rancher Server對應的目錄,最後啓動新Rancher Server容器以後再更新agent相關配置便可。
1. Rancher 單節點安裝
提示:如下步驟建立用於演示遷移的 Rancher 單節點環境,若是您須要遷移正式環境能夠跳過此步驟。
執行如下 docker 命令運行單節點 Rancher Server 服務
docker run -itd -p 80:80 -p 443:443 --restart=unless-stopped rancher/rancher:v2.4.3
等容器初始化完成後,經過節點 IP 訪問 Rancher Server UI,設置密碼並登陸。
2. 建立自定義集羣
提示: 如下步驟建立用於演示的業務集羣,用來驗證 Rancher 遷移後數據是否丟失,若是您須要遷移正式環境能夠跳過此步驟。
登陸 Rancher UI 後,添加一個自定義集羣
受權集羣訪問地址
設置爲啓用
,FQDN 和證書能夠不用填寫。
注意:
這一步很關鍵。由於Rancher 遷移後,地址或者 token 或者證書的變動,將會致使 agent 沒法鏈接 Rancher Server。遷移後,須要經過 kubectl 去編輯配置文件更新一些 agent 相關的參數。默認 UI 上的 kubeconfig文件是經過 agent 代理鏈接到 Kubernetes,若是 agent 沒法鏈接 Rancher Server,則經過這個 kubeconfig 文件也沒法訪問 Kubernetes 集羣。開啓受權集羣訪問地址功能會生成多個 Contexts Cluster,這些 Contexts Cluster 是直連 Kubernetes,不經過 agent 代理。若是業務集羣未開啓這個功能,能夠經過編輯集羣來開啓這個功能。
點擊下一步
,根據預先分配的節點角色選擇須要的角色,而後複製命令到主機終端執行。
集羣部署完成後,進入集羣首頁,點擊kubeconfig文件按鈕。在彈窗頁面中複製 kubeconfg 配置文件備用。
3.部署測試應用
部署一個nginx workload。再從應用商店部署一個測試應用。
4. 備份單節點Racher Server數據
docker create --volumes-from <RANCHER_CONTAINER_NAME> --name rancher-data-<DATE> rancher/rancher:<RANCHER_CONTAINER_TAG> docker run --volumes-from rancher-data-<DATE> -v $PWD:/backup:z busybox tar pzcvf /backup/rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz -C /var/lib rancher
詳細請參考Rancher中文官網單節點備份指南。
5. 將生成的rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz
複製到新的Rancher Server節點
scp rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz root@<new_rancher_ip>:/opt/
6. 使用備份數據啓動新節點Rancher Server
若是原Rancher Server經過使用已有的自簽名證書或使用已有的可信證書安裝,遷移時,須要將證書一塊兒複製到新Rancher Server,使用相同啓動命令掛載證書和備份數據啓動Rancher Server。
cd /opt && tar -xvz -f rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz docker run -itd -p 80:80 -p 443:443 -v /opt/rancher:/var/lib/rancher --restart=unless-stopped rancher/rancher:v2.4.3
7. 更新Rancher Server IP或域名
注意:
若是您的環境使用自簽名證書或Let's Encrypt 證書,而且配置域名訪問Rancher Server。遷移以後集羣狀態爲
Active
,請直接跳到第9步去驗證集羣。
此時訪問新的Rancher Server就能夠看見已經被管理的Kubernetes集羣了,但此時集羣狀態是unavailable
,由於agent還連的是舊Rancher Server因此須要更新agent信息。
依次訪問全局 > 系統設置,頁面往下翻找到server-url文件
單擊右側的省略號菜單,選擇升級
修改server-url地址爲新Rancher Server的地址
8. 更新agent配置
經過新域名或IP登陸 Rancher Server;
經過瀏覽器地址欄查詢集羣ID, c/後面以c開頭的字段即爲集羣 ID,本例的集羣ID爲c-4wzvf
;
訪問https://<新的server_url>/v3/clusters/<集羣ID>/clusterregistrationtokens頁面;
打開clusterRegistrationTokens
頁面後,定位到data
字段;找到insecureCommand
字段,複製 YAML 鏈接備用;
可能會有多組
"baseType": "clusterRegistrationToken"
,如上圖。這種狀況以createdTS最大、時間最新的一組爲準,通常是最後一組。
使用kubectl工具,經過前文中準備的直連kubeconfig配置文件和上面步驟中獲取的 YAML 文件,執行如下命令更新agent相關配置。
curl --insecure -sfL <替換爲上面步驟獲取的YAML文件連接> | kubectl --context=xxx apply -f -
關於--context=xxx
說明請參考直接使用下游集羣進行身份驗證。
9. 驗證
過一會,集羣變爲Active
狀態,而後驗證咱們以前部署的應用是否可用。
從單個節點遷移到Rancher的高可用性安裝的過程能夠歸納爲如下幾個步驟:
在Rancher單節點實例上:
備份Rancher單節點容器
備份etcd快照
中止舊的Rancher單節點容器
在RKE Local集羣上:
使用RKE啓動Rancher Local集羣
利用rke etcd snapshot-restore,將單節點備份的etcd快照恢復到RKE HA
在RKE Local集羣中安裝Rancher
更新Local集羣和業務集羣的相關配置,使agent能夠鏈接到正確的Rancher Server
1. Rancher 單節點安裝
提示: 如下步驟建立用於演示遷移的 Rancher 環境,若是您須要遷移正式環境能夠跳過此步驟。
執行如下 docker 命令運行單節點 Rancher Server 服務
docker run -itd -p 80:80 -p 443:443 --restart=unless-stopped rancher/rancher:v2.4.3
等容器初始化完成後,經過節點 IP 訪問 Rancher Server UI,設置密碼並登陸。
2. 建立自定義集羣
提示: 如下步驟建立用於演示的業務集羣,用來驗證 Rancher 遷移後數據是否丟失,若是您須要遷移正式環境能夠跳過此步驟。
登陸 Rancher UI 後,添加一個自定義集羣
受權集羣訪問地址
設置爲啓用
,FQDN 和證書能夠不用填寫。
注意: 這一步很關鍵。由於Rancher 遷移後,地址或者 token 或者證書的變動,將會致使 agent 沒法鏈接 Rancher Server。遷移後,須要經過 kubectl 去編輯配置文件更新一些 agent 相關的參數。默認 UI 上的 kubeconfig文件是經過 agent 代理鏈接到 Kubernetes,若是 agent 沒法鏈接 Rancher Server,則經過這個 kubeconfig 文件也沒法訪問 Kubernetes 集羣。開啓受權集羣訪問地址功能會生成多個 Contexts Cluster,這些 Contexts Cluster 是直連 Kubernetes,不經過 agent 代理。若是業務集羣未開啓這個功能,能夠經過編輯集羣來開啓這個功能。
點擊 下一步 ,根據預先分配的節點角色選擇須要的角色,而後複製命令到主機終端執行。
集羣部署完成後,進入集羣首頁,點擊kubeconfig文件按鈕。在彈窗頁面中複製 kubeconfg 配置文件備用。
3. 部署測試應用
部署一個nginx workload。再從應用商店部署一個測試應用。
4. 建立將單節點etcd快照
docker exec -it <RANCHER_CONTAINER_NAME> bash root@78efdcbe08a6:/# cd / root@78efdcbe08a6:/# ETCDCTL_API=3 etcdctl snapshot save single-node-etcd-snapshot root@78efdcbe08a6:/# exit docker cp <RANCHER_CONTAINER_NAME>:/single-node-etcd-snapshot .
5. 關閉單節點Rancher Server
docker stop <RANCHER_CONTAINER_NAME>
1. RKE部署Local Kubernetes 集羣
根據RKE示例配置 建立 RKE 配置文件 cluster.yml:
nodes: - address: 99.79.49.94 internal_address: 172.31.13.209 user: ubuntu role: [controlplane, worker, etcd] - address: 35.183.174.120 internal_address: 172.31.8.28 user: ubuntu role: [controlplane, worker, etcd] - address: 15.223.49.238 internal_address: 172.31.0.199 user: ubuntu role: [controlplane, worker, etcd]
執行 rke 命令建立 Local Kubernetes 集羣
rke up --config cluster.yml
檢查 Kubernetes 集羣運行狀態
使用kubectl檢查節點狀態,確認節點狀態爲Ready
kubectl get nodes NAME STATUS ROLES AGE VERSION 15.223.49.238 Ready controlplane,etcd,worker 93s v1.17.6 35.183.174.120 Ready controlplane,etcd,worker 92s v1.17.6 99.79.49.94 Ready controlplane,etcd,worker 93s v1.17.6
檢查全部必需的 Pod 和容器是否情況良好,而後能夠繼續進行
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-67cf578fc4-9vjq4 1/1 Running 0 67s ingress-nginx nginx-ingress-controller-8g7kq 1/1 Running 0 67s ingress-nginx nginx-ingress-controller-8jvsd 1/1 Running 0 67s ingress-nginx nginx-ingress-controller-lrt57 1/1 Running 0 67s kube-system canal-68j4r 2/2 Running 0 100s kube-system canal-ff4qg 2/2 Running 0 100s kube-system canal-wl9hd 2/2 Running 0 100s kube-system coredns-7c5566588d-bhbmm 1/1 Running 0 64s kube-system coredns-7c5566588d-rhjpv 1/1 Running 0 87s kube-system coredns-autoscaler-65bfc8d47d-tq4gj 1/1 Running 0 86s kube-system metrics-server-6b55c64f86-vg7qs 1/1 Running 0 79s kube-system rke-coredns-addon-deploy-job-fr2bx 0/1 Completed 0 92s kube-system rke-ingress-controller-deploy-job-vksrk 0/1 Completed 0 72s kube-system rke-metrics-addon-deploy-job-d9hlv 0/1 Completed 0 82s kube-system rke-network-plugin-deploy-job-kf8bn 0/1 Completed 0 103s
2. 將生成的單節點etcd快照從Rancher單節點實例傳到RKE Local集羣節點上
在RKE HA Local節點上建立一個/opt/rke/etcd-snapshots目錄,並將single-node-etcd-snapshot文件複製到該目錄:
mkdir -p /opt/rke/etcd-snapshots scp root@<old_rancher_ip>:/root/single-node-etcd-snapshot /opt/rke/etcd-snapshots
3. 使用RKE將單節點etcd快照還原到新的HA節點
rke etcd snapshot-restore --name single-node-etcd-snapshot --config cluster.yml
4. Rancher HA 安裝
參考安裝文檔安裝 Rancher HA。
5. 爲Rancher HA配置NGINX 負載均衡
參考NGINX 配置示例爲Rancher HA配置負載均衡。
Nginx 配置:
worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } stream { upstream rancher_servers_http { least_conn; server 172.31.11.95:80 max_fails=3 fail_timeout=5s; server 172.31.0.201:80 max_fails=3 fail_timeout=5s; server 172.31.15.236:80 max_fails=3 fail_timeout=5s; } server { listen 80; proxy_pass rancher_servers_http; } upstream rancher_servers_https { least_conn; server 172.31.11.95:443 max_fails=3 fail_timeout=5s; server 172.31.0.201:443 max_fails=3 fail_timeout=5s; server 172.31.15.236:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers_https; } }
Nginx啓動後,咱們就能夠經過配置的域名/IP去訪問Rancher UI。能夠看到業務集羣demo
爲Unavailable
狀態,local
集羣雖然爲Active
,但cluster-agent
和node-agent
均啓動失敗。
這兩種狀況都是由於agent依然鏈接的舊的Rancher Server。
6. 更新Rancher Server IP或域名
依次訪問全局 > 系統設置,頁面往下翻找到server-url文件
單擊右側的省略號菜單,選擇升級
修改server-url地址爲新Rancher server的地址
7. 更新local集羣和業務集羣的agent配置
經過新域名或IP登陸 Rancher Server;
經過瀏覽器地址欄查詢集羣ID, c/後面以c開頭的字段即爲集羣 ID,本例的集羣ID爲c-hftcn
;
訪問https://<新的server_url>/v3/clusters/<集羣ID>/clusterregistrationtokens頁面;
打開clusterRegistrationTokens
頁面後,定位到data
字段;找到insecureCommand
字段,複製 YAML 鏈接備用;
可能會有多組
"baseType": "clusterRegistrationToken"
,如上圖。這種狀況以createdTS最大、時間最新的一組爲準,通常是最後一組。
使用kubectl工具,經過前文中準備的直連kubeconfig配置文件和上面步驟中獲取的 YAML 文件,執行如下命令更新agent相關配置。
注意:
更新local集羣和業務集羣使用的kubeconfig是不一樣的,請針對不通集羣選擇須要的kubeconfig。
關於
--context=xxx
說明請參考直接使用下游集羣進行身份驗證。
curl --insecure -sfL <替換爲上面步驟獲取的YAML文件連接> | kubectl --context=xxx apply -f -
業務集羣agent更新成功後,使用相同的方法更新local
集羣agent配置。
9. 驗證
過一會,local
和demo
集羣都變爲Active
狀態:
Local
集羣的cluster-agent
和node-agent
啓動成功
Demo
集羣的cluster-agent
和node-agent
啓動成功
而後驗證咱們以前部署的應用是否可用。
Rancehr高可用安裝遷移至其餘Local集羣,能夠藉助rke的更新功能完成。經過rke將原來的3節點local集羣擴展成6個節點,此時etcd數據將自動同步到local集羣內的6個節點上,而後再使用rke將原有的3臺節點移除,再次更新。這樣就將Rancher Server能夠平滑的遷移到新的Rancher local集羣。
1. RKE部署Local Kubernetes 集羣
根據RKE示例配置建立 RKE 配置文件 cluster.yml:
nodes: - address: 3.96.52.186 internal_address: 172.31.11.95 user: ubuntu role: [controlplane, worker, etcd] - address: 35.183.186.213 internal_address: 172.31.0.201 user: ubuntu role: [controlplane, worker, etcd] - address: 35.183.130.12 internal_address: 172.31.15.236 user: ubuntu role: [controlplane, worker, etcd]
執行 rke 命令建立 Local Kubernetes 集羣
rke up --config cluster.yml
檢查 Kubernetes 集羣運行狀態
使用kubectl檢查節點狀態,確認節點狀態爲Ready
kubectl get nodes NAME STATUS ROLES AGE VERSION 3.96.52.186 Ready controlplane,etcd,worker 71s v1.17.6 35.183.130.12 Ready controlplane,etcd,worker 72s v1.17.6 35.183.186.213 Ready controlplane,etcd,worker 72s v1.17.6
檢查全部必需的 Pod 和容器是否情況良好,而後能夠繼續進行
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE ingress-nginx default-http-backend-67cf578fc4-gnt5c 1/1 Running 0 72s ingress-nginx nginx-ingress-controller-47p4b 1/1 Running 0 72s ingress-nginx nginx-ingress-controller-85284 1/1 Running 0 72s ingress-nginx nginx-ingress-controller-9qbdz 1/1 Running 0 72s kube-system canal-9bx8k 2/2 Running 0 97s kube-system canal-l2fjb 2/2 Running 0 97s kube-system canal-v7fzs 2/2 Running 0 97s kube-system coredns-7c5566588d-7kv7b 1/1 Running 0 67s kube-system coredns-7c5566588d-t4jfm 1/1 Running 0 90s kube-system coredns-autoscaler-65bfc8d47d-vnrzc 1/1 Running 0 90s kube-system metrics-server-6b55c64f86-r4p8w 1/1 Running 0 79s kube-system rke-coredns-addon-deploy-job-lx667 0/1 Completed 0 94s kube-system rke-ingress-controller-deploy-job-r2nw5 0/1 Completed 0 74s kube-system rke-metrics-addon-deploy-job-4bq76 0/1 Completed 0 84s kube-system rke-network-plugin-deploy-job-gjpm8 0/1 Completed 0 99s
2. Rancher HA 安裝
參考安裝文檔安裝 Rancher HA。
3. 爲Rancher HA配置NGINX 負載均衡
參考NGINX 配置示例爲Rancher HA配置負載均衡。
Nginx 配置:
worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } stream { upstream rancher_servers_http { least_conn; server 172.31.11.95:80 max_fails=3 fail_timeout=5s; server 172.31.0.201:80 max_fails=3 fail_timeout=5s; server 172.31.15.236:80 max_fails=3 fail_timeout=5s; } server { listen 80; proxy_pass rancher_servers_http; } upstream rancher_servers_https { least_conn; server 172.31.11.95:443 max_fails=3 fail_timeout=5s; server 172.31.0.201:443 max_fails=3 fail_timeout=5s; server 172.31.15.236:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers_https; } }
Nginx啓動後,咱們就能夠經過配置的域名/IP去訪問Rancher UI。能夠導航到local->Nodes 查看到local集羣三個節點的狀態:
4. 部署測試集羣及應用
添加測試集羣,Node Role同時選中etcd
、Control Plane
、Worker
等待測試集羣添加成功後,部署一個nginx workload。再從應用商店部署一個測試應用。
5. 將新集羣的節點添加到Local集羣
修改剛纔建立local集羣所使用的rke配置文件,增長新集羣的配置。
cluster.yml:
nodes: - address: 3.96.52.186 internal_address: 172.31.11.95 user: ubuntu role: [controlplane, worker, etcd] - address: 35.183.186.213 internal_address: 172.31.0.201 user: ubuntu role: [controlplane, worker, etcd] - address: 35.183.130.12 internal_address: 172.31.15.236 user: ubuntu role: [controlplane, worker, etcd] # 如下內容爲新增節點的配置 - address: 52.60.116.56 internal_address: 172.31.14.146 user: ubuntu role: [controlplane, worker, etcd] - address: 99.79.9.244 internal_address: 172.31.15.215 user: ubuntu role: [controlplane, worker, etcd] - address: 15.223.77.84 internal_address: 172.31.8.64 user: ubuntu role: [controlplane, worker, etcd]
更新集羣,將local集羣節點擴展到6個
rke up --cluster.yml
檢查 Kubernetes 集羣運行狀態
使用kubectl測試您的連通性,並確認原節點(3.96.52.18六、35.183.186.21三、35.183.130.12)和新增節點(52.60.116.5六、99.79.9.24四、15.223.77.84)都處於Ready狀態
kubectl get nodes NAME STATUS ROLES AGE VERSION 15.223.77.84 Ready controlplane,etcd,worker 33s v1.17.6 3.96.52.186 Ready controlplane,etcd,worker 88m v1.17.6 35.183.130.12 Ready controlplane,etcd,worker 89m v1.17.6 35.183.186.213 Ready controlplane,etcd,worker 89m v1.17.6 52.60.116.56 Ready controlplane,etcd,worker 101s v1.17.6 99.79.9.244 Ready controlplane,etcd,worker 67s v1.17.6
檢查全部必需的 Pod 和容器是否情況良好,而後能夠繼續進行
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE cattle-system cattle-cluster-agent-68898b5c4d-lkz5m 1/1 Running 0 46m cattle-system cattle-node-agent-9xrbs 1/1 Running 0 109s cattle-system cattle-node-agent-lvdlf 1/1 Running 0 46m cattle-system cattle-node-agent-mnk76 1/1 Running 0 46m cattle-system cattle-node-agent-qfwcm 1/1 Running 0 75s cattle-system cattle-node-agent-tk66h 1/1 Running 0 2m23s cattle-system cattle-node-agent-v2vpf 1/1 Running 0 46m cattle-system rancher-749fd64664-8cg4w 1/1 Running 1 58m cattle-system rancher-749fd64664-fms8x 1/1 Running 1 58m cattle-system rancher-749fd64664-rb5pt 1/1 Running 1 58m ingress-nginx default-http-backend-67cf578fc4-gnt5c 1/1 Running 0 89m ingress-nginx nginx-ingress-controller-44c5z 1/1 Running 0 61s ingress-nginx nginx-ingress-controller-47p4b 1/1 Running 0 89m ingress-nginx nginx-ingress-controller-85284 1/1 Running 0 89m ingress-nginx nginx-ingress-controller-9qbdz 1/1 Running 0 89m ingress-nginx nginx-ingress-controller-kp7p6 1/1 Running 0 61s ingress-nginx nginx-ingress-controller-tfjrw 1/1 Running 0 61s kube-system canal-9bx8k 2/2 Running 0 89m kube-system canal-fqrqv 2/2 Running 0 109s kube-system canal-kkj7q 2/2 Running 0 75s kube-system canal-l2fjb 2/2 Running 0 89m kube-system canal-v7fzs 2/2 Running 0 89m kube-system canal-w7t58 2/2 Running 0 2m23s kube-system coredns-7c5566588d-7kv7b 1/1 Running 0 89m kube-system coredns-7c5566588d-t4jfm 1/1 Running 0 89m kube-system coredns-autoscaler-65bfc8d47d-vnrzc 1/1 Running 0 89m kube-system metrics-server-6b55c64f86-r4p8w 1/1 Running 0 89m kube-system rke-coredns-addon-deploy-job-lx667 0/1 Completed 0 89m kube-system rke-ingress-controller-deploy-job-r2nw5 0/1 Completed 0 89m kube-system rke-metrics-addon-deploy-job-4bq76 0/1 Completed 0 89m kube-system rke-network-plugin-deploy-job-gjpm8 0/1 Completed 0 89m
從上面的信息能夠確認如今local集羣已經擴展到6個,而且全部workload均正常運行。
6. 再次更新集羣,剔除掉原Local集羣節點
再次修改local集羣所使用的rke配置文件,將原local集羣節點配置註釋掉。
cluster.yml:
nodes: # - address: 3.96.52.186 # internal_address: 172.31.11.95 # user: ubuntu # role: [controlplane, worker, etcd] # - address: 35.183.186.213 # internal_address: 172.31.0.201 # user: ubuntu # role: [controlplane, worker, etcd] # - address: 35.183.130.12 # internal_address: 172.31.15.236 # user: ubuntu # role: [controlplane, worker, etcd] # 如下內容爲新增節點 - address: 52.60.116.56 internal_address: 172.31.14.146 user: ubuntu role: [controlplane, worker, etcd] - address: 99.79.9.244 internal_address: 172.31.15.215 user: ubuntu role: [controlplane, worker, etcd] - address: 15.223.77.84 internal_address: 172.31.8.64 user: ubuntu role: [controlplane, worker, etcd]
更新集羣,完成遷移。
rke up --cluster.yml
檢查 Kubernetes 集羣運行狀態
使用kubectl檢查節點狀態爲Ready
,能夠看到local集羣的節點已經替換成了如下3個:
kubectl get nodes NAME STATUS ROLES AGE VERSION 15.223.77.84 Ready controlplane,etcd,worker 11m v1.17.6 52.60.116.56 Ready controlplane,etcd,worker 13m v1.17.6 99.79.9.244 Ready controlplane,etcd,worker 12m v1.17.6
檢查全部必需的 Pod 和容器是否情況良好,而後能夠繼續進行
kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE cattle-system cattle-cluster-agent-68898b5c4d-tm6db 1/1 Running 3 3m14s cattle-system cattle-node-agent-9xrbs 1/1 Running 0 14m cattle-system cattle-node-agent-qfwcm 1/1 Running 0 14m cattle-system cattle-node-agent-tk66h 1/1 Running 0 15m cattle-system rancher-749fd64664-47jw2 1/1 Running 0 3m14s cattle-system rancher-749fd64664-jpqdd 1/1 Running 0 3m14s cattle-system rancher-749fd64664-xn6js 1/1 Running 0 3m14s ingress-nginx default-http-backend-67cf578fc4-4668g 1/1 Running 0 3m14s ingress-nginx nginx-ingress-controller-44c5z 1/1 Running 0 13m ingress-nginx nginx-ingress-controller-kp7p6 1/1 Running 0 13m ingress-nginx nginx-ingress-controller-tfjrw 1/1 Running 0 13m kube-system canal-fqrqv 2/2 Running 0 14m kube-system canal-kkj7q 2/2 Running 0 14m kube-system canal-w7t58 2/2 Running 0 15m kube-system coredns-7c5566588d-nmtrn 1/1 Running 0 3m13s kube-system coredns-7c5566588d-q6hlb 1/1 Running 0 3m13s kube-system coredns-autoscaler-65bfc8d47d-rx7fm 1/1 Running 0 3m14s kube-system metrics-server-6b55c64f86-mcx9z 1/1 Running 0 3m14s
從上面的信息能夠確認如今local集羣已經遷移成功,而且全部workload均正常運行。
修改nginx負載均衡配置,將新節點的信息更新到nginx配置文件中
worker_processes 4; worker_rlimit_nofile 40000; events { worker_connections 8192; } stream { upstream rancher_servers_http { least_conn; server 172.31.14.146:80 max_fails=3 fail_timeout=5s; server 172.31.8.64:80 max_fails=3 fail_timeout=5s; server 172.31.15.215:80 max_fails=3 fail_timeout=5s; } server { listen 80; proxy_pass rancher_servers_http; } upstream rancher_servers_https { least_conn; server 172.31.14.146:443 max_fails=3 fail_timeout=5s; server 172.31.8.64:443 max_fails=3 fail_timeout=5s; server 172.31.15.215:443 max_fails=3 fail_timeout=5s; } server { listen 443; proxy_pass rancher_servers_https; } }
7. 驗證
確認local集羣和業務集羣狀態爲Active
確認Local集羣節點已被替換
原集羣節點IP分別爲:3.96.52.18六、35.183.186.21三、35.183.130.12
而後驗證咱們以前部署的應用是否可用。
開源一直是Rancher的產品理念,咱們也一貫重視與開源社區用戶的交流,爲此建立了20個微信交流羣。本篇文章的誕生源於和社區用戶的屢次交流,發現許多Rancher用戶都有相似的問題。因而,我總結了三個場景並通過反覆測試,最終完成這篇教程。咱們也十分歡迎各位Rancher用戶以各類形式分享本身的使用經驗,一塊兒共建愉快的開源社區。