本文轉自Rancher Labs
作者介紹
王海龍,Rancher中國社群技術經理,負責Rancher中國技術社群的維護和運營。擁有6年的雲端計算領域經驗,經歷了OpenStack到Kubernetes的技術變革,無論底層作業系統Linux,還是虛擬化KVM或是Docker容器技術都有豐富的運維和實踐經驗。
Rancher提供兩種安裝方法,單節點和高可用安裝。單節點安裝允許使用者快速部署適用於短期開發測試為目的的安裝工作。高可用部署明顯更適合Rancher的長期使用。
在實際使用中可能會遇到需要將Rancher Server遷移到其他的節點或local叢集去管理的情況。 雖然可以使用最簡單的import叢集方式納管,但帶來的問題是後續無法做叢集的管理和升級維護,而且一些namespace和project的關聯關係將會消失。所以本文主要介紹如何將Rancher Server遷移到其他節點或local叢集。
本文主要針對3個場景去講解如何遷移Rancher Server:
-
Rancher單節點安裝遷移至其他主機
-
Rancher單節點安裝遷移至高可用安裝
-
Rancher高可用安裝遷移至其他Local叢集
重要說明
-
Rancher 官方文件文件中並沒有說明支援以下場景的遷移,本文件只是利用一些Rancher和RKE現有的功能實現遷移。
-
如果您在此過程中遇到問題,則應該熟悉Rancher架構/故障排除
-
遷移非常危險,遷移前一定剛要做好備份,以免發生意外無法恢復
-
您應該熟悉單節點安裝和高可用安裝之間的體系結構差異
-
本文件基於Rancher 2.4.x測試,其他版本操作可能會略有不同
-
本文件主要講解Rancher Server的遷移,遷移過程中不會影響業務叢集的使用
準備叢集直連 kubeconfig 配置檔案
預設情況下, 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 配置檔案
場景1:Rancher單節點安裝遷移至其他主機
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
狀態,然後驗證我們之前部署的應用是否可用。
場景2:Rancher單節點安裝遷移至高可用安裝
從單個節點遷移到Rancher的高可用性安裝的過程可以概括為以下幾個步驟:
在Rancher單節點例項上:
-
備份Rancher單節點容器
-
備份etcd快照
-
停止舊的Rancher單節點容器
在RKE Local叢集上:
-
使用RKE啟動Rancher Local叢集
-
利用rke etcd snapshot-restore,將單節點備份的etcd快照恢復到RKE HA
-
在RKE Local叢集中安裝Rancher
-
更新Local叢集和業務叢集的相關配置,使agent可以連線到正確的Rancher Server
在單節點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>
在RKE Local叢集上
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
啟動成功
然後驗證我們之前部署的應用是否可用。
場景3:Rancehr高可用安裝遷移至其他Local叢集
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.186、35.183.186.213、35.183.130.12)和新增節點(52.60.116.56、99.79.9.244、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.186、35.183.186.213、35.183.130.12
然後驗證我們之前部署的應用是否可用。
總 結
開源一直是Rancher的產品理念,我們也一向重視與開源社群使用者的交流,為此建立了20個微信交流群。本篇文章的誕生源於和社群使用者的多次交流,發現許多Rancher使用者都有類似的問題。於是,我總結了三個場景並經過反覆測試,最終完成這篇教程。我們也十分歡迎各位Rancher使用者以各種形式分享自己的使用經驗,一起共建愉快的開源社群。