首页 > 其他分享 >K8s 驱逐场景以及规避方案

K8s 驱逐场景以及规避方案

时间:2024-07-09 14:43:29浏览次数:11  
标签:Node 驱逐 场景 PDB 内核 Pod K8s 节点

Pod 驱逐场景总结

从一个 SRE 角度看, Pod 驱逐分为两种情况:

  • 较安全驱逐 & 提高稳定性的良性驱逐
    • API 发起驱逐,典型案例:kubectl drain
    • Node Not Ready 时,Controller Manager 发起的驱逐
  • 有风险的驱逐
    • 节点压力驱逐
      • 节点磁盘空间不足、内存不足 或 Pid 不足, kubelet 发起驱逐
      • 节点内存不足,内核发起 OOM
    • 节点打污点(NoExecute),导致 Pod 被驱逐,或者移除亲和性标签,导致 Pod 被驱逐, Controller Manager 发起的驱逐
    • Pod 超过自身 Limit 限制, 内核用满,临时存储用满等
    • 优先级抢占驱逐

概述一下各场景

kubect drain

drain ~= cordon + delete Pod

主动驱逐,受限于 PDB,如果配置了 PDB,会防止应用出现全部不可用的状况,但是直接 操作 DELETE Pod ,不受 PDB 限制,所以 drain 比 直接 DELETE 会安全一些,当做节点维护时。

配置 PDB,进一步提高服务整体可用性

Node Not Ready

节点会被打上 node.kubernetes.io/unreachable:NoExecute 的污点,上面的 Pod 会被驱逐。

可以 kubectl describe node 进行定位

Kubelet 发起驱逐

主要是节点不可压测资源不足造成,这里分析下 内存不足的情况下:

  • 首先考虑资源使用量超过其请求的 BestEffortBurstable Pod。 这些 Pod 会根据它们的优先级以及它们的资源使用级别超过其请求的程度被逐出。
  • 资源使用量少于请求量的 Guaranteed Pod 和 Burstable Pod 根据其优先级被最后驱逐。

可根据事件日志快速定位到

内核 OOM

只看进程的 oom_score, 优先 kill oom_score 较高的,不通服务 的 Qos 设置可能会影响 oom_score,但不能 保证不被 kill。

内核 OOM 日志,可以从 dmesg 中查到, 可以配置 NPD 快速发现 内核 OOM 事件

内核 OOM,一般情况,Pod 不会重新调度,只会原地重启

超过 Limit 限制

超过 cgroup 限制,会被强制杀掉

可根据事件日志快速定位到

打 NoExecute 污点,或者移除标签,导致标签选择失败

Controller Manager 控制器,循环监听 Node 、Pod 信息,然后持续调谐

抢占驱逐

Pod 分配调度时,节点资源不足,Scheduler 发起的驱逐,低优先级 Pod 腾出资源给 高优先级 Pod 调度

如何规避发生 风险驱逐

总结:

  • 配置 PDB + NPD ,进一步提高服务可用性,缩短问题定位时间
  • 根据 USE 法则,配置 Node 内存、磁盘、PID等 使用率、饱和度 等监控报警
  • 配置优先级策略时,考虑是否要抢占 低优先级 资源,如果不想发生意外驱逐,配置 preemptionPolicy 为 Never;应用在申请或控制资源时,前置准入控制,查看当然 request 值水位,控制到安全水位,资源不足时,扩充 Node 后,才允许申请扩容
  • 容器 内存黑洞是一个比较难处理的问题,目前就是 调整 JVM 参数 + Pod 资源使用情况 配置监控告警
  • 打污点 和 移除标签 要慎重,尽快 手工驱逐后,再操作,避免非预期情况发生
 

标签:Node,驱逐,场景,PDB,内核,Pod,K8s,节点
From: https://www.cnblogs.com/david-cloud/p/18291808

相关文章

  • 如何让 3D 数字孪生场景闪闪发光
     今日图扑软件功能分享:我们将探讨HT系统如何通过分组管理灯光、裁切体和流光,以提高场景光影效果的精准度和整体可控性。HT中的灯光、裁切体、流光是会影响它所在区域一定范围内的其他节点的表现,如场景中有个A灯光,默认情况下,场景中所有节点都是可以受到A灯光的影响。为......
  • K8s 无备份,不运维
    出故障时,就知道是谁在裸泳......
  • K8s 开启审计日志
    一、背景应安全规范,对apiserver核心组件,需要记录,"谁在什么时候操作了什么"方便故障排查二、操作步骤apiserver开启审计日志在所有master节点执行备份配置文件mkdir-p/home/clay/bak$(date+%F)cp/etc/kubernetes/manifests/kube-apiserver.yaml/home/clay/......
  • 【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统
    【云原生之kubernetes实战】在k8s环境下部署OrangeHRM人力资源管理系统一、OrangeHRM介绍1.1OrangeHRM简介1.2OrangeHRM特点1.3OrangeHRM使用场景二、相关知识介绍2.1本次实践存储介绍2.2k8s存储介绍三、本次实践介绍3.1本次实践简介3.2本次......
  • 实践1-使用 ansible 快速安装 k8s 机器
    推荐:kubeadm安装用:kubesprayopeninnewwindow二进制安装用:kubeaszopeninnewwindow此安装方式参考上面两个项目创建,如果刚开始搭建,直接使用上面的安装方式即可,可根据实际情况微调项目地址:https://github.com/clay-wangzhi/ansible-collection-k8s 相关支持支......
  • K8s 一条默认参数引起的性能问题-Pod enableServiceLinks
    问题时间线xx:xx]开发收到业务反馈接口响应超时[xx:xx]开发&SRE&中间件联合排查代码、网关、底层网络问题,无果[xx:xx] 测试环境复现排查[xx:xx] 利用差异法、排除法和经验解决,先上线[xx:xx] 根因定位 问题现象1)接口偶发性超时image-202401161814518792)容器化......
  • k8s 关闭 enableServiceLink-Pod-CPU-内存占用过高
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<特性说明:enableServiceLinks特性,是k8s提供给pod发现和访问svc的两种方案之一(另一种是DNS)。该特性在pod启动时,kubelet会将activesvc通过env {SVCNAME}_SERVICE_HOST、......
  • K8s 中 Pod OOMKilled 原因
    在我们日常的工作当中,通常应用都会采用Kubernetes进行容器化部署,但是总是会出现一些问题,例如,JVM堆小于Docker容器中设置的内存大小和Kubernetes的内存大小,但是还是会被OOMKilled。在此我们介绍一下K8s的OOMKilled的ExitCode编码。 ExitCode137表明容器收到......
  • K8S学习教程(三):在PetaExpress KubeSphere 容器部署 Wiki 系统 wiki.js 并启用中文全
      背景wiki.js是非常优秀的开源Wiki系统,尽管在与xwiki功能相比,还不算完善,但也在不断进步。常用的功能还是比较实用的,如:Wiki写作、分享、权限管理功能还是非常实用的,UI设计非常的漂亮,精美的界面和直观的操作体验,能够满足小团队的基本知识管理需求。认真阅读......
  • 向量检索服务应用场景
    ​ 本文为您介绍向量检索服务在电商智能搜索和偏好推荐、自然语言处理等AI问答系统、图库类网站多模态搜索、视频检索、分子检测与筛选等场景下的应用。 电商智能搜索和偏好推荐场景在电商智能搜索和偏好推荐场景中,向量数据库可以实现基于向量相似度的搜索和推荐功能。例如......