溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Rancher無法管理集群怎么辦

發(fā)布時(shí)間:2021-07-05 16:17:38 來源:億速云 閱讀:399 作者:chen 欄目:云計(jì)算

這篇文章主要介紹“Rancher無法管理集群怎么辦”,在日常操作中,相信很多人在Rancher無法管理集群怎么辦問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Rancher無法管理集群怎么辦”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

前 言

大部分Rancher用戶傾向于通過使用Rancher Server創(chuàng)建自定義集群。而創(chuàng)建完成之后,也許會(huì)因?yàn)楦鞣N各樣的原因?qū)е?Rancher Server 無法繼續(xù)管理該集群,比如誤刪 Rancher Server 或備份數(shù)據(jù)無法恢復(fù)等。遇到此類問題,通常的解決方案是重新啟動(dòng)一個(gè) Rancher Server 并將下游業(yè)務(wù)集群導(dǎo)入并納管,但這樣會(huì)導(dǎo)致一些“后遺癥”,比如無法繼續(xù)擴(kuò)展業(yè)務(wù)集群的節(jié)點(diǎn)。

為了消除這一“后遺癥”的影響,我們可以通過RKE納管Rancher Server 創(chuàng)建的“自定義”集群。

正如你所知,Rancher Server 通過 UI 創(chuàng)建的"自定義"集群,后端是通過 RKE 實(shí)現(xiàn)的,所以 RKE(https://docs.rancher.cn/rke/)有能力去納管Rancher Server 創(chuàng)建的“自定義”集群。

通過RKE 創(chuàng)建和管理 Kubernetes 集群,依賴 3 個(gè)文件:

  • cluster.yml:RKE 集群配置文件

  • kube_config_cluster.yml:該文件包含了獲取該集群所有權(quán)限的認(rèn)證憑據(jù)

  • cluster.rkestate:Kubernetes 集群狀態(tài)文件,包含了獲取該集群所有權(quán)限的認(rèn)證憑據(jù)

所以,只要能從下游業(yè)務(wù)集群中獲得這 3 個(gè)文件,就可以結(jié)合 RKE 二進(jìn)制文件繼續(xù)管理下游業(yè)務(wù)集群。下面將詳細(xì)介紹如何通過 RKE 納管 Rancher Server 創(chuàng)建的“自定義”集群,并通過RKE擴(kuò)展集群的節(jié)點(diǎn)。

演示環(huán)境

本文只針對(duì) Rancher v2.4.x 和 v2.5.x 版本做了測(cè)試,其他版本可能不適用。

為了更好的演示效果,本文將從 Rancher Server 創(chuàng)建“自定義”集群開始,然后通過 RKE 納管"自定義"集群,最后為了確認(rèn) RKE 有能力納管集群,將演示通過 RKE 添加一個(gè)節(jié)點(diǎn)。

Rancher Server(ip-172-31-2-203)可以采用最簡(jiǎn)單的docker run方式啟動(dòng),并通過 UI 創(chuàng)建一個(gè)"自定義"集群,集群中包括兩個(gè)節(jié)點(diǎn):ip-172-31-2-203和ip-172-31-1-111, 詳細(xì)如下:

Rancher無法管理集群怎么辦

# kubectl get nodes
NAME              STATUS   ROLES                      AGE     VERSION
ip-172-31-1-111   Ready    worker                     2m2s    v1.18.14
ip-172-31-2-203   Ready    controlplane,etcd,worker   3m23s   v1.18.14

RKE納管“自定義”集群

1、將ip-172-31-8-56 關(guān)機(jī),模擬 Rancher Server 故障,此時(shí)無法通過 Rancher Server 繼續(xù)管理下游集群。

2、恢復(fù)下游業(yè)務(wù)集群的kube_config_cluster.yml文件,在controlplane節(jié)點(diǎn)上運(yùn)行以下命令:

# docker run --rm --net=host \
  -v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro \
  --entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) \
  --format='{{index .RepoTags 0}}' | tail -1) \
  -c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml get configmap \
  -n kube-system full-cluster-state \
  -o json | jq -r .data.\"full-cluster-state\" | jq \
  -r .currentState.certificatesBundle.\"kube-admin\".config | sed \
  -e "/^[[:space:]]*server:/ s_:.*_: \"https://127.0.0.1:6443\"_"' \
  > kubeconfig_admin.yaml

成功導(dǎo)出kubeconfig_admin.yaml之后,就可以使用 kubectl 繼續(xù)操作下游業(yè)務(wù)集群:

# kubectl --kubeconfig kubeconfig_admin.yaml get nodes
NAME              STATUS   ROLES                      AGE   VERSION
ip-172-31-1-111   Ready    worker                     32m   v1.18.14
ip-172-31-2-203   Ready    controlplane,etcd,worker   34m   v1.18.14

3、恢復(fù)下游業(yè)務(wù)集群的cluster.rkestate文件,在controlplane節(jié)點(diǎn)上運(yùn)行以下命令:

# docker run --rm --net=host \
    -v $(docker inspect kubelet \
    --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro \
    --entrypoint bash $(docker inspect $(docker images -q --filter=label=org.label-schema.vcs-url=https://github.com/rancher/hyperkube.git) \
    --format='{{index .RepoTags 0}}' | tail -1) \
    -c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml \
    -n kube-system get configmap full-cluster-state \
    -o json | jq -r .data.\"full-cluster-state\" | jq -r .' \
    > cluster.rkestate

4、恢復(fù)下游業(yè)務(wù)集群的cluster.yml文件

目前我沒找到好方法可以自動(dòng)恢復(fù)該文件,但可以基于已經(jīng)恢復(fù)的cluster.rkestate來手動(dòng)恢復(fù)cluster.yml文件,因?yàn)?strong>cluster.yml需要的配置基本都可以從cluster.rkestate獲得。

從cluster.rkestate中獲得集群節(jié)點(diǎn)的配置信息:

# cat cluster.rkestate | jq -r .desiredState.rkeConfig.nodes
[
  {
    "nodeName": "c-kfbjs:m-d3e75ad7a0ea",
    "address": "172.31.2.203",
    "port": "22",
    "internalAddress": "172.31.2.203",
    "role": [
      "etcd",
      "controlplane",
      "worker"
],
    "hostnameOverride": "ip-172-31-2-203",
    "user": "root",
    "sshKeyPath": "~/.ssh/id_rsa"
  }
]

根據(jù) cluster.rkestate提供的節(jié)點(diǎn)信息,手動(dòng)編寫 cluster.yml

# cat cluster.yml
nodes:
  - address: 172.31.2.203
    hostname_override: ip-172-31-2-203
    user: ubuntu
    role:
      - controlplane
      - etcd
      - worker
  - address: 172.31.1.111
    hostname_override: ip-172-31-1-111
    user: ubuntu
    role:
      - worker
  - address: 172.31.5.186
    hostname_override: ip-172-31-5-186
    user: ubuntu
    role:
      - worker
kubernetes_version: v1.18.14-rancher1-1

以上手動(dòng)編寫的 cluster.yml 有幾個(gè)地方需要注意:

只能從cluster.rkestate文件中獲得**controlplane(ip-172-31-2-203)節(jié)點(diǎn)的信息,因?yàn)楸纠褐羞€有一個(gè)worker(p-172-31-1-111)節(jié)點(diǎn),所以需要將worker(p-172-31-1-111)**節(jié)點(diǎn)的信息手動(dòng)補(bǔ)充完整。

cluster.yaml中的ip-172-31-5-186是新增的worker節(jié)點(diǎn),用于下一步演示 RKE 新增節(jié)點(diǎn)。

cluster.rkestate獲得的節(jié)點(diǎn)信息是root用戶,需要根據(jù)實(shí)際需求,修改成 RKE 執(zhí)行的用戶,本例為ubuntu用戶。

一定要指定原始集群的kubernetes_version參數(shù),否則會(huì)將集群升級(jí)到 RKE 默認(rèn)的最新版 Kubernetes。

除了以上方式,還可以通過下面的腳本恢復(fù)cluster.yml。同樣,你需要修改以上幾點(diǎn)提到的地方。使用這種方法的好處是可以更完整的恢復(fù)cluster.yml文件,篇幅有限,就不做過多演示:

#!/bin/bash
echo "Building cluster.yml..."
echo "Working on Nodes..."
echo 'nodes:' > cluster.yml
cat cluster.rkestate | grep -v nodeName | jq -r .desiredState.rkeConfig.nodes | yq r - | sed 's/^/  /' | \
sed -e 's/internalAddress/internal_address/g' | \
sed -e 's/hostnameOverride/hostname_override/g' | \
sed -e 's/sshKeyPath/ssh_key_path/g' >> cluster.yml
echo "" >> cluster.yml

echo "Working on services..."
echo 'services:' >> cluster.yml
cat cluster.rkestate  | jq -r .desiredState.rkeConfig.services | yq r - | sed 's/^/  /' >> cluster.yml
echo "" >> cluster.yml

echo "Working on network..."
echo 'network:' >> cluster.yml
cat cluster.rkestate  | jq -r .desiredState.rkeConfig.network | yq r - | sed 's/^/  /' >> cluster.yml
echo "" >> cluster.yml

echo "Working on authentication..."
echo 'authentication:' >> cluster.yml
cat cluster.rkestate  | jq -r .desiredState.rkeConfig.authentication | yq r - | sed 's/^/  /' >> cluster.yml
echo "" >> cluster.yml

echo "Working on systemImages..."
echo 'system_images:' >> cluster.yml
cat cluster.rkestate  | jq -r .desiredState.rkeConfig.systemImages | yq r - | sed 's/^/  /' >> cluster.yml
echo "" >> cluster.yml

5、使用 RKE 在原有集群上新增節(jié)點(diǎn)。

到目前為止,RKE 需要的配置文件cluster.yml、cluster.rkestate都已經(jīng)恢復(fù)完成,接下來就可以通過rke up來操作集群增加**worker(p-172-31-1-111)**節(jié)點(diǎn)。

# rke up
INFO[0000] Running RKE version: v1.2.4
INFO[0000] Initiating Kubernetes cluster
INFO[0000] [certificates] GenerateServingCertificate is disabled, checking if there are unused kubelet certificates
INFO[0000] [certificates] Generating admin certificates and kubeconfig
INFO[0000] Successfully Deployed state file at [./cluster.rkestate]
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [172.31.2.203]
INFO[0000] [dialer] Setup tunnel for host [172.31.1.111]
INFO[0000] [dialer] Setup tunnel for host [172.31.5.186]
...
...
INFO[0090] [addons] no user addons defined
INFO[0090] Finished building Kubernetes cluster successfully

等待集群更新完成之后,再次獲取節(jié)點(diǎn)信息:

# kubectl --kubeconfig kubeconfig_admin.yaml get nodes
NAME              STATUS   ROLES                      AGE     VERSION
ip-172-31-1-111   Ready    worker                     8m6s    v1.18.14
ip-172-31-2-203   Ready    controlplane,etcd,worker   9m27s   v1.18.14
ip-172-31-5-186   Ready    worker                     29s     v1.18.14

可以看到新增了一個(gè)worker(ip-172-31-5-186)節(jié)點(diǎn),并且集群版本依然是v1.18.14。

以后,可以通過 RKE 來繼續(xù)管理通過 Rancher Server 創(chuàng)建的自定義集群,無論是新增節(jié)點(diǎn)、快照、恢復(fù)均可。和直接通過 RKE 創(chuàng)建的集群幾乎無差別。

后 記

雖然本文介紹了如何通過 RKE 納管 Rancher 自定義集群,但操作比較復(fù)雜,特別是cluster.yml的配置,如果出現(xiàn)一點(diǎn)差錯(cuò),可能就會(huì)導(dǎo)致整個(gè)集群的更新或出錯(cuò),所以使用前請(qǐng)您一定要多做測(cè)試。

到此,關(guān)于“Rancher無法管理集群怎么辦”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI