当前位置: 首页 > news >正文

K8S pod异常状态处理

一般来说,无论 Pod 处于什么异常状态,都可以执行以下命令来查看 Pod 的状态

    kubectl get pod <pod-name> -o yaml 查看 Pod 的配置是否正确
    kubectl describe pod <pod-name> 查看 Pod 的事件
    kubectl logs <pod-name> [-c <container-name>] 查看容器日志

Pod --Pending状态
Pending 说明 Pod 还没有调度到某个 Node 上面。可以通过
kubectl describe pod <pod-name> 命令查看到当前 Pod 的事件,进而判断为什么没有调度。可能的原因包括

    资源不足,集群内所有的 Node 都不满足该 Pod 请求的 CPU、内存、GPU 等资源
    HostPort 已被占用,通常推荐使用 Service 对外开放服务端口

Pod --Waiting 或 ContainerCreating状态
首先还是通过 kubectl describe pod <pod-name> 命令查看到当前 Pod 的事件。可能的原因包括

    镜像拉取失败,比如配置了镜像错误、Kubelet 无法访问镜像、私有镜像的密钥配置错误、镜像太大,拉取超时等

    CNI 网络错误,一般需要检查 CNI 网络插件的配置,比如无法配置 Pod 、无法分配 IP 地址

    容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数

Pod -- ImagePullBackOff状态
这也是我们测试环境常见的,通常是镜像拉取失败。这种情况可以使用 docker pull <image> 来验证镜像是否可以正常拉取。

或者docker images | grep <images>查看镜像是否存在(系统有时会因为资源问题自动删除一部分镜像),

Pod -- CrashLoopBackOff状态
CrashLoopBackOff 状态说明容器曾经启动了,但可能又异常退出了。此时可以先查看一下容器的日志
kubectl logs <pod-name> kubectl logs --previous <pod-name>
这里可以发现一些容器退出的原因,比如

    容器进程退出
    健康检查失败退出

Pod --Error 状态
通常处于 Error 状态说明 Pod 启动过程中发生了错误。常见的原因包括

    依赖的 ConfigMap、Secret 或者 PV 等不存在
    请求的资源超过了管理员设置的限制,比如超过了 LimitRange 等
    违反集群的安全策略,比如违反了 PodSecurityPolicy 等
    容器无权操作集群内的资源,比如开启 RBAC 后,需要为 ServiceAccount 配置角色绑定

Pod --Terminating 或 Unknown 状态
从 v1.5 开始,Kubernetes 不会因为 Node 失联而删除其上正在运行的 Pod,而是将其标记为 Terminating 或 Unknown 状态。想要删除这些状态的 Pod 有三种方法:

    从集群中删除该 Node。使用公有云时,kube-controller-manager 会在 VM 删除后自动删除对应的 Node。而在物理机部署的集群中,需要管理员手动删除 Node(如 kubectl delete node <node-name>。
    Node 恢复正常。Kubelet 会重新跟 kube-apiserver 通信确认这些 Pod 的期待状态,进而再决定删除或者继续运行这些 Pod。
    用户强制删除。用户可以执行 kubectl delete pods <pod> --grace-period=0 --force 强制删除 Pod。除非明确知道 Pod 的确处于停止状态(比如 Node 所在 VM 或物理机已经关机),否则不建议使用该方法。
    特别是 StatefulSet 管理的 Pod,强制删除容易导致脑裂或者数据丢失等问题。

Pod -- Evicted状态

出现这种情况,多见于系统内存或硬盘资源不足,可df-h查看docker存储所在目录的资源使用情况,如果百分比大于85%,就要及时清理下资源,尤其是一些大文件、docker镜像。

清除状态为Evicted的pod:

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod

删除所有状态异常的pod:

kubectl delete pods $(kubectl get pods | grep -v Running | cut -d ' ' -f 1)

删除集群中没有在使用的docker镜像(慎用):

docker system prune -a

查看pod对应的服务(镜像)版本:

kubectl --server=127.0.0.1:8888 get rc -o yaml | grep image: |uniq | sort | grep ecs-core

 

 

相关文章:

  • UPS FedEx DHL TNT
  • k8s 安装helm2 和 helm3
  • Happy Feet
  • Cython的基本用法
  • 计算字段 VS 视图
  • k8s secret 详细理解和使用
  • k8s中的kubeflow1.02安装过程记录
  • 在struts中html:select 标签的disabled属性中使用java代码
  • k8s 开发流程
  • 用Linux搞定了Windows中无法使用也无法修复的MP3!
  • centos7 k8s安装部署nvidia-docker2 排坑记录
  • Runtime.exec系列方法与ProcessBuilder类
  • kubeflow Pods stuck in Pending state
  • String的split方法的使用
  • k8s pv 一直是release状态
  • 【Leetcode】101. 对称二叉树
  • python3.6+scrapy+mysql 爬虫实战
  • CSS实用技巧干货
  • eclipse(luna)创建web工程
  • JavaScript类型识别
  • java概述
  • Java-详解HashMap
  • React+TypeScript入门
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 关于List、List?、ListObject的区别
  • 你不可错过的前端面试题(一)
  • 区块链将重新定义世界
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信小程序填坑清单
  • 学习使用ExpressJS 4.0中的新Router
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​马来语翻译中文去哪比较好?
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #HarmonyOS:软件安装window和mac预览Hello World
  • $ git push -u origin master 推送到远程库出错
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (06)金属布线——为半导体注入生命的连接
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (生成器)yield与(迭代器)generator
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)一些感悟
  • (转载)深入super,看Python如何解决钻石继承难题
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net wcf memory gates checking failed
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NET 分布式技术比较
  • .net 验证控件和javaScript的冲突问题
  • @31省区市高考时间表来了,祝考试成功