Kubernetes之常见问题

1.  K8s集群的flannel显示CrashLoopBackOff

    1.  显示报错   

        

    2.  查看pod的日志        

I0517 03:22:46.175721       1 main.go:514] Determining IP address of default interface
I0517 03:22:46.176447       1 main.go:527] Using interface with name ens160 and address 172.16.1.232
I0517 03:22:46.176495       1 main.go:544] Defaulting external address to interface address (172.16.1.232)
E0517 03:22:46.191063       1 main.go:241] Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-amd64-7v8wt': Get https://10.1.0.1:443/api/v1/namespaces/kube-system/pods/kube-flannel-ds-amd64-7v8wt: x509: certificate is valid for 10.96.0.1, 172.16.1.232, not 10.1.0.1

    3.  解决方法

        这个错误的意思是, 当kubelet在使用xxxx与api-server通信时,api-server证书返回的地址列表中不包含有xxxx这个地址,导致tls证书校验不通过,可以使用以下命令来查看api-server的证书中包含的所有地址列表

        1.  查看证书的地址列表

            cd /etc/kubernetes/pki

            openssl x509 -noout -text -in apiserver.crt

            显示的结果:                                                      

            X509v3 Subject Alternative Name:
              DNS:k8s-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP Address:10.1.0.1, IP Address:172.16.1.232

            发现确实没有这个结果,所以需要把10.1.0.1增加到这个地址列表中

        2.  生成新的证书,备份/etc/kubernetes/pki这个目录            

# 生成密钥对
openssl genrsa -out apiserver.key 2048	
# 生成
openssl req -new -key apiserver.key -subj "/CN=kube-apiserver," -out apiserver.csr

# 新增 apiserver.ext文件,包含所有的地址列表,ip:xxxx即为要包含的新节点的ip, 内容如下:
subjectAltName = DNS:k8s-master, DNS:kubernetes, DNS:kubernetes.default, DNS:kubernetes.default.svc, DNS:kubernetes.default.svc.cluster.local, IP:10.1.0.1, IP:172.16.1.232

# 使用ca根证书生成新crt
openssl x509 -req -in apiserver.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out apiserver.crt -days 3650 -extfile apiserver.ext
# apiserver.key跟apiserver.crt是一组密钥对

        3.  重新查看一下证书的地址列表

        4.  重启api-server容器,或者重启master服务器

2.  kubelet报错

    1.  kubelet的错误

        Failed to get system container stats for "/system.slice/docker.service": failed to get cgroup stats for "/system.slice/docker.service": failed to get container info for "/system.slice/docker.service": unknown container "/system.slice/docker.service"

        解决方法:

在K8S配置文件 /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf  添加
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=systemd --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"

重启即可
systemctl daemon-reload && systemctl restart kubelet

  

                    

  

  

         

    

posted @ 2023-05-17 15:06  奋斗史  阅读(153)  评论(0)    收藏  举报