找回密码
 立即注册
首页 业界区 安全 k8s集群添加master节点报control plane 错误

k8s集群添加master节点报control plane 错误

墨佳美 2025-8-8 15:56:42
本文分享自天翼云开发者社区《k8s集群添加master节点报control plane 错误》,作者:SummerSnow
背景介绍
  1. 在刚部署的k8s集群中添加新的master节点时,报了error execution phase preflight: One or more conditions for hosting a new control plane instance is not satisfied的错误,接下来就针对此问题进行解决说明。
  2. 环境介绍
复制代码
 
k8s版本
  1. kubectl version
  2. Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5", GitCommit:"xxx", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
复制代码
 
部署方式
  1. kubeadm
复制代码
当前节点信息
  1. kubectl get node
  2. NAME          STATUS   ROLES                  AGE     VERSION
  3. k8s-master1   Ready    control-plane,master   24h     v1.23.5
复制代码
master节点加入
  1. #第1步 打印加入集群的相关信息
  2. kubeadm token create --print-join-command
  3. kubeadm join xx.xx.xx.xx:6443 --token xxxx.xxxx --discovery-token-ca-cert-hash sha256:xxx
  4. #第2步 打印加入master的certs信息
  5. kubeadm init phase upload-certs --upload-certs
  6. I0520 14:51:22.848075    1096 version.go:255] remote version is much newer: v1.30.1; falling back to: stable-1.23
  7. [upload-certs] Storing the certificates in Secret "kubeadm-certs" in the "kube-system" Namespace
  8. [upload-certs] Using certificate key:
  9. aaaaaxxxxxxxxxxxxxxxxxx
  10. #第3步 信息拼接(第一步和第二步)
  11. kubeadm token create --print-join-command
  12. kubeadm join xx.xx.xx.xx:6443 --token xxxx.xxxx --discovery-token-ca-cert-hash sha256:xxx --control-plane --certificate-key aaaaaxxxxxxxxxxxxxxxxxx
  13. #第4步 在待加入节点上执行上面第3步的命令,然后报错信息如下:
  14. [preflight] Running pre-flight checks
  15.      [WARNING Hostname]: hostname "xxx" could not be reached
  16.      [WARNING Hostname]: hostname "xxx": lookup xxx on 114.114.114.114:53: no such host
  17.      [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
  18. [preflight] Reading configuration from the cluster...
  19. [preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
  20. error execution phase preflight:
  21. One or more conditions for hosting a new control plane instance is not satisfied.
  22. unable to add a new control plane instance to a cluster that doesn't have a stable controlPlaneEndpoint address
  23. Please ensure that:
  24. * The cluster has a stable controlPlaneEndpoint address.
  25. * The certificates that must be shared among control plane instances are provided.
  26. To see the stack trace of this error execute with --v=5 or higher
复制代码
解决方法

方法1
  1. #1 查看 kubeadm-config的信息(只截取了一部分信息)
  2. kubectl get  cm kubeadm-config -n kube-system -oyaml
  3. apiVersion: v1
  4. data:
  5.    ClusterConfiguration: |
  6.      apiServer:
  7.        extraArgs:
  8.          authorization-mode: Node,RBAC
  9.        timeoutForControlPlane: 4m0s
  10.      apiVersion: kubeadm.k8s.io/v1beta3
  11.      certificatesDir: /etc/kubernetes/pki
  12.      clusterName: kubernetes
  13.      controllerManager: {}
  14.      dns: {}
  15.      etcd:
  16.        local:
  17.          dataDir: /var/lib/etcd
  18.      imageRepository: xxx
  19.      kind: ClusterConfiguration
  20.      kubernetesVersion: v1.23.5
  21.      networking:
  22.        dnsDomain: cluster.local
  23.        podSubnet: xx.xx.0.0/16
  24.        serviceSubnet: xx.xx.0.0/16
  25.      scheduler: {}
  26. #2 添加controlPlaneEndpoint
  27. kubectl edit cm kubeadm-config -n kube-system
  28. apiVersion: v1
  29. data:
  30.    ClusterConfiguration: |
  31.      apiServer:
  32.        extraArgs:
  33.          authorization-mode: Node,RBAC
  34.        timeoutForControlPlane: 4m0s
  35.      apiVersion: kubeadm.k8s.io/v1beta3
  36.      certificatesDir: /etc/kubernetes/pki
  37.      clusterName: kubernetes
  38.      controllerManager: {}
  39.      dns: {}
  40.      etcd:
  41.        local:
  42.          dataDir: /var/lib/etcd
  43.      imageRepository: xxx
  44.      kind: ClusterConfiguration
  45.      kubernetesVersion: v1.23.5
  46.      #在下面添加一行信息
  47.      controlPlaneEndpoint: "xx.xx.xx.xx:port" ## 换成自己的ip和port
  48.      networking:
  49.        dnsDomain: cluster.local
  50.        podSubnet: xx.xx.0.0/16
  51.        serviceSubnet: xx.xx.0.0/16
  52.      scheduler: {}
复制代码
方法2

如果k8s集群中只有一个节点,可将k8s集群重置,然后重新初始化
  1. #1 重置k8s,然后删除相关文件
  2. kubeadm reset -f
  3. rm -rf /etc/kubernetes
  4. rm -rf ~/.kube
  5. #2 重新初始化
  6. kubeadm init --kubernetes-version 1.23.5 --control-plane-endpoint "xx.xx.xx.xx:port" --pod-network-cidr=xx.xx.xx.xx/16 --service-cidr=xx.xx.xx.xx/16 --upload-certs
  7.   
复制代码
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册