Kubernetes Pod Evicted

Pod状态为“被驱逐(evicted)”的解决思路 阅读详情

一、背景以及措施

近日 Kubernetes 测试集群 Pod 状态出现 Evicted 现象 , 但是项目还是能正常提供服务 , 最先的解决办法是手动将 Evicted 状态的 Pod 删除。

# 查看 Evicted 状态的 Pod
[ops@dev-gate ~]# kubectl get pods  -n staging-services | grep Evicted 
eureka-server-02-7f658c4dfc-zwtqk             0/1     Evicted            0          288d
fica-service-5fcd4d777d-k2bsp                 0/1     Evicted            0          176d
search-engine-79c875cbc8-q4hfx                0/1     Evicted            0          6d3h

# describe 查看其中一个 Pod 的详细信息
[ops@dev-gate ~]# kubectl describe pod eureka-server-02-7f658c4dfc-zwtqk -n staging-services
Name:           eureka-server-02-7f658c4dfc-zwtqk
Namespace:      staging-services
Priority:       0
Node:           ap-southeast-5.192.168.80.25/
Start Time:     Tue, 30 Jul 2019 15:30:38 +0800
Labels:         app=eureka-server-02
                pod-template-hash=7f658c4dfc
Annotations:    <none>
Status:         Failed
Reason:         Evicted
Message:        The node was low on resource: ephemeral-storage. Container eureka-server-02 was using 961720Ki, which exceeds its request of 0. 
IP:             
IPs:            <none>
Controlled By:  ReplicaSet/eureka-server-02-7f658c4dfc
Containers:
  eureka-server-02:
    Image:      registry-vpc.ap-southeast-5.aliyuncs.com/jakarta-services/eureka-server:staging
    Port:       <none>
    Host Port:  <none>
    Requests:
      cpu:     250m
      memory:  512Mi
    Environment:
      LANG:                             en_US.UTF-8
      LANGUAGE:                         en_US:en
      LC_ALL:                           en_US.UTF-8
      JAVA_HOME:                        /usr/local/jdk1.8.0_152
      aliyun_logs_eureka-server-error:  /data/serviceLogs/eureka-server/eureka-server-error*
      aliyun_logs_eureka-server-info:   /data/serviceLogs/eureka-server/eureka-server-info*
    Mounts:
      /data/serviceLogs/eureka-server/ from volumn-sls-15644718371690 (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-t8rfx (ro)
Volumes:
  volumn-sls-15644718371690:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  <unset>
  default-token-t8rfx:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-t8rfx
    Optional:    false
QoS Class:       Burstable
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:          <none>

注意观察 Message 信息: The node was low on resource: ephemeral-storage. Container eureka-server-02 was using 961720Ki, which exceeds its request of 0。 

由此可见是 Node 节点资源过低造成的 Pod 驱逐 , 先去 Node 节点查看 Disk / Memory / CPU 的使用情况 , 然后做相应的处理。

[ops@iZk1aj2xznytv5w52w8r7kZ ~]# df -Th
Filesystem                                                              Type      Size  Used Avail Use% Mounted on
/dev/vda1                                                               ext4       50G   42G  5.0G  90% /

此次的故障原因是磁盘使用率过高 , 处理好 Node 节点后 , 再去 Master 节点删除 Evicted 状态的Pod。

[ops@dev-gate ~]# kubectl get pods -n staging-services | grep 'Evicted' | awk '{print $1}' | xargs kubectl delete pod -n staging
pod "eureka-server-02-7f658c4dfc-zwtqk" deleted
pod "fica-service-5fcd4d777d-k2bsp" deleted
pod "search-engine-79c875cbc8-q4hfx" deleted

二、为什么 Pod 会被驱逐

Kubernetes 节点上的资源会被 Pod 以及系统进程所使用 , 如果没有做任何限制的话 , 节点上的资源会被耗尽 , 相应的后果也可想而知:

1、集群问题: 如果节点上调度了很多的 Pod , 而且没有做 limit(限制容器使用资源) 限制 , 节点资源肯定被耗尽 , 系统进程也会发生OOM , 因为 Pod 是 Deployment 在控制 , 它会重新调度到其它 Node 节点运行 , 这就造成了一个恶性循环 , 引起集群的雪崩。

2、系统进程问题: 如果在设置了 limit 限制 , 那如果 Node 节点资源不足 , 容器也会出现问题。

因此 , Kubernetes 要做资源的预留和 Pod 的驱逐 , 以保证节点的正常运行。

三、Kubernetes 的做法

经过翻阅资料得知 , 此限制是通过Node组件 kubelet 进行配置

[ops@iZ8vb409m8717rqugzuqylZ kubernetes]# vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
Environment="KUBELET_DNS_ARGS=--enable-controller-attach-detach=false --cluster-dns=1.2.3.4         --pod-infra-container-image=registry-vpc.cn-zhangjiakou.aliyuncs.com/acs/pause-amd64:3.0                --enable-load-reader         --cluster-domain=cluster.local --cloud-provider=external         --hostname-override=cn-zhangjiakou.1.2.3.4 --provider-id=cn-zhangjiakou.i-8vb409m8717rqugzuqyl"
Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"
Environment="KUBELET_CGROUP_ARGS=--system-reserved=memory=300Mi         --kube-reserved=memory=400Mi         --eviction-hard=imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% --cgroup-driver=systemd"
Environment="KUBELET_CERTIFICATE_ARGS=--tls-cert-file=/var/lib/kubelet/pki/kubelet.crt --tls-private-key-file=/var/lib/kubelet/pki/kubelet.key --anonymous-auth=false --rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS

主要参数说明:

--system-reserved=memory=300Mi     # 为system进程预留内存300M   
--kube-reserved=memory=400Mi       # 为kube组件预留内存 400M  
imagefs.available<15%              # 指docker daemon用于存储image和容器可写层(writable layer)的磁盘
memory.available<300Mi             # 内存小于300M时 , 驱逐Pod
nodefs.available<10%               # 指node自身的存储,存储daemon的运行日志等,一般指root分区 /
nodefs.inodesFree<5%               # inode小于%5 , 驱逐Pod

既然知道了配置文件的配置方法 , 我们就可以根据自己的需求去修改这些阈值。

四、Kubernetes以什么标准去驱逐Pod

答案是QoS(服务质量等级) , 是作用在 Pod 上的一个配置 , Qos等级包括:

  • Guaranteed: limits 和 request 相等
  • Burstable: limit 和 request 不相等
  • BestEffort: 没有限制

由此可见 , Kubernetes是通过配置 limits 和 requests 的值大小来评定 QoS。

三种等级示例:

# Guaranteed 等级
    spec:
      containers:
      - name: nginx-demo
        image: nginx
        resources:
          limits:
            cpu: 200m
            memory: 200Mi
          requests:
            cpu: 200m
            memory: 200Mi
        ports:
        - containerPort: 80
#  Burstable 等级
   spec:
      containers:
      - name: nginx-demo
        image: nginx
        resources:
          limits:
            cpu: 200m
            memory: 200Mi
          requests:
            cpu: 20m
            memory: 20Mi
        ports:
        - containerPort: 80
# BestEffort 等级
    spec:
      containers:
      - name: nginx-demo
        image: nginx
        ports:
        - containerPort: 80

对于CPU而言: 当 Pod 使用 CPU 超过设置的 limits 限制 , Pod不会被 Kill 但是会被限制

对于内存而言: 当 Pod 使用 Memory 超过了 limits 限制 ,Pod 中的 容器中进程会被 Kill , Kubernetes会尝试重启或调度到其它Node节点

当集群监控到 Node 节点的内存或者CPU资源到达阈值时 , 就会触发资源回收策略 , 通过驱逐节点上的Pod来减少资源占用。

QoS驱逐优先级:

BestEffort --> Burstable --> Guaranteed

五、配置建议

将不是很关键的服务 Qos 等级设置为 Burstable 或者 BestEffort。

资源充足的话 , Pod 等级可以设置为 Guaranteed。

Kubernetes Pod状态为“被驱逐(evicted)”的解决方法 这种情况可能由多种原因引起,比如节点资源不足、Pod超出了所分配的资源限制、镜像拉取失败等。通过扩展集群、调整资源需求和限制以及检查镜像相关问题,可以有效避免Pod被驱逐的情况发生。b. 调整Pod资源需求:如果Pod的资源需求偏高,可以尝试调整Pod的资源请求和限制。c. 使用资源配额:在命名空间级别启用资源配额,限制Pod使用的资源量,以防止超出节点资源的限制。b. 调整节点资源限制:如果集群中的节点资源限制较低,可以考虑增加节点规格或扩展集群来提供更多资源。的镜像,并设置了资源请求和限制。 阅读详情

相关推荐

Kubernetes Pod状态为“Evicted“的处理方法

当Kubernetes Pod的状态为"Evicted"时,我们可以通过查看Pod状态和事件来了解驱逐的原因。在上述示例中,我们创建了一个名为"my-pod"的Pod。调整Pod优先级:如果使用了Pod优先级和抢占策略,并且Pod被驱逐是由于优先级较低而腾出资源给更高优先级的Pod,可以考虑调整优先级的设置。调整资源请求:如果Pod被驱逐是由于资源不足引起的,可以考虑调整Pod的资源请求。调整集群资源:如果集群中的节点资源总体不足,可以考虑增加节点或者调整节点的资源配额,以提供更多的资源给Pod。

DevGOOD的博客 1177

pod Evicted状态

pod Evicted;pod被驱逐;grafana

qq_41292133的博客 3647

k8s pod的状态为evicted

kubectl get pods --namespace=ingress-nginx --watch

隔壁老瓦的专栏 3748

skywalking-agent使用emptyDir导致磁盘空间不足

公众号:运维开发故事 作者:姜总 背景 今天发现好多pod的状态都是Evicted,然后我没有监控的权限,本来想看看grafana上监控图是否出现了特殊情况,无奈没权限看。 因为我发现pod出现大量的Evicted状态的时候,查看pod所在的node节点,距离当时发生Evicted的时间已经是7小时之久了。因此可能会存在一种原因:发生了Evicted的时候的确磁盘已经超过默认的kubelet的资源预留参数了。但是问题发生后,触发了阈值,已经回收了磁盘空间,导致我看的时候磁盘空间已经恢复。 在每个 Kub.

wanger5354的博客 1944

kubernetes 清除状态为 Evicted 的 pod

kubectl get pods --all-namespaces | grep Evicted | awk '{print $2}' | xargs kubectl delete pod

雍伟的博客 1479

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 317

k8s中存在很多为Evicted状态的Pod

背景 在查看k8s的环境的时候,突然发现存在n多个pod状态为Evicted。差不多得有几百个。 解决 同事愉快的丢了个链接给我,让我自己看一波:What will happen to evicted pods in kubernetes? 查看了一下pod的信息。结果发现是磁盘满了。 kubectl describe pod {pode_name} -n {namespace} 但是得手动删除Evicted状态的pod kubectl get pods --all-namespaces -o json

qq_38942551的博客 1万+

Vue2项目实战:vue2-org-tree实现动态组织架构图

本文详细介绍了如何在Vue2项目中使用vue2-org-tree组件实现动态、可交互的组织架构图。内容涵盖从快速安装、基础渲染到核心功能实战,包括水平布局、节点展开折叠、响应式数据绑定、深度自定义节点内容以及事件处理。同时提供了性能优化、样式覆盖等避坑指南,并通过一个完整的企业级Demo展示了如何打造功能丰富的架构图,助力高效开发后台管理系统。

weixin_28040125的博客 522

k8s中Evicted pod 是如何产生的

文章目录事件背景分析被驱逐的原因节点资源不足导致实例被驱逐kubelet 驱逐Pod时与资源处理相关的已知问题驱逐Pod未被删除原因分析解决方案结语 事件背景 最近在线上发现很多Pod处于 Evicted 状态,通过 pod yaml 可以看到实例是因为节点资源不足被驱逐,但是这些pod并没有被自动清理,平台的大部分用户在操作时看到服务下面出现 Evicted Pod时会以为服务有问题或者平台有问题的错觉,影响了用户的体验。而这部分 Evicted 状态的 Pod 在底层关联的容器其实已经被销毁了,对用户的

Kason_iWiki 1866

量化投资之工具篇一:Backtrader从入门到精通(1)-手把手教你零基础实现一个策略案例

Backtrader是重要的量化框架,本文记录学习该框架的笔记,内容主要基于Backtrader的网站指导文档。虽然该框架目前用于量化投资领域,但是可以作为数据处理的基本架构,进行改造后用于各种数据的处理,尤其适用于对原始数据处理完成后应用一定的策略进行预测以及可视化处理。 1、简介 Backtrader的特点,就是两点: 1、易于使用; 2、参见第1条。 那么如何使用Backtrader呢?比把大象装进冰箱复杂点,一共4步: 创建一个Cerebro引擎: 加入一个Strategy...

仓鼠王的博客 5万+

ubuntu安装glibc

VSCode 在ubuntu下调试无法打开libc-start.c raise.c等1. 安装glibc2. launch.json中添加路径映射3. 调试 1. 安装glibc apt install glibc-source cd /usr/src/glibc/ sudo tar -xvf glibc-[VERSION].tar.xz 2. launch.json中添加路径映射 "sourceFileMap": { "/build/glibc-S7xCS9": "/usr/src/glib

wq_0708的博客 3万+

k8s服务故障,出现大量的Evicted状态的pod

k8s服务故障,出现大量的Evicted状态的pod kubectl get pod -A 发现出现Evicted 状态的pod高达8000多个。 一、随机查看一个处于Evicted状态pod的描述: kubectl describe pod -n monitor csp-monitor-api-5d4c5dbb8f-zpw5w Status: Failed Reason: Rvicted Message: Pod The node had condition: [

xiaoma19961101的博客 1893

嵌入式Linux网络调试踩坑记:YT8531/YT8521 PHY驱动移植与设备树配置实战

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的实战经验。从网络不通的常见现象入手,详细介绍了驱动移植关键点、设备树配置详解及常见问题排查技巧,帮助开发者快速解决RGMII接口调试难题,提升嵌入式网络开发效率。

weixin_42525328的博客 444

k8s 很多pod evicted状态

k8s 许多pod 出现evicted状态。 evicted状态 是pod被驱逐无法起来 问题原因:资源问题,资源不够 解决办法:删除一些没用的大文件,然后将pod删除重建 kubectl get pods -n ingress-nginx | awk ‘{print $1}’| xargs kubectl delete pods -n ingress-nginx kubectl get pods | grep Evicted | awk ‘{print $1}’ | xargs kubectl delet

weixin_51134188的博客 7797

手把手教你用vivado2018.3为复旦微JFMQL15T打IP补丁(含环境变量配置技巧)

本文详细介绍了在Vivado 2018.3环境中为复旦微JFMQL15T开发板打IP补丁的全流程,包括环境变量配置、IP缓存管理等关键步骤。通过实战验证的解决方案,帮助工程师快速搭建开发环境,解决国产芯片开发中的常见问题,提升开发效率。

weixin_30374009的博客 723

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1917

k8s evicted pod大量出现解决办法

魔术师顶天立地\怼天怼地\钢铁realman1.背景:运行一年多k8s集群出现大量evicted pod,但有running pod,系统是正常运行的。其实这是kubernetes集群一种驱逐机制,用来提醒节点资源告警。可以通过 2、解决方法:查看告警pod节点存储情况发现是kubernetes每天日志占用巨大存储,需要定时任务每天清理 然后需要手工删除evicted pod 删除后观察十分钟,看看是否还会出现驱逐情况。...

别来沾边儿 1508

USB2.0协议解读

就写到这吧,其他协议层等属于软件需要了解的东西了。简单看了下,本文总结的有点乱,有两个原因吧,其一是理解的不够透彻,无法用简单明了的语言总结;其二是感觉这个协议文档章节划分的也不是很好,有点大杂烩。

qflook的博客 3673

K8S日常问题-k8s中大量pod 状态 evicted

背景 在查看k8s的环境的时候,突然发现存在n多个pod状态为Evicted。差不多得有几百个。在这里插入图片描述 eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。 多见于资源不足时导致的驱赶。 查看了一下pod的信息。结果发现是磁盘满了。 kubectl describe pod {pode_name} -n {namespace} 解决方案 排查资源和异常原因,防止新的驱赶产生。 使用如下命令删除旧驱赶的遗留 kubectl get

球球的博客 6843

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

生产环境 Kubernetes 中出现了很多 Evicted Pod,我该怎么办呢?

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !线上被驱逐实例数据最近在线上发现很多实例处于 Evicted 状态,通过 pod yaml 可以看到实例是...

easylife206的专栏 1107

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

k8s中所有pod都变成evicted状态了!!!!!!!!

k8s本来跑的好好的,突然发现上面的服务都停了,然后查看发现pod状态变了,网上发现说是资源不足导致的,然后疯狂查找。 1.查看内存情况,命令:free -g ,发现没问题 2.查看内存情况,命令:top ,发现没问题 3.查看硬盘情况,命令:df -lh,发现硬盘没问题,但启动的docker镜像有问题!!!!! 继续查找发现是由于启动的docker占用的空间大于85%导致挂掉的。 然后查看docker ps -a,发现有很多已经停止的容器,就是这里!!!!!! 删除掉这些不用的,命令:do

kay 3440

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

k8s删除Evicted 状态的pod

【代码】k8s删除Evicted 状态的pod。

weixin_46627652的博客 582

【k8s】状态为 Evicted 的 Pod

在查看k8s的环境的时候,突然发现存在n多个pod状态为Evicted。差不多得有几百个。

Aiky哇 520

k8s的容器pod的状态为evicted如何处理?

发现很多pod的状态为evicted。 eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。 多见于资源不足时导致的驱赶。 排查资源和异常原因,防止新的驱赶产生。 使用如下命令删除旧驱赶的遗留 kubectl get pods -n kube-public | grep Evicted | awk ‘{print $1}’ | xargs kubectl delete pod -n kube-public cat /data/alarm/del_e

weixin_43784341的博客 4728

遇到问题--k8s--pod的状态为evicted

在重启K8S集群的某一节点docker之后,使用命令获取pod状态的时候发现,大多数的pod状态为evicted。 原因 eviction,即驱赶的意思,意思是当节点出现异常时,kubernetes将有相应的机制驱赶该节点上的Pod。 多见于资源不足时导致的驱赶。 报错 因此查看kubelet日志发现有报错显示为Pod The node has condition: [DiskPressure] 因为前期没有规划好docker的目录以及根目录的空间,所以才会导致这样,没办法,只能手动清除docker缓存

Rocky 3464

kubernetes中的Evicted状态的pod为何不会自动彻底删除

Evicted状态的Pod为什么会一直保留,打开源码告诉你

nangonghen的博客 546
上一篇: Kubernetes Master节点高可用方案
下一篇: centos-7修改网卡名
~包工头~
博客等级 码龄10年 5粉丝 12原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值