Kubernetes问题排查|POD启动失败

0 评论
/ /
1993 阅读
/
5690 字
06 2023-04

介绍

POD提供了一种抽象层,可以在同一节点上运行多个容器,这些容器可以共享相同的IP地址和端口空间,也可以通过共享存储卷实现数据共享。Kubernetes中的POD是最小的可部署单元,它是由一个或多个容器组成的,一个POD中的容器通常是相互关联的,它们共享同一个环境并一起工作。

例如:一个Web应用程序POD可能包含一个前端容器和一个后端容器,它们共享同一个网络命名空间和存储卷,以实现数据的共享和通信。 在Kubernetes中,POD是一个临时的实例,它可能被重建或者迁移,因此POD不应该被视为持久的实体。相反,Kubernetes集群中的其他组件(如Deployment、ReplicaSet、StatefulSet等)通常会管理POD的生命周期,并确保在需要时重新启动或替换POD。

POD启动失败原因有以下几种

镜像拉取失败

当 Kubernetes 集群无法拉取容器镜像时,POD 就无法启动。这可能是由于网络不稳定、镜像仓库故障、镜像版本号错误等原因导致的。可以通过检查镜像地址、网络连接等进行排查。

资源不足

如果节点资源不足,POD 就无法启动。资源可以包括 CPU、内存、存储等。可以通过调整 POD 的资源请求和限制来解决。

容器启动失败

当容器的启动命令错误、容器中的应用程序无法启动或容器中的环境变量配置错误时,POD 就无法启动。可以通过查看容器日志,来确定容器启动失败的原因。

端口冲突

当 POD 中的容器端口与节点或其他 POD 中已有的端口冲突时,容器无法启动。可以通过检查端口配置、服务配置等来解决。

配置错误

当 POD 的配置文件中存在错误时,POD 就无法启动。例如标签选择器错误、挂载目录错误等。可以通过检查配置文件来解决。

安全限制

当节点上的安全机制限制了 POD 的启动时,POD 就无法启动。例如 SELinux 权限限制、节点防火墙等。可以通过检查节点安全规则来解决这些问题。

POD启动失败ContainerCreating

前面文章中我在新添加的节点上运行Jenkins,看到已经被调度到新节点192.168.81.200上了,但是它的状态不对是ContainerCreating。在K8s中POD状态最常见的是ContainerCreating状态。这种状态通常发生在Pod中的容器无法启动或初始化的情况下。

去所在的节点上查看日志发现问题,是POD在mount数据目录的时候报错。

Mar  8 18:15:53 192 kubelet: Output: mount: 文件系统类型错误、选项错误、192.168.81.183:/data/k8s_nfs/ops-pvc-jenkins-pvc-6b4e08ab-6f90-4d16-ab49-5d78d224db77 上有坏超级块、
Mar  8 18:15:53 192 kubelet: 缺少代码页或助手程序,或其他错误
Mar  8 18:15:53 192 kubelet: (对某些文件系统(如 nfs、cifs) 您可能需要
Mar  8 18:15:53 192 kubelet: 一款 /sbin/mount.<类型> 助手程序)
Mar  8 18:15:53 192 kubelet: 有些情况下在 syslog 中可以找到一些有用信息- 请尝试
Mar  8 18:15:53 192 kubelet: dmesg | tail  这样的命令看看。

这就属于上面总结的几个原因当中的挂载卷失败了,Pod中的容器可能无法挂载所需的卷。可以通过检查卷名称是否正确、卷是否存在以及访问权限是否正确来解决此问题。

我这个是使用的NFS和StorageClass在Kubernetes中配置持久化存储,它一种灵活且可靠的解决方案,它可以帮助我们在Kubernetes集群中轻松地管理和配置持久化存储,这个方案请参考Kubernetes基于NFS实现持久化存储

上面这个报错是挂载PV指定的目录错误,原因是我们新节点没有安装nfs组件,nfs-utils是一个提供NFS客户端和服务器的工具集,可以用于挂载NFS共享目录到本地文件系统,如果您想在Linux系统上使用NFS协议,那么您需要安装nfs-utils软件包。

以下是在不同的Linux发行版上安装nfs-utils的方法:

#在Ubuntu/Debian上安装nfs-utils:
sudo apt-get update
sudo apt-get install nfs-common

#在CentOS/RHEL上安装nfs-utils:
sudo yum install nfs-utils

#在SUSE上安装nfs-utils:
sudo zypper install nfs-client

安装完成后,过1分钟就可以看到POD可以成功运行了。


POD Running

并且在日志里也可以看到磁盘卷可以正常创建,镜像正常下载了。


POD启动过程