ks集群部署遇到的问题及解决方案

目录

集群的kubeadm重新生成生成的tokern

在node节点执行kubeadm join命令时,提示主机名问题

子节点通过kubeadm join 提示docker版本的问题

calico的controllers没有启动


集群的kubeadm重新生成生成的tokern

(1)当kubeadm join 时,提示超时,提示信息如下,表示不能验证API服务器的身份:超时5m0s后中止连接到API服务器,需要重新生token

超时信息

error execution phase preflight: couldn’t validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s

在master节点重新生成token命令,然后在node子节点中执行kubuadm join命令

kubeadm token create --print-join-command

如果网忘了证书的秘钥,可以在master节点执行以下命令 

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

在node节点执行kubeadm join命令时,提示主机名问题

[root@k8s_node1 ~]# kubeadm join k8s-api:6443 --token abcdef.0123456789abcdef     --discovery-token-ca-cert-hash sha256:792894d89dc7be5df509e0ea472f3c53b30a9ea54037fd2f1a226ec3e1273d14
nodeRegistration.name: Invalid value: "k8s_node1": a DNS-1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')
To see the stack trace of this error execute with --v=5 or higher

原因是:hostname 和 DNS 的解析规则不匹配导致报错,原因是 hostname 和 DNS 的解析规则不匹配, 不能有除-和 . 之外的特殊字符存在。注意是主机名hostname,不可有-或者.

 (1)执行hostname命令查看hostname 

hostname

    (2) 执行hostnamectl set-hostname <主机名>命令更改主机名,<主机名>可自定义,例如:

hostnamectl set-hostname centos7

如果修改hostname后报主机名找不到,可以直接修改/etc/hosts文件将hostname的解析地址加上去

  • 子节点通过kubeadm join 存在的问题

  • 1.子节kubeadm join 点提示docker版本的问题

[preflight] Running pre-flight checks
	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 20.10.16. Latest validated version: 19.03
error execution phase preflight: couldn't validate the identity of the API Server: could not find a JWS signature in the cluster-info ConfigMap for token ID "abcdef"
To see the stack trace of this error execute with --v=5 or higher

执行降级命令,以下${version}根据情况设置docker的版本编号

yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version}

例如将docker由 versions: 20.10.16. 降为version: 19.03

yum downgrade --setopt=obsoletes=0 -y docker-ce-19.03.13-3.el7 docker-ce-cli-19.03.13-3.el7 containerd.io

可能会出现镜像文件或者容器丢失情况,这是因为降级之前,以前的docker服务可能被指定了文件存放路径,接下来把降级后的启动服务文件修改到原来的文件路径即可。
找到之前存放的docker镜像文件,我的环境在/opt/data/docker,请以自己环境为准。
操作如下命令更改镜像存储位置,重新读取
 

root@localhost deploy]# sed -i "s#-H fd:#-g /opt/data/docker -H fd:#g" /lib/systemd/system/docker.service
[root@localhost deploy]# systemctl daemon-reload
[root@localhost deploy]# systemctl restart docker

再查看镜像文件已读取到

[root@localhost deploy]# docker images

2、子节点kubeadm join 时提示文件已经存在 

解决方法:删除提示已存在的证书及配置文件,然后重新kubeadm join 加入主节点

rm -f /etc/kubernetes/kubelet.conf
rm -f /etc/kubernetes/pki/ca.crt 
kubeadm join 192.168.91.20:6443 --token uqodg4.bbdf1qeabf6mhs5n     --discovery-token-ca-cert-hash sha256:ea22b11fda5a349b1f69726e13c01e7740e3cb237ff6a7253ccb046ebd139507 

 如果kubeadm join 出现10250端口被占用的问题,如下:

 解决方法,可以查询端口被那个应用占用了

 如果没有安装net-tools工具,可以执行sudo yum install -y net-tools -q

netstat -ntpl | grep 10250

执行命名后,显示10250端口被kubelet占用了 

可以执行以下命令,重启kubelet 

systemctl restart kubelet

 然后执行命令netstat -ntpl | grep 10250,查看端口是否被解除。如果解除,可以重新执行kubeadm join命名,加入master节点。    

calico的controllers没有启动

执行以下命令查询 pod的状态

kubectl get pods -n kube-system

 解决方案:

 (1)修改calico.yaml文件中的在DaemonSet部分 calico-node的pod的变量中,修改CALICO_IPV4POOL_IPIP值为off,如下:

 - name: CALICO_IPV4POOL_IPIP
          #value: "Always"
          value: "off"

(2)修改pod的网段修改CALICO_IPV4POOL_CIDR为k8s集群的pod网段
同样也在DaemonSet 中, calico-node的pod的变量里,修改如下:

     - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"

 (3)删除calico对象,在master执行以下命令

kubectl  delete -f calico.yaml

(4)新建calico对象

kubectl apply -f calico.yaml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值