超詳細(xì)實戰(zhàn)教程丨多場景解析如何遷移Rancher Server

本文轉(zhuǎn)自Rancher Labs

作者介紹

王海龍,Rancher中國社區(qū)技術(shù)經(jīng)理袍辞,負(fù)責(zé)Rancher中國技術(shù)社區(qū)的維護(hù)和運營颓哮。擁有6年的云計算領(lǐng)域經(jīng)驗,經(jīng)歷了OpenStack到Kubernetes的技術(shù)變革,無論底層操作系統(tǒng)Linux簸呈,還是虛擬化KVM或是Docker容器技術(shù)都有豐富的運維和實踐經(jīng)驗榕订。

Rancher提供兩種安裝方法,單節(jié)點和高可用安裝蜕便。單節(jié)點安裝允許用戶快速部署適用于短期開發(fā)測試為目的的安裝工作劫恒。高可用部署明顯更適合Rancher的長期使用。

在實際使用中可能會遇到需要將Rancher Server遷移到其他的節(jié)點或local集群去管理的情況轿腺。 雖然可以使用最簡單的import集群方式納管两嘴,但帶來的問題是后續(xù)無法做集群的管理和升級維護(hù),而且一些namespace和project的關(guān)聯(lián)關(guān)系將會消失族壳。所以本文主要介紹如何將Rancher Server遷移到其他節(jié)點或local集群憔辫。

本文主要針對3個場景去講解如何遷移Rancher Server:

  1. Rancher單節(jié)點安裝遷移至其他主機

  2. Rancher單節(jié)點安裝遷移至高可用安裝

  3. Rancher高可用安裝遷移至其他Local集群

image

重要說明

  1. Rancher 官方文檔文檔中并沒有說明支持以下場景的遷移,本文檔只是利用一些Rancher和RKE現(xiàn)有的功能實現(xiàn)遷移仿荆。

  2. 如果您在此過程中遇到問題贰您,則應(yīng)該熟悉Rancher架構(gòu)/故障排除

  3. 遷移非常危險,遷移前一定剛要做好備份赖歌,以免發(fā)生意外無法恢復(fù)

  4. 您應(yīng)該熟悉單節(jié)點安裝和高可用安裝之間的體系結(jié)構(gòu)差異

  5. 本文檔基于Rancher 2.4.x測試枉圃,其他版本操作可能會略有不同

  6. 本文檔主要講解Rancher Server的遷移,遷移過程中不會影響業(yè)務(wù)集群的使用

準(zhǔn)備集群直連 kubeconfig 配置文件

默認(rèn)情況下庐冯, Rancher UI 上復(fù)制的 kubeconfig 通過cluster agent代理連接到 kubernetes 集群。變更 Rancher Server會導(dǎo)致cluster agent無法連接 Rancher Server坎穿,從而導(dǎo)致kubectl無法使用 Rancher UI 上復(fù)制的 kubeconfig 去操作 kubernetes 集群展父。但可以使用kubectl --context <CLUSTER_NAME>-fqdn 直接連接kubernetes集群進(jìn)行操作。所以在執(zhí)行遷移之前玲昧,請準(zhǔn)備好所有集群的直連 kubeconfig 配置文件栖茉。

Rancher v2.2.2以及之后的版本,可以直接從UI上下載kubeconfig文件孵延。

Rancher v2.2.2之前的版本吕漂,請參考:恢復(fù) kubectl 配置文件

場景1:Rancher單節(jié)點安裝遷移至其他主機

Rancher單節(jié)點安裝遷移至其他主機,只需要將舊集群Rancher Server容器的/var/lib/rancher目錄打包尘应,然后替換到新Rancher Server對應(yīng)的目錄惶凝,最后啟動新Rancher Server容器之后再更新agent相關(guān)配置即可。

1. Rancher 單節(jié)點安裝

提示:以下步驟創(chuàng)建用于演示遷移的 Rancher 單節(jié)點環(huán)境犬钢,如果您需要遷移正式環(huán)境可以跳過此步驟苍鲜。

執(zhí)行以下 docker 命令運行單節(jié)點 Rancher Server 服務(wù)

docker run -itd -p 80:80 -p 443:443 --restart=unless-stopped rancher/rancher:v2.4.3

等容器初始化完成后,通過節(jié)點 IP 訪問 Rancher Server UI玷犹,設(shè)置密碼并登錄混滔。

image
image

2. 創(chuàng)建自定義集群

提示: 以下步驟創(chuàng)建用于演示的業(yè)務(wù)集群,用來驗證 Rancher 遷移后數(shù)據(jù)是否丟失,如果您需要遷移正式環(huán)境可以跳過此步驟坯屿。

登錄 Rancher UI 后油湖,添加一個自定義集群

image

授權(quán)集群訪問地址設(shè)置為啟用,F(xiàn)QDN 和證書可以不用填寫领跛。

image

注意:

這一步很關(guān)鍵乏德。因為Rancher 遷移后,地址或者 token 或者證書的變更隔节,將會導(dǎo)致 agent 無法連接 Rancher Server鹅经。遷移后,需要通過 kubectl 去編輯配置文件更新一些 agent 相關(guān)的參數(shù)怎诫。默認(rèn) UI 上的 kubeconfig文件是通過 agent 代理連接到 Kubernetes瘾晃,如果 agent 無法連接 Rancher Server,則通過這個 kubeconfig 文件也無法訪問 Kubernetes 集群幻妓。開啟授權(quán)集群訪問地址功能會生成多個 Contexts Cluster蹦误,這些 Contexts Cluster 是直連 Kubernetes,不通過 agent 代理肉津。如果業(yè)務(wù)集群未開啟這個功能强胰,可以通過編輯集群來開啟這個功能。

點擊下一步妹沙,根據(jù)預(yù)先分配的節(jié)點角色選擇需要的角色偶洋,然后復(fù)制命令到主機終端執(zhí)行。

image

集群部署完成后距糖,進(jìn)入集群首頁玄窝,點擊kubeconfig文件按鈕。在彈窗頁面中復(fù)制 kubeconfg 配置文件備用悍引。

image

3.部署測試應(yīng)用

部署一個nginx workload恩脂。再從應(yīng)用商店部署一個測試應(yīng)用。

image

4. 備份單節(jié)點Racher Server數(shù)據(jù)

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

詳細(xì)請參考Rancher中文官網(wǎng)單節(jié)點備份指南趣斤。

5. 將生成的rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz復(fù)制到新的Rancher Server節(jié)點

scp rancher-data-backup-<RANCHER_VERSION>-<DATE>.tar.gz root@<new_rancher_ip>:/opt/

6. 使用備份數(shù)據(jù)啟動新節(jié)點Rancher Server

如果原Rancher Server通過使用已有的自簽名證書或使用已有的可信證書安裝俩块,遷移時,需要將證書一起復(fù)制到新Rancher Server浓领,使用相同啟動命令掛載證書和備份數(shù)據(jù)啟動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或域名

注意:

如果您的環(huán)境使用自簽名證書或Let's Encrypt 證書,并且配置域名訪問Rancher Server镊逝。遷移之后集群狀態(tài)為Active壮啊,請直接跳到第9步去驗證集群。

此時訪問新的Rancher Server就可以看見已經(jīng)被管理的Kubernetes集群了撑蒜,但此時集群狀態(tài)是unavailable歹啼,因為agent還連的是舊Rancher Server所以需要更新agent信息玄渗。

image
  • 依次訪問全局 > 系統(tǒng)設(shè)置,頁面往下翻找到server-url文件

  • 單擊右側(cè)的省略號菜單狸眼,選擇升級

  • 修改server-url地址為新Rancher Server的地址

image
  • 保存

8. 更新agent配置

通過新域名或IP登錄 Rancher Server藤树;

通過瀏覽器地址欄查詢集群ID, c/后面以c開頭的字段即為集群 ID拓萌,本例的集群ID為c-4wzvf岁钓;

image
  • 訪問https://<新的server_url>/v3/clusters/<集群ID>/clusterregistrationtokens頁面;

  • 打開clusterRegistrationTokens頁面后微王,定位到data字段屡限;找到insecureCommand字段,復(fù)制 YAML 連接備用炕倘;

image

可能會有多組"baseType": "clusterRegistrationToken"钧大,如上圖。這種情況以createdTS最大罩旋、時間最新的一組為準(zhǔn)啊央,一般是最后一組。

使用kubectl工具涨醋,通過前文中準(zhǔn)備的直連kubeconfig配置文件和上面步驟中獲取的 YAML 文件瓜饥,執(zhí)行以下命令更新agent相關(guān)配置。

curl --insecure -sfL <替換為上面步驟獲取的YAML文件鏈接> | kubectl --context=xxx  apply -f -

關(guān)于--context=xxx說明請參考直接使用下游集群進(jìn)行身份驗證浴骂。

9. 驗證

過一會乓土,集群變?yōu)?code>Active狀態(tài),然后驗證我們之前部署的應(yīng)用是否可用溯警。

image

場景2:Rancher單節(jié)點安裝遷移至高可用安裝

從單個節(jié)點遷移到Rancher的高可用性安裝的過程可以概括為以下幾個步驟:

在Rancher單節(jié)點實例上:

  1. 備份Rancher單節(jié)點容器

  2. 備份etcd快照

  3. 停止舊的Rancher單節(jié)點容器

在RKE Local集群上:

  1. 使用RKE啟動Rancher Local集群

  2. 利用rke etcd snapshot-restore帐我,將單節(jié)點備份的etcd快照恢復(fù)到RKE HA

  3. 在RKE Local集群中安裝Rancher

  4. 更新Local集群和業(yè)務(wù)集群的相關(guān)配置,使agent可以連接到正確的Rancher Server

在單節(jié)點Rancher Server上操作

1. Rancher 單節(jié)點安裝

提示: 以下步驟創(chuàng)建用于演示遷移的 Rancher 環(huán)境愧膀,如果您需要遷移正式環(huán)境可以跳過此步驟。

執(zhí)行以下 docker 命令運行單節(jié)點 Rancher Server 服務(wù)

docker run -itd -p 80:80 -p 443:443 --restart=unless-stopped rancher/rancher:v2.4.3

等容器初始化完成后谣光,通過節(jié)點 IP 訪問 Rancher Server UI檩淋,設(shè)置密碼并登錄。

image
image

2. 創(chuàng)建自定義集群

提示: 以下步驟創(chuàng)建用于演示的業(yè)務(wù)集群萄金,用來驗證 Rancher 遷移后數(shù)據(jù)是否丟失蟀悦,如果您需要遷移正式環(huán)境可以跳過此步驟。

登錄 Rancher UI 后氧敢,添加一個自定義集群

image

授權(quán)集群訪問地址設(shè)置為啟用日戈,F(xiàn)QDN 和證書可以不用填寫。

image

注意: 這一步很關(guān)鍵孙乖。因為Rancher 遷移后浙炼,地址或者 token 或者證書的變更份氧,將會導(dǎo)致 agent 無法連接 Rancher Server。遷移后弯屈,需要通過 kubectl 去編輯配置文件更新一些 agent 相關(guān)的參數(shù)蜗帜。默認(rèn) UI 上的 kubeconfig文件是通過 agent 代理連接到 Kubernetes,如果 agent 無法連接 Rancher Server资厉,則通過這個 kubeconfig 文件也無法訪問 Kubernetes 集群厅缺。開啟授權(quán)集群訪問地址功能會生成多個 Contexts Cluster,這些 Contexts Cluster 是直連 Kubernetes宴偿,不通過 agent 代理湘捎。如果業(yè)務(wù)集群未開啟這個功能,可以通過編輯集群來開啟這個功能窄刘。

點擊 下一步 窥妇,根據(jù)預(yù)先分配的節(jié)點角色選擇需要的角色,然后復(fù)制命令到主機終端執(zhí)行都哭。

image

集群部署完成后秩伞,進(jìn)入集群首頁,點擊kubeconfig文件按鈕欺矫。在彈窗頁面中復(fù)制 kubeconfg 配置文件備用纱新。

image

3. 部署測試應(yīng)用

部署一個nginx workload。再從應(yīng)用商店部署一個測試應(yīng)用穆趴。

image

4. 創(chuàng)建將單節(jié)點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. 關(guān)閉單節(jié)點Rancher Server

docker stop <RANCHER_CONTAINER_NAME>

在RKE Local集群上

1. RKE部署Local Kubernetes 集群

根據(jù)RKE示例配置 創(chuàng)建 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]

執(zhí)行 rke 命令創(chuàng)建 Local Kubernetes 集群

rke up --config cluster.yml

檢查 Kubernetes 集群運行狀態(tài)

使用kubectl檢查節(jié)點狀態(tài)脸爱,確認(rèn)節(jié)點狀態(tài)為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 和容器是否狀況良好,然后可以繼續(xù)進(jìn)行

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. 將生成的單節(jié)點etcd快照從Rancher單節(jié)點實例傳到RKE Local集群節(jié)點上

在RKE HA Local節(jié)點上創(chuàng)建一個/opt/rke/etcd-snapshots目錄未妹,并將single-node-etcd-snapshot文件復(fù)制到該目錄:

mkdir -p /opt/rke/etcd-snapshots
scp root@<old_rancher_ip>:/root/single-node-etcd-snapshot /opt/rke/etcd-snapshots

3. 使用RKE將單節(jié)點etcd快照還原到新的HA節(jié)點

rke etcd snapshot-restore --name single-node-etcd-snapshot --config cluster.yml

4. Rancher HA 安裝

參考安裝文檔安裝 Rancher HA簿废。

5. 為Rancher HA配置NGINX 負(fù)載均衡

參考NGINX 配置示例為Rancher HA配置負(fù)載均衡

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族檬。可以看到業(yè)務(wù)集群demoUnavailable狀態(tài)化戳,local集群雖然為Active单料,但cluster-agentnode-agent均啟動失敗。

這兩種情況都是因為agent依然連接的舊的Rancher Server点楼。

image
image

6. 更新Rancher Server IP或域名

  • 依次訪問全局 > 系統(tǒng)設(shè)置扫尖,頁面往下翻找到server-url文件

  • 單擊右側(cè)的省略號菜單,選擇升級

  • 修改server-url地址為新Rancher server的地址

image
  • 保存

7. 更新local集群和業(yè)務(wù)集群的agent配置

通過新域名或IP登錄 Rancher Server掠廓;

通過瀏覽器地址欄查詢集群ID换怖, c/后面以c開頭的字段即為集群 ID,本例的集群ID為c-hftcn蟀瞧;

image

訪問https://<新的server_url>/v3/clusters/<集群ID>/clusterregistrationtokens頁面沉颂;

打開clusterRegistrationTokens頁面后条摸,定位到data字段;找到insecureCommand字段兆览,復(fù)制 YAML 連接備用屈溉;

image

可能會有多組"baseType": "clusterRegistrationToken",如上圖抬探。這種情況以createdTS最大子巾、時間最新的一組為準(zhǔn),一般是最后一組小压。

使用kubectl工具线梗,通過前文中準(zhǔn)備的直連kubeconfig配置文件和上面步驟中獲取的 YAML 文件,執(zhí)行以下命令更新agent相關(guān)配置怠益。

注意:

更新local集群和業(yè)務(wù)集群使用的kubeconfig是不同的仪搔,請針對不通集群選擇需要的kubeconfig。

關(guān)于--context=xxx說明請參考直接使用下游集群進(jìn)行身份驗證蜻牢。

curl --insecure -sfL <替換為上面步驟獲取的YAML文件鏈接> | kubectl --context=xxx  apply -f -

業(yè)務(wù)集群agent更新成功后烤咧,使用相同的方法更新local集群agent配置。

9. 驗證

過一會抢呆,localdemo集群都變?yōu)?code>Active狀態(tài):

image

Local集群的cluster-agentnode-agent啟動成功

image

Demo集群的cluster-agentnode-agent啟動成功

image

然后驗證我們之前部署的應(yīng)用是否可用煮嫌。

image

場景3:Rancehr高可用安裝遷移至其他Local集群

Rancehr高可用安裝遷移至其他Local集群,可以借助rke的更新功能完成抱虐。通過rke將原來的3節(jié)點local集群擴(kuò)展成6個節(jié)點昌阿,此時etcd數(shù)據(jù)將自動同步到local集群內(nèi)的6個節(jié)點上,然后再使用rke將原有的3臺節(jié)點移除恳邀,再次更新懦冰。這樣就將Rancher Server可以平滑的遷移到新的Rancher local集群。

1. RKE部署Local Kubernetes 集群

根據(jù)RKE示例配置創(chuàng)建 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]

執(zhí)行 rke 命令創(chuàng)建 Local Kubernetes 集群

rke up --config cluster.yml

檢查 Kubernetes 集群運行狀態(tài)

使用kubectl檢查節(jié)點狀態(tài)谣沸,確認(rèn)節(jié)點狀態(tài)為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 和容器是否狀況良好刷钢,然后可以繼續(xù)進(jìn)行

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 負(fù)載均衡

參考NGINX 配置示例為Rancher HA配置負(fù)載均衡乳附。

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⌒斫Γ可以導(dǎo)航到local->Nodes 查看到local集群三個節(jié)點的狀態(tài):

image

4. 部署測試集群及應(yīng)用

添加測試集群,Node Role同時選中etcd秉版、Control Plane贤重、Worker

image

等待測試集群添加成功后,部署一個nginx workload清焕。再從應(yīng)用商店部署一個測試應(yīng)用并蝗。

image

5. 將新集群的節(jié)點添加到Local集群

修改剛才創(chuàng)建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]

# 以下內(nèi)容為新增節(jié)點的配置
- 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集群節(jié)點擴(kuò)展到6個

rke up --cluster.yml

檢查 Kubernetes 集群運行狀態(tài)

使用kubectl測試您的連通性沃粗,并確認(rèn)原節(jié)點(3.96.52.186、35.183.186.213键畴、35.183.130.12)和新增節(jié)點(52.60.116.56最盅、99.79.9.244、15.223.77.84)都處于Ready狀態(tài)

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 和容器是否狀況良好起惕,然后可以繼續(xù)進(jìn)行

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

從上面的信息可以確認(rèn)現(xiàn)在local集群已經(jīng)擴(kuò)展到6個涡贱,并且所有workload均正常運行。

6. 再次更新集群惹想,剔除掉原Local集群節(jié)點

再次修改local集群所使用的rke配置文件问词,將原local集群節(jié)點配置注釋掉。

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]
# 以下內(nèi)容為新增節(jié)點
- 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 集群運行狀態(tài)

使用kubectl檢查節(jié)點狀態(tài)為Ready,可以看到local集群的節(jié)點已經(jīng)替換成了以下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 和容器是否狀況良好锋叨,然后可以繼續(xù)進(jìn)行

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

從上面的信息可以確認(rèn)現(xiàn)在local集群已經(jīng)遷移成功垄分,并且所有workload均正常運行。

修改nginx負(fù)載均衡配置悲柱,將新節(jié)點的信息更新到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. 驗證

確認(rèn)local集群和業(yè)務(wù)集群狀態(tài)為Active

image

確認(rèn)Local集群節(jié)點已被替換

原集群節(jié)點IP分別為:3.96.52.186锋喜、35.183.186.213、35.183.130.12

image

然后驗證我們之前部署的應(yīng)用是否可用豌鸡。

image

總 結(jié)

開源一直是Rancher的產(chǎn)品理念嘿般,我們也一向重視與開源社區(qū)用戶的交流,為此創(chuàng)建了20個微信交流群涯冠。本篇文章的誕生源于和社區(qū)用戶的多次交流炉奴,發(fā)現(xiàn)許多Rancher用戶都有類似的問題。于是蛇更,我總結(jié)了三個場景并經(jīng)過反復(fù)測試瞻赶,最終完成這篇教程。我們也十分歡迎各位Rancher用戶以各種形式分享自己的使用經(jīng)驗派任,一起共建愉快的開源社區(qū)砸逊。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市掌逛,隨后出現(xiàn)的幾起案子师逸,更是在濱河造成了極大的恐慌,老刑警劉巖豆混,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件篓像,死亡現(xiàn)場離奇詭異动知,居然都是意外死亡,警方通過查閱死者的電腦和手機员辩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門盒粮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人奠滑,你說我怎么就攤上這事丹皱。” “怎么了养叛?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵种呐,是天一觀的道長。 經(jīng)常有香客問我弃甥,道長爽室,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任淆攻,我火速辦了婚禮阔墩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瓶珊。我一直安慰自己啸箫,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布伞芹。 她就那樣靜靜地躺著忘苛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唱较。 梳的紋絲不亂的頭發(fā)上扎唾,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音南缓,去河邊找鬼胸遇。 笑死,一個胖子當(dāng)著我的面吹牛汉形,可吹牛的內(nèi)容都是我干的纸镊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼概疆,長吁一口氣:“原來是場噩夢啊……” “哼逗威!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起岔冀,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤庵楷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尽纽,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年童漩,在試婚紗的時候發(fā)現(xiàn)自己被綠了弄贿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡矫膨,死狀恐怖差凹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侧馅,我是刑警寧澤危尿,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站馁痴,受9級特大地震影響谊娇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罗晕,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一济欢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧小渊,春花似錦法褥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呐萨,卻和暖如春杀饵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背垛吗。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工凹髓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人怯屉。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓蔚舀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锨络。 傳聞我的和親對象是個殘疾皇子赌躺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359