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

浙公网安备 33010602011771号