1:部分工作节点pod无法启动
详细描述:
部分工作节点pod无法启动(处于ContainerCreateing状态)日志: failed to set up ..... Network: failed to set bridge addr
解题思路:
日志部分出现网络相关的失败LOG,问题调查的方向主要查看对应网络节点的状态
原因分析:
当前节点被反复注册,导致flannel网络出现问题
解决步骤:
通过重置节点并且删除flannel网络
步骤:
1: kubeadm reset #重置节点
2:systemctl stop kubelet && systemctl stop docker && rm -rf /var/lib/cni/ && rm -rf /var/lib/kubelet/* && rm -rf /var/lib/etcd && rm -rf /etc/cni/ && ifconfig cni0 down && ifconfig flannel.1 down && ifconfig docker0 down && ip link delete cni0 && ip link delete flannel.1
3:systemctl start docker
执行完成后,重新生成token并注册节点即可
2:网络组件Flannel安装完成,一直处于初始化状态
详细描述:
前置:网络组件flannel安装完成
操作:kubectl get pods -n kube-system -o wide -》 kube-flannel一直处于init状态
kubectl logs -f kube-flannel-ds-amd64-xxx -n kube-system -》 “Error from server: Get https:xxxxx ...... No route to host”
解题思路:
查看对应网络插件创建日志
原因分析:
1:登陆节点所在的服务器;采用命令
journalctl -u kubelet -f
2: 判断日志中的内容,一般为镜像拉取问题
解决步骤:
通过设置代理或者修改镜像拉取方式处理
3:kubectl命令报错(connection refued)
详细描述:
操作: kubectl get pods
现象:报错误“The connection to the server xxxxx:8080 was refused”
解题思路:
缺少命令执行权限
原因分析:
kubectl命令执行需要kubernetes-admin身份进行;
身份认证由/etc/kubernetes/admin.conf承载
解决步骤:
1:将主节点中/etc/kubernetes/admin.conf文件拷贝
至工作节点相同目录
2:工作节点配置环境变量
#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
4: K8s使用shell 进入容器被拒绝连接
详细描述:
K8s使用shell 进入容器被拒绝连接
kubectl exec -it nginx-xxxx /bin/bash
报错如下:Error from server: error dialing backend: dial tcp 192.168.222.137:10250: getsockopt: connection refused
解题思路:
kubelet配置相关的问题
原因分析:
node节点上/etc/kubernetes/kubelet配置文件中, KUBELET_ADDRESS地址设置为127.0.0.1
解决步骤:
修改/etc/kubernetes/kubelet配置
KUBELET_ADDERESS="--address=127.0.0.1"
改为:
KUBELET_ADDERESS="--address=192.168.222.137"
systemctl restart kubelet
5: Pod基础故障排除
详细描述:
Pod基础故障排除
解题思路:
Pod故障排查常用几个命令:
kubectl logs <pod name>: 查看Pod的容器日志
kubectl describe pod <pod name>: 查看Pod相关的事件列表
kubectl get pod <pod name>: 获取Pod的YAML定义
kubectl exec -ti <pod name> bash: 进入Pod容器的交互终端
Pod启动和运行时常见错误:
启动时:
ImagePullBackoff,ImageInspectError,ErrImagePull,ErrImageNeverPull, RegistryUnavailable,InvalidImageName
运行时:
CrashLoopBackOff,RunContainerError,KillContainerError,VerifyNonRootError,RunInitContainerError,CreatePodSandboxError,ConfigPodSandboxError,KillPodSandboxError,SetupNetworkError,TeardownNetworkError
原因分析:
无
解决步骤:
1: ImagePullBackOff(K8s无法检索Pod容器的镜像时候常出现的错误)
主要原因:
镜像名称无效(解决:修改镜像名称)
指定的镜像标签不存在(解决:修改镜像标签)
检索的镜像属于私有镜像,无访问权限(解决:添加相应的凭据)
2:CrashLoopBackOff(容器无法启动)
主要原因:
应用程序中出现错误,阻止其启动;未正确配置容器; Liveness探针失败太多次
解决办法:
查看容器中的日志,了解详细失败的原因
kubectl logs <pod-name> --previous
3:RunContainerError(容器无法启动,在容器内部应用程序启动前)
主要原因:
通常由于配置错误,例如: 挂载的卷不存在或者ConfigMap将只读卷安装未可读写
解决办法:
kubectl describe pod <pod-name>来收集和分析错误
4:Pod处于待处理状态
主要原因:
集群没有足够的资源(CPU和内存)来运行Pod
命名空间具有ResourceQuota对象,配额不足的情况
Pod绑定到一个待处理的PersistentVolumeClaim
解决:
检查kubectl describe命令事件部分
对于ResourceQuota导致的错误,可以使用如下的方法检查集群的日志:
kubectl get events --sort-by=.metadata.creationTimestamp
5:Pod处于未就绪状态
主要原因:
Pod正在运行但未就绪,则表示“就绪”探针失败
解决:
准备就绪探针失败是特定应用程序的错误, 检查describe中事件部分以确定具体的错误