关于podpendingk8s的信息
K8s中pod生命周期和重启策略
1、K8s中POD生命周期包括五种状态,重启策略有三种。Pod生命周期状态: Pending:API Server已创建Pod,但容器镜像尚未运行。 Running:Pod中的所有容器都在运行中或正在启动中。 Succeeded:Pod中的所有容器已成功退出,并且不会重启。 Failed:Pod中的所有容器都已退出,且至少有一个容器是异常退出的。
2、POD的生命周期与重启策略是K8s中的关键概念,理解它们对于确保应用程序稳定运行至关重要。
3、Always策略:无论正常或非正常停止,容器均会重启。例如,正常关闭Tomcat服务后,Pod状态恢复正常,而非正常关闭时,容器会重启。Never策略:正常或非正常停止,容器都不会重启。停止Tomcat后,正常情况下容器状态保持,非正常时显示Error状态。
4、在Pod层面配置共享Volume,允许所有容器访问,保留持久数据,即使容器重启。容器间共享IP与端口空间,通过localhost相互发现。多容器Pod示例展示了共处容器与资源的打包管理,以及容器间通信与协调。Pod中设置重启策略,如Always,降低应用中断时间,适用于所有容器。
5、容器在其生命周期内也有Waiting、Running和Terminated等状态,以及针对不同状态的具体原因(Reason)描述。例如,容器状态为Terminated且原因CrashLoopBackOff,表示容器由于某种异常退出后,系统试图重启容器。
6、使用节点选择器和节点亲和性时,需注意标签值的设置。在定义标签时,确保不要使用布尔值(如 true/false),若必须使用,记得在值前加上双引号以确保正确解析。若 Pod 所需的标签不存在于任何节点上,Pod 将长时间处于pending状态,直至被终止。
K8s之Pod的优先级调度
1、K8s中Pod的优先级调度是一种策略,旨在解决集群资源不足时高优先级Pod无法调度的问题,具体解释如下:引入背景:在kubernetes 8版本之前,资源紧张时新创建的Pod会一直保持Pending状态,无法调度。为解决此问题,从11版本开始引入了优先级抢占调度策略作为Beta版本,14版本后成为正式版本。
2、同样,Pod亲和调度涉及Pod与Pod之间的关系,硬亲和则意味着Pod必须跟随另一个特定的Pod运行,而软亲和则允许更多选择,但会给予更匹配Pod更高的优先级。反亲和性调度则是Pod与Pod之间的避免关系,硬反亲和直接禁止Pod与特定Pod在同一节点运行,软反亲和则通过权重分配来决定Pod的优先调度。
3、考虑这样一个场景,node上运行一些高优先级的BestEffort Pod,调度器调度了一个低优先级的非BestEffort Pod在node。当node处于资源压力时,kubelet会先驱逐低优先级的Pod,不管高优先级的BestEffort 。但是调度器不考虑BestEffort,还是会调度node,造成这种 ping-pong 。
4、查看node名称。列出节点名称,例如k8s-master。在Pod中使用nodeName指定此节点。通过kubectl APPly创建Pod后,检查Pod是否调度至指定节点。使用nodeName选择节点方式存在局限性。方式三:亲和性和反亲和性。nodeSelector用于将Pod约束至具有特定标签的节点。亲和性和反亲和性扩展了约束类型,提供更精细的控制。
5、用途:实现更精细的调度策略,通过节点标签和权重值来决定 Pod 的部署位置。亲和性:Pod 偏好部署到具有特定标签的节点上。反亲和性:Pod 避免部署到具有特定标签的节点上。权重值:在评分过程中决定 Pod 的优先级,与节点的其他得分值结合,最终决定 Pod 的部署位置。
k8s中Pod状态及问题排查方法
1、含义:调度器未能将 Pod 调度到可用节点。可能原因:节点资源不足或 Pod 依赖的资源未准备好。排查方法:检查节点资源使用情况及资源预留情况,确保集群有足够的 cpu 和其他资源。CrashLoopBackOff 状态:含义:容器在启动后立即崩溃或退出。可能原因:容器配置错误、应用程序错误、内存不足或权限问题。
2、要排查镜像拉取问题,可使用kubectl describe pod命令检查pod事件,寻找“Failed to pull image”或“ImagePullBackOff”事件,表明镜像拉取存在问题。资源不足时,使用kubectl describe node命令检查节点资源状态。检查持久卷(PVC)状态,确保其STATUS为“Bound”,表明存储供应无问题。
3、Pod驱逐 节点资源不足时,K8s驱逐内存敏感型Pod。优化资源配额和限制值,避免资源被耗尽。Pod失联 Pod处于Unknown状态,无法获取信息。检查Kubelet状态,修复节点问题。无法被删除 Pod执行删除操作后长时间处于Terminating状态。排查删除操作和集群状态,确保删除流程顺利。