kube-controller-manager驱逐

概述

kube-controller-manager驱逐主要依靠NodeLifecycleController以及其中的TaintManager

kube-controller-manager驱逐分类

(1)开启了污点驱逐:node上有NoExecute污点后,立马驱逐不能容忍污点的pod,对于能容忍该污点的pod,则等待pod上配置的污点容忍时间里的最小值后,pod会被驱逐;

(2)未开启污点驱逐:当node的ready Condition值为false或unknown且已经持续了一段时间(通过kcm启动参数--pod-eviction-timeout配置,默认5分钟)时,对该node上的pod做驱逐操作;

NodeLifecycleController

NodeLifecycleController主要负责以下工作:

(1)定期检查node的心跳上报,某个node间隔一定时间都没有心跳上报时,更新node的ready condition值为false或unknown,开启了污点驱逐的情况下,给该node添加NoExecute的污点;

(2)未开启污点驱逐时的pod驱逐工作;

(3)根据kcm启动参数配置,决定是否启动TaintManager

TaintManager

TaintManager负责pod的污点驱逐工作,当node上有NoExecute污点后,立马驱逐不能容忍污点的pod,对于能容忍该污点的pod,则等待pod上配置的污点容忍时间里的最小值后,pod会被驱逐;

kcm驱逐相关参数配置

(1)--pod-eviction-timeout:默认值5分钟,当不开启污点驱逐时该参数起效,当node的ready condition值变为false或unknown并持续了5分钟后,将驱逐该node上的pod;

(2)--enable-taint-manager:默认值true,代表启动taintManager,当已经调度到该node上的pod不能容忍node的 NoExecute污点时,由TaintManager负责驱逐此类pod,若为false即不启动taintManager,则根据--pod-eviction-timeout来做驱逐操作;

(3)--feature-gates=TaintBasedEvictions=xxx:默认值true,配合--enable-taint-manager共同作用,两者均为true,才会开启污点驱逐;

(4)--node-monitor-grace-period:默认值40秒,代表在距离上一次上报心跳时间超过40s后,将该node的conditions值更新为unknown(kubelet通过更新node lease来上报心跳);

(5)--feature-gates=NodeLease=xxx:默认值true,使用lease对象上报node心跳信息,替换老的更新node的status的方式,能大大减轻apiserver的负担;

更多其他配置参数会在后面做源码分析时进行分析;

kcm污点驱逐

需要配置kcm相关的参数,来开启kcm污点驱逐,tainttoleration才会发挥作用;

taint

给node配置,打了taint的node节点可能会影响pod的调度和运行;

taint有三种Effect

(1)PreferNoSchedule:不容忍该污点的pod,调度器kube-scheduler会尽量避免把pod调度到具有该污点的节点上,如果不能避免(如其他节点资源不足等),pod也能调度到具有该污点的节点上,而对于已存在于具有该污点的节点上的pod不会被驱逐;

(2)NoSchedule:不容忍该污点的pod一定不会被调度到具有该污点的节点上,而对于已存在于具有该污点的节点上的pod不会被驱逐;

(3)NoExecute:不容忍该污点的pod一定不会被调度到具有该污点的节点上,同时会将已调度到该节点上但不容忍该污点的node节点上的pod驱逐掉;

toleration

给pod配置,配置了Toleration的pod,根据匹配条件可以容忍node的taint;

Toleration配置的属性值解析如下:

(1)Key:匹配node污点的Key;

(2)Operator:表示Toleration中Key与node污点的Key相同时,其Value与node污点的Value的关系,默认值Equal,代表相等,Exists则代表Toleration中Key与node污点的Key相同即可,不用比较其Value值;

(3)Value:匹配node污点的Value;

(4)Effect:匹配node污点的Effect;

(5)TolerationSeconds:node污点容忍时间;

配置示例:

tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
tolerationSeconds: 3600

上述配置表示如果该pod正在运行,同时一个匹配的污点被添加到其所在的node节点上,那么该pod还将继续在节点上运行3600秒,然后会被驱逐(如果在此之前其匹配的node污点被删除了,则该pod不会被驱逐);

最新文章

  1. Uiautomator--断言的使用
  2. 基础编程-java之股神
  3. 第一篇 SQL Server安全概述
  4. Android Phonebook编写联系人UI加载及联系人保存流程(五)
  5. Git错误non-fast-forward
  6. hadoop相关问题
  7. 读书笔记 (一) ———Fundamentals of Multiagent Systems with NetLogo Examples by Prof. Jose M Vidal
  8. Android ImageView(纯java)
  9. windows下把Apache加入系统服务
  10. 简明网络I/O模型---同步异步阻塞非阻塞之惑
  11. 安卓开发service
  12. (转) 新手入门:C/C++中的结构体
  13. 1620: [Usaco2008 Nov]Time Management 时间管理
  14. WebService--axis
  15. mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】
  16. Spring Boot 之Hello Word
  17. Signalr实现消息推送
  18. python3 中 Event.wait 多线程等待
  19. Tomcat和java的安装
  20. ueditor的简单用法

热门文章

  1. 第四章:Django表单 - 2:Django表单API详解
  2. C/C++ 关于默认构造函数
  3. PAT (Basic Level) Practice (中文)1015 德才论 分数 25
  4. Tomcat实战之路
  5. 齐博x1如何取消禁止跨城市密码登录限制
  6. CJK备注
  7. 19.drf response及源码分析
  8. 更改DataFrame列顺序
  9. Git新技能-stash操作
  10. 2流高手速成记(之七):基于Dubbo&Nacos的微服务简要实现