1. 程式人生 > 其它 >使用kubeadm新增新節點到叢集及相關問題解決

使用kubeadm新增新節點到叢集及相關問題解決

kubeadm join 使用 token 過期之後(24小時過期),重新生成token

一、重啟生成新token

# 建立新token
kubeadm token create

# 檢視是否存在有效的 token 值
kubeadm token list

二、獲取CA證書 sha256 編碼 hash 值

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

三、新節點加入叢集

kubeadm join 192.168.0.211:6443 --token ai3o14.d555o4992nyl3zgd  --discovery-token-ca-cert-hash  sha256:e4435c11751a06472a4971a2a5811a2e6b7f2ce0689e78201a58082fc3dfc3c7
### token使用上面新生成的token

四、快捷方式、一步到位(可以直接在master節點使用步驟四)

[root@k8s-master package]# kubeadm token create --print-join-command
W0701 13:21:47.900325   85831 configset.go:348] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
kubeadm join 192.168.130.136:6443 --token gs9y86.lhmu23t9kqfax09z     --discovery-token-ca-cert-hash sha256:87408a5d81bd21c845d94630f4ff8fc9a2e206e9f88396d2d2966cec083d7f20

五、新節點加入到叢集

在新加入節點執行如下命令:

kubeadm join 192.168.130.136:6443 --token gs9y86.lhmu23t9kqfax09z     --discovery-token-ca-cert-hash sha256:87408a5d81bd21c845d94630f4ff8fc9a2e206e9f88396d2d2966cec083d7f20

 如果環境沒有問題執行完此條命令就能成功加入到叢集。

遇到問題:

由於master節點到新節點的TCP 22埠不通,並且新節點不能連外網所以納入過程中遇到了很多問題。

1、首先解決兩個Waring。

1)、修改docker driver(這個可以不調整)

解決方法:

調整docker配置檔案,新增以下內容

"exec-opts": ["native.cgroupdriver=systemd"]

2)、由於master節點到新節點的TCP 22埠不通,許多檔案需要手扶。

vim /etc/systemd/system/kubelet.service

[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=http://kubernetes.io/docs/

[Service]
ExecStart=/usr/local/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10

[Install]
WantedBy=multi-user.targetx

2、修改完上面2個Warning後就能成功啟動kubelet後臺服務了,檢視kubelet日誌看到報如下錯誤

解決方案:

1)、同樣需要手扶檔案,將master節點/opt/cni/bin目錄下的所有檔案拷貝到新節點的/opt/cni/bin目錄下

2)、vim /etc/cni/net.d/10-flannel.conflist

{
  "name": "cbr0",
  "cniVersion": "0.3.1",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

3)、另外生成manifests目錄,此目錄下沒有檔案,mkdir/etc/kubernetes/manifests/ 即可。

3、如果過程中還有[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.這個錯誤,調整kubelet配置檔案,加入如下配置即可。

root@test2 ~]# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
...
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true --fail-swap-on=false"
[root@test2 ~]# systemctl daemon-reload
[root@test2 ~]# systemctl restart kubelet