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
3. K8s的node节点故障
1. 问题描述
node节点所在的服务器硬盘故障,导致node故障,并且无法修复,所以需要重新安装新的节点。
2. 清除原有节点信息
为什么一定要清理节点的etcd注册信息?
因为我的新节点名称与旧节点名称相同,kube-apiserver认为这些旧节点还在,导致新的node无法正常成为Ready
1. 在master上删除旧节点对象
kubectl delete node k8s-node1
kubectl delete node k8s-node2
kubectl delete node k8s-node4
3. 重新安装三个新节点
系统
docker
kubelet
4. k8s-master上重新生成token
因为时间太久,token早已过期
kubeadm token create --print-join-command
5. 分别在三个节点上执行加入
kubeadm join 172.16.1.232:6443 --token srb708.o1ma4anmudn15hlu --discovery-token-ca-cert-hash sha256:ad1546c44b615d4034896f6f789fac65b846553c4bdc0ca90b006959a2bfb3fc
6. 加入完成后,发现node状态依然为not ready
查看node节点的kubelet日志,发现报错:
Nov 20 10:20:58 k8s-node4 kubelet[12234]: E1120 10:20:58.544136 12234 kubelet.go:2187] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
因为我之前安装的网络插件是flannel,所以在k8s-master上重新安装flannel插件
kubectl apply -f kube-flannel.yaml
7. 重新安装flannel以后,node状态依然为not ready
查看node节点的kubelet日志,发现新的报错:
[failed to find plugin "flannel" in path [/opt/cni/bin]] Nov 20 10:52:26 k8s-node1 kubelet[16864]: W1120 10:52:26.795343 16864 cni.go:237] Unable to update cni config: no valid networks found in /etc/cni/net.d Nov 20 10:52:27 k8s-node1 kubelet[16864]: E1120 10:52:27.496429 16864 kubelet.go:2187] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized 我的node已经有/etc/cni/net.d/10-flannel.conflist文件了,master的flannel已经重装过了
在每个node节点上,重新安装CNI二进制插件
cd /opt/cni/bin curl -L -o cni-plugins.tgz https://github.com/containernetworking/plugins/releases/download/v0.8.7/cni-plugins-linux-amd64-v0.8.7.tgz tar zxvf cni-plugins.tgz
安装完成后,重启一下kubelet
8. 节点状态显示为Ready

浙公网安备 33010602011771号