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不会被驱逐);

k8s驱逐篇(5)-kube-controller-manager驱逐的更多相关文章

  1. k8s驱逐篇(2)-kubelet节点压力驱逐

    kubelet节点压力驱逐 kubelet监控集群节点的 CPU.内存.磁盘空间和文件系统的inode 等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消耗水平 ...

  2. k8s驱逐篇(3)-kubelet节点压力驱逐-源码分析篇

    kubelet节点压力驱逐-概述 kubelet监控集群节点的 CPU.内存.磁盘空间和文件系统的inode 等资源,根据kubelet启动参数中的驱逐策略配置,当这些资源中的一个或者多个达到特定的消 ...

  3. k8s驱逐篇(4)-kube-scheduler抢占调度驱逐

    介绍kube-scheduler抢占调度驱逐之前,先简单的介绍下kube-scheduler组件: kube-scheduler简介 kube-scheduler组件是kubernetes中的核心组件 ...

  4. docker+k8s基础篇二

    Docker+K8s基础篇(二) docker的资源控制 A:docker的资源限制 Kubernetes的基础篇 A:DevOps的介绍 B:Kubernetes的架构概述 C:Kubernetes ...

  5. docker+k8s基础篇三

    Docker+K8s基础篇(三) kubernetes上的资源 A:k8s上的常用资源 Pod的配置清单 A:Pod上的清单定义 B:Pod创建资源的方法 C:spec下其它字段的介绍 Pod的生命周 ...

  6. kubernetes的Controller Manager

    1. Controller Manager简介 Controller Manager作为集群内部的管理控制中心,负责集群内的Node.Pod副本.服务端点(Endpoint).命名空间(Namespa ...

  7. docker+k8s基础篇四

    Docker+K8s基础篇(四) pod控制器 A:pod控制器类型 ReplicaSet控制器 A:ReplicaSet控制器介绍 B:ReplicaSet控制器的使用 Deployment控制器 ...

  8. docker+k8s基础篇一

    Docker+K8s基础篇(一) docker的介绍 A:为什么是docker B:k8s介绍 docker的使用 A:docker的安装 B:docker的常用命令 C:docker容器的启动和操作 ...

  9. 029.核心组件-Controller Manager

    一 Controller Manager原理 1.1 Controller Manager概述 一般来说,智能系统和自动系统通常会通过一个"控制系统"来不断修正系统的工作状态.在K ...

  10. Kubernetes Controller Manager

    Controller Manager 作为集群内部的管理控制中心,负责集群内的Node.Pod副本.Service Endpoint.NameSpace.ServiceAccount.Resource ...

随机推荐

  1. Centos7安装redash

    一.更改yum国内源: (1)cd /etc/yum.repos.d/ sudo yum install wget (2)备份:sudo mv /etc/yum.repos.d/CentOS-Base ...

  2. [题解] Codeforces Global Round 22 1738 A B C D E F 题解

    很久没rated打过cf的比赛了,这次打得还行,至少进前100了 点我看题 A. Glory Addicts 把类型0的数放进数组a里,类型1的数放进数组b里.如果\(|a|=|b|\),你可以把所有 ...

  3. 一个 dubbo 和 springboot 的兼容性问题

    背景介绍 最近把dubbo的版本从2.7.3升级到2.7.15时,遇到一个报错 No application config found or it's not a valid config! ,对应的 ...

  4. 文件内再分类到各txt文件

    当老师叫我们帮他做事,比如文件内内容再分类,我们就可以建个面板,里面有各要导入文件按钮,先把分类内容copy下,再点按钮导入进txt文件就行啦. 以下为java代码,使用了tableLayout布局 ...

  5. 220514 T1 查询 (二分查找+vector)

    用vector记录每个数出现的位置,对于要查询的X,要找他落在L~R的个数有几个,用lower_bound和upper_bound查找,相减就是答案. 1 #include<bits/stdc+ ...

  6. 如何优雅的备份MySQL数据?看这篇文章就够了

    大家好,我是一灯,今天一块学习一下如何优雅安全的备份MySQL数据? 1. 为什么要备份数据 先说一下为什么需要备份MySQL数据? 一句话总结就是:为了保证数据的安全性. 如果我们把数据只存储在一个 ...

  7. Lombok好用是好用,就是容易踩坑,这份避坑指南请查收

    序言 各位好啊,我是会编程的蜗牛,作为java开发者,我们平常在开发过程中,总是希望能够尽量少敲代码.这一方面,当然是为了偷懒,另一方面,当然也是为了代码看起来更加简洁一点,不断往编程规范上靠.然后其 ...

  8. 强制更改windows电脑密码

    强制更改windows电脑密码 1.重启电脑,连续按F8,在出现的高级选项中 2.选择administrator用户,打开管理员命令窗口 3.输入命令 etuserAA123456/add 密码就会被 ...

  9. 驱动开发:内核枚举Registry注册表回调

    在笔者上一篇文章<驱动开发:内核枚举LoadImage映像回调>中LyShark教大家实现了枚举系统回调中的LoadImage通知消息,本章将实现对Registry注册表通知消息的枚举,与 ...

  10. golang的内存管理

    0.1.索引 https://blog.waterflow.link/articles/1663406367769 1.内存管理 内存管理是管理计算机内存的过程,在主存和磁盘之间移动进程以提高系统的整 ...