使用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。

使用kubeadm添加新节点到集群及相关问题解决

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日志看到报如下错误

使用kubeadm添加新节点到集群及相关问题解决

解决方案: 

1)、同样需要手扶文件,将master节点/opt/cni/bin目录下的所有文件拷贝到新节点的/opt/cni/bin目录下

使用kubeadm添加新节点到集群及相关问题解决

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

 

上一篇:kubeadm、dashboard及harbor私有仓库部署


下一篇:k8s部署