• k8s集群添加新节点-主节点和工作节点


    添加新的master节点

    获取token及token证书

    root@master0:~# kubeadm token create --print-join-command 
    kubeadm join 10.238.67.100:6443 --token tzmx95.jqu8kp4olv41cwps     --discovery-token-ca-cert-hash sha256:3f1090762f1e92da82843285d17ff24720632174c5b058c5f114d346e4ebdb6f
    
    • 1
    • 2

    获取control-plane证书

    root@master0:~# kubeadm init phase upload-certs --upload-certs
    I0812 16:22:02.105583   14476 version.go:254] remote version is much newer: v1.24.3; falling back to: stable-1.20
    [upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
    [upload-certs] Using certificate key:
    dab8068ca363d20a4ecdd1844aa253fa18642704de587165a21c5f34a12f9eb9
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在新的master节点执行命令

    kubeadm join 10.238.67.100:6443 --token tzmx95.jqu8kp4olv41cwps \   
     --discovery-token-ca-cert-hash sha256:3f1090762f1e92da82843285d17ff24720632174c5b058c5f114d346e4ebdb6f \ 
      --control-plane --certificate-key dab8068ca363d20a4ecdd1844aa253fa18642704de587165a21c5f34a12f9eb9
    
    • 1
    • 2
    • 3

    添加新的node节点

    方法一:

    获取master的join token
    kubeadm token create --print-join-command --ttl=0 (–ttl=0代表token永不过期,不加此参数默认24小时过期)
    执行完成后,会自动生成以下命令

    root@k8s-master1:~# kubeadm token create --print-join-command --ttl=0
    kubeadm join 10.238.67.100:6443 --token 00n4f5.cwr1dpzx7ojorsmu     --discovery-token-ca-cert-hash sha256:3f1090762f1e92da82843285d17ff24720632174c5b058c5f114d346e4ebdb6f
    
    • 1
    • 2

    在node节点操作:

    root@k8s-node1:~# kubeadm join 10.238.67.100:6443 --token 00n4f5.cwr1dpzx7ojorsmu     --discovery-token-ca-cert-hash sha256:3f1090762f1e92da82843285d17ff24720632174c5b058c5f114d346e4ebdb6f
    
    • 1

    方法二:

    在master节点操作

    root@master0:~# kubeadm token create
    rsv0a5.pba45ov0kdg34qth    #生成的token
    
    • 1
    • 2

    再执行:

    root@master0:~# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null |  openssl dgst -sha256 -hex | sed 's/^.* //'
    43e1fe29b90eab70840d47a98f9f07dd4efb3b002df16ccfc7e252777d4104cb   #生成的token-ca-cert-hash
    
    • 1
    • 2

    在node节点操作:

    root@k8s-node1:~# kubeadm join 10.238.67.100:6443 --token rsv0a5.pba45ov0kdg34qth --discovery-token-ca-cert-hash sha256:43e1fe29b90eab70840d47a98f9f07dd4efb3b002df16ccfc7e252777d4104cb
    
    • 1

    标题Kubeadm 添加节点出现etcd检查错误

    我是之前的一个主节点加入过集群再次加入会出现这个问题,注
    错误样例

    [check-etcd] Checking that the etcd cluster is healthy
    error execution phase check-etcd: etcd cluster is not healthy: failed to dial endpoint https://10.238.67.101:2379 with maintenance client: context deadline exceeded
    To see the stack trace of this error execute with --v=5 or higher
    
    
    • 1
    • 2
    • 3
    • 4

    根据关键信息 “error execution phase check-etcd” 可知,可能是在执行加入 etcd 时候出现的错误,导致 master 无法加入原先的 kubernetes 集群
    分析问题
    因为集群是通过 kubeadm 工具搭建的,且使用了 etcd 镜像方式与 master 节点一起,所以每个 Master 节点上都会存在一个 etcd 容器实例。当剔除一个 master 节点时 etcd 集群未删除剔除的节点的 etcd 成员信息,该信息还存在 etcd 集群列表中。
    所以,我们需要 进入 etcd 手动删除 etcd 成员信息
    解决问题
    1、获取 Etcd 镜像列表

    [root@master2 ~]# kubectl get pods -n kube-system | grep etcd
    etcd-master1                               1/1     Running   19         375d
    etcd-master2                               1/1     Running   20         375d
    
    • 1
    • 2
    • 3

    2、进入 Etcd 容器并删除节点信息

    选择上面两个 etcd 中任意一个 pod,通过 kubectl 工具进入 pod 内部

    [root@k8s-master01 ~]# kubectl exec -it -n kube-system etcd-master1 sh
    kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
    sh-5.0# 
    
    • 1
    • 2
    • 3

    进入容器后,按下面步执行

    ## 配置环境
    
    # export ETCDCTL_API=3
    
    # alias etcdctl='etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key'
    
    ## 查看 etcd 集群成员列表
    
    # etcdctl member list
    
    16ef717fe7811db9, started, master1, https://10.238.67.102:2380, https://10.238.67.102:2379, false
    de36a6ad7b39ca1a, started, master2, https://10.238.67.103:2380, https://10.238.67.103:2379, false
    ec799f30ae579d1d, started, master0, https://10.238.67.101:2380, https://10.238.67.101:2379, false
    
    ## 删除 etcd 集群成员 k8s-master02
    
    # etcdctl member remove ec799f30ae579d1d
    
    Member ec799f30ae579d1d removed from cluster 9ace53a6b5b20c7b
    
    ## 退出容器
    
    # exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    3、再次尝试加入集群

    通过 kubeadm 命令再次尝试将 k8s-master02 节点加入集群,在执行前首先进入到 k8s-master02 节点服务器,执行 kubeadm 的清除命令:

    kubeadm reset
    
    • 1

    然后再尝试加入 kubernetes 集群,就ok了

  • 相关阅读:
    我的创作纪念日的温柔与七夕的浪漫交织了在一起
    AI 引擎系列 6 - 在 Vitis 分析器中分析 AI 引擎编译结果(2022.1 更新)
    OpenCV算法库
    【产品设计】APP提升用户注册率的五个方案探讨结论
    Python和Java二选一该学啥?
    Redis 哨兵模式网络问题:Unable Connect
    leetcode 29
    vue之下拉菜单
    数据仓库之数据冗余规范
    golang--module
  • 原文地址:https://blog.csdn.net/weixin_42082634/article/details/126306752