前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >K8S集群中Pod的Evicted状态原因

K8S集群中Pod的Evicted状态原因

原创
作者头像
chen1900s
修改2023-10-06 18:16:42
3.8K1
修改2023-10-06 18:16:42
举报
文章被收录于专栏:TKE学习

在Kubernetes(K8S)中,Pod的Evicted状态表示Pod已经被驱逐,并不再运行在节点上。Pod驱逐主要是由于资源约束,如内存不足或磁盘空间不足。以下是详细原理、原因和解决方案。

原理: Kubernetes集群会监控节点资源使用情况,当资源不足时,kubelet会触发Pod驱逐过程。驱逐过程会根据优先级和资源使用情况选择要驱逐的Pod。一旦Pod被驱逐,其状态将变为Evicted,相关事件也会被记录。

原因:

  1. 内存不足:当节点上的可用内存不足以满足Pod的内存需求时,kubelet会尝试回收内存,如果回收不足,会触发Pod驱逐。
  2. 磁盘空间不足:当节点上的磁盘空间不足以满足Pod的存储需求时,kubelet会尝试回收磁盘空间,如果回收不足,会触发Pod驱逐。

kubelete支持以下两种文件系统。

(1)nodefs:保存kubelet的卷和守护进程日志等。

(2)imagefs:在容器运行时保存镜像及可写入层。

kubelet使用cAdvisor自动监控这些文件系统。kubelet不关注其他文件系统,不支持所有其他类型的配置,例如保存在独立文件系统中的卷和日志。

磁盘压力相关的资源回收机制正在逐渐被驱逐策略接管,未来会停止对现有垃圾收集方式的支持。

DiskPressure 磁盘压力 是kubelet去判断的,是要看kubelet 的目录,kubelet目录是通过kubelet 自定义参数root-dir指定,如果没有指定默认是在系统盘的

其中docker 容器目录 和kubelet 目录是有区别的,docker容器目录是要看docker info | grep Root 是不是指向了数据盘,容器里面满不会导致DiskPressure 磁盘压力 用户通过ps -ef | grep kubelet 可以看下有没有设置kubelet自定义参数--root-dir 去指定数据盘,没有指定则默认是在系统盘

如果用户想容器目录满去驱逐POD,需要额外设置imagefs.available 节点压力驱逐详细介绍可以参考K8S官方文档:https://kubernetes.io/zh/docs/concepts/scheduling-eviction/node-pressure-eviction/

3. 节点压力:当节点压力过大,如CPU使用率过高或磁盘IO过高时,kubelet也可能触发Pod驱逐以减轻节点压力。

解决方案:

  1. 分析Pod资源使用情况:检查被驱逐的Pod的资源使用情况,如内存、CPU和磁盘使用率。可以使用kubectl describe pod <pod_name>命令查看Pod的状态和事件。
  2. 调整资源限制:根据实际需求调整Pod的资源限制,如增加内存限制或CPU限制。可以在Pod的YAML文件中修改资源限制,然后使用kubectl apply -f <pod_yaml_file>命令更新Pod。
  3. 扩容节点:如果集群中的所有节点都面临资源不足的情况,可以考虑扩容节点以提供更多资源。可以使用云服务提供商的管理控制台或API扩容节点。
  4. 优化应用:优化应用程序以减少资源使用,如减少内存泄漏、优化CPU使用等。
  5. 使用优先级和抢占:为Pod设置优先级,以便在资源紧张时根据优先级驱逐Pod。可以在Pod的YAML文件中设置priorityClassName字段。
  6. 批量清理
代码语言:shell
复制
###查询确认没问题后再做删除#### 需要把NameSpace替换成用户的命名空间名称
#kubectl get pods -n NameSpace |grep  Evicted
###然后是批量删除##########
#kubectl get pods -n NameSpace | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n NameSpace

总之,解决Pod的Evicted状态需要分析具体原因,根据实际情况采取相应措施,如调整资源限制、扩容节点或优化应用程序。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档