• kubernetes问题(一)-探究Pod被驱逐的原因及解决方法


    1 k8s evicted是什么

    k8s evicted是Kubernetes中的一个组件,主要用于处理Pod驱逐的情况。在Kubernetes中,当Node节点资源不够用时,为了保证整个集群的运行稳定,会按照一定的优先级和策略将其中的Pod驱逐出去。这时就需要一个组件来处理这些被驱逐的Pod,让它们有机会重新被调度到其他可用的Node节点上。而这个组件就是k8s evicted。

    2 k8s evicted的原因

    经过分析,pod被驱逐的原因主要有以下几个方面:

    2.1 资源不足

    当一个Node节点的资源已经耗尽,不能再够进行分配给新的Pod时,Kubernetes会触发Pod驱逐机制,删除一些正在运行的Pod。这个机制会根据Pod的QoS(Quality of Service)策略,优先删除优先级低的Pod。在这种情况下,可以通过对集群进行横向扩展,增加Node节点的数量,或者进行竖向扩容,增加Node节点的资源,来解决Pod驱逐的问题。

    2.2 节点故障

    一个Node节点可能会因为硬件故障、操作系统错误等原因无法正常工作。这时,Kubernetes会认为该节点已经从集群中移除,不再对其上的Pod进行调度。如果该节点上有Pod正在运行,那么这些Pod可能会被强制驱逐。解决这种情况的方法是检查节点的硬件、网络、操作系统等方面,确保其正常运行。

    2.3 Pod本身的原因

    在某些情况下,一个Pod可能会因为自身的原因被驱逐。比如,当Pod运行出现了严重错误或者运行时间超过了Kubernetes设置的最大时限等情况。这时,Pod将会被标记为Failed状态,并被驱逐。对此需要对Pod进行监控和调试,确保其正常运行。

    3 k8s evicted的解决方法

    为了避免Pod被驱逐的情况,可以采用以下方法:

    3.1 适当设置Pod的资源需求

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: my-pod
    5. spec:
    6. containers:
    7. - name: my-container
    8. image: nginx:latest
    9. resources:
    10. requests:
    11. cpu: 200m
    12. memory: 200Mi
    13. limits:
    14. cpu: 500m
    15. memory: 500Mi

    通过设置Pod的资源需求,可以让Kubernetes更好地进行调度,并避免因为资源不足而导致Pod被驱逐的情况。需要注意的是,在设置资源需求时要根据实际情况进行调整,以免出现浪费或不够的情况。

    3.2 做好Pod的健康检查

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: my-pod
    5. spec:
    6. containers:
    7. - name: my-container
    8. image: nginx:latest
    9. readinessProbe:
    10. httpGet:
    11. path: /
    12. port: 8080
    13. initialDelaySeconds: 5
    14. periodSeconds: 10

    通过设置Pod的健康检查,可以让Kubernetes更好地监控和维护Pod的运行状态,一旦出现异常,可以及时进行处理,避免Pod被驱逐的情况。需要注意的是,在设置健康检查时要根据实际情况进行调整,以免出现假阴性或者假阳性等情况。

    3.3 优化Node节点资源

    如果集群中的Node节点资源不够,我们可以选择进行横向扩展或者竖向扩容。横向扩展指的是增加Node节点的数量,从而分担集群的负载;竖向扩容指的是增加Node节点的资源,从而提升集群的性能。这两种方法都可以解决集群资源不足的问题,需要根据实际情况进行选择。

  • 相关阅读:
    18-云原生监控体系-kube-state-metrics
    【Python】入门(三):在jupyterlab中使用conda虚拟环境
    【Lua面试】 迭代器和泛型For
    Vulnhub-DC-3
    4.1.9-映射应用程序体系结构
    AI如何修改画布尺寸? ai怎么设置画布大小_AI教程自学网
    反向传播——机器学习
    全网最牛自动化测试框架系列之pytest(7)-yield与终结函数
    零基础Linux_26(多线程)线程池代码+单例模式+线程安全
    Composite Patterns :如果想用表达 部分-整体的继承关系,组合模式一定是不二之选了
  • 原文地址:https://blog.csdn.net/ygq13572549874/article/details/133282607