k8s上万个pod时碰到问题,k8s使用podman
原标题:k8s上万个pod时碰到问题,k8s使用podman
导读:
K8S故障检查-Pod处于ContainerCreating状态常见导致pod长时间处于“ContainerCreating”状态的原因包括镜像拉取问题、资源不足、持久卷问题...
k8s故障检查-Pod处于CONTAINERCreating状态
常见导致pod长时间处于“ContainerCreating”状态的原因包括镜像拉取问题、资源不足、持久卷问题、网络问题以及安全上下文或docker/运行时问题。要排查镜像拉取问题,可使用kubectl describe POD命令检查pod事件,寻找“Failed to pull image”或“ImagePullBackoff”事件,表明镜像拉取存在问题。
面对k8s应用卡在ContainerCreating状态的困扰,我通过kubectl describe po命令获取到了关键的日志信息。
一个pod的完整创建,通常会伴随着各种事件的产生,k8s种事件的种类总共只有4种:PodStatus 有一组PodConditions。PodCondition中的ConditionStatus,它代表了当前pod是否处于某一个阶段(Podscheduled,Ready,Initialized,Unschedulable),“true” 表示处于,“false”表示不处于。
如果创建Pod时状态为ContainerCreating,检查是否需要升级runc版本并重新配置源后重新安装。初始化集群时出现错误,检查crio.conf配置文件,确保配置正确。遇到fs.may_detach_mounts相关错误,调整sysctl配置并重启相关服务。安装与配置kubeovn:修改install.sh脚本以适应集群环境。
在集群部署过程中,可能会遇到问题。例如,如果创建pod时状态为containercreating,检查是否需要升级runc版本并配置源,然后重新安装。初始化集群时出现错误,可能需要编辑crio.conf来解决。另外,遇到fs.may_detach_mounts相关错误,可能是sysctl配置问题,需要调整相关设置后重启CRIO服务。
安装kube-ovn时,需要修改install.sh脚本,执行安装,然后可能需要卸载和重新安装以解决特定问题。
k8s中Pod状态及问题排查方法
1、含义:调度器未能将 Pod 调度到可用节点。可能原因:节点资源不足或 Pod 依赖的资源未准备好。排查方法:检查节点资源使用情况及资源预留情况,确保集群有足够的 CPU 和其他资源。CrashLoopBackOff 状态:含义:容器在启动后立即崩溃或退出。可能原因:容器配置错误、应用程序错误、内存不足或权限问题。
2、Pod驱逐 节点资源不足时,K8s驱逐内存敏感型Pod。优化资源配额和限制值,避免资源被耗尽。Pod失联 Pod处于Unknown状态,无法获取信息。检查Kubelet状态,修复节点问题。无法被删除 Pod执行删除操作后长时间处于Terminating状态。排查删除操作和集群状态,确保删除流程顺利。
3、要排查镜像拉取问题,可使用kubectl describe pod命令检查pod事件,寻找“Failed to pull image”或“ImagePullBackOff”事件,表明镜像拉取存在问题。资源不足时,使用kubectl describe node命令检查节点资源状态。检查持久卷(PVC)状态,确保其STATUS为“Bound”,表明存储供应无问题。
4、就绪探针(ReadinessProbe)关注于容器是否已经准备好接收请求,当其探测失败时,会阻止将任何请求调度至此Pod,直到就绪状态检查再次成功。就绪探针同样有三种基本方法供使用。LivenessProbe示例一:通过exec方式做健康检测 配置实例中,为容器提供了存活探针的exec方式检测。
K8S问题排查-UDP频繁发包导致Pod重启后无法接收数据
1、原因: conntrack表项问题:在K8S环境中,通过NodePort暴露的UDP服务在接收到频繁请求时,由于UDP conntrack表项默认老化时间为30秒,频繁请求可能导致老化失效。当Pod重启后,conntrack表中记录的可能是节点IP而非Pod IP,导致后续请求被错误地转发到节点IP而非新的Pod IP。
2、首先,构建K8S集群,部署UDP服务并用nc命令模拟客户端频繁发送UDP请求。网络分析显示请求正常到达目标Pod和节点,但Pod重启后接收中断。通过删除Pod构造重启,发现在Pod重启后,流量未按预期到达Pod,而是节点IP。使用iptables跟踪请求路径,发现流量未经过预期路径,而是进入INPUT链,指向DNAT问题。
3、含义:调度器未能将 Pod 调度到可用节点。可能原因:节点资源不足或 Pod 依赖的资源未准备好。排查方法:检查节点资源使用情况及资源预留情况,确保集群有足够的 CPU 和其他资源。CrashLoopBackOff 状态:含义:容器在启动后立即崩溃或退出。可能原因:容器配置错误、应用程序错误、内存不足或权限问题。
4、经过排查,发现是由于etcd恢复后,控制平面组件缓存中的Object版本与etcd备份中的不一致导致的。通过手动重启所有kube-system下的pod并恢复本地保存的Config和Namespace,解决了Nacos数据丢失的问题。Kafka则手动在Node-01上通过Docker-comPOSe启动,以补救集群外的部署问题。
5、在。Pod 只要挂载持久化数据卷,Pod 重启之后数据还是会存在的。Pod 是 Kubernetes 中的最小调度单元,k8s 是通过定义一个 Pod 的资源,然后在 Pod 里面运行容器,容器需要指定一个镜像,这样就可以用来运行具体的服务。
6、检查Pod状态:观察Pod是否频繁陷入CrashLoopBackOff状态,这通常是OOMKilled后K8s重启Pod的结果。查看描述信息:使用kubectl describe pod podname命令查看Pod的描述信息,确认是否包含OOMKilled的相关信息。