K8s常见问题分析&解决(基础问题)

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中事件部分以确定具体的错误

发布了101 篇原创文章 · 获赞 8 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/CodeAsWind/article/details/104266565