首页 > 其他分享 >k8s驱逐篇(5)-kube-controller-manager驱逐

k8s驱逐篇(5)-kube-controller-manager驱逐

时间:2022-12-11 11:34:38浏览次数:51  
标签:node 驱逐 -- controller 污点 pod k8s 节点

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

标签:node,驱逐,--,controller,污点,pod,k8s,节点
From: https://www.cnblogs.com/lianngkyle/p/16972995.html

相关文章

  • k8s YAML
    YAML基础大小写敏感使用缩进表示层级关系缩进时不允许使用Tab键,只允许使用空格。缩进的空格数目不重要,只要相同层级的元素左侧对齐即可# 表示注释,从这个字符一直到......
  • Kubernetes(k8s)存储管理之数据卷volumes(五):动态制备-存储类StorageClass
    目录一.系统环境二.前言三.静态制备和动态制备四.存储类StorageClass4.1存储类StorageClass概览4.2StorageClass资源五.创建存储类StorageClass5.1配置NFS服务端以及共......
  • Kubernetes(k8s) 安装部署
    安装       疑难问题Kubeadm初始化报错:[ERRORCRI]:containerruntimeisnotrunning:[root@k8s-master~]#kubeadminit\>--apiserver-advertis......
  • k8s--数据存储、PV、PVC
    介绍在前面学了使用NFS提供存储,此时就要求用户会搭建NFS系统,并且会在yaml中配置nfs。由于kubernetes支持的存储系统有很多,要求客户全都掌握,显然不合理。为了能够......
  • 【云原生】K8s Ingress rewrite与TCP四层转发讲解与实战操作
    目录一、背景二、K8sIngress安装三、K8sIngressrewrite讲解与使用1)配置说明2)示例演示1、部署应用2、配置ingressrewrite转发(http)3、配置ingressrewrite转发(https)【1......
  • Kubernetes(k8s)存储管理之数据卷volumes(四):持久卷Persistent Volume
    目录一.系统环境二.前言三.持久卷(PersistentVolume)3.1持久卷(PersistentVolume)概览3.2持久卷和持久卷申领的生命周期3.3持久卷的类型3.4持久卷的回收策略persistentVo......
  • Kubernetes(k8s)存储管理之数据卷volumes(三):NFS数据卷
    目录一.系统环境二.前言三.NFS数据卷3.1NFS数据卷概览3.2配置NFS服务端以及共享目录3.3配置NFS客户端3.4创建有NFS卷的pod一.系统环境服务器版本docker软件版本......
  • k8s节点磁盘满了,无法调度的解决方案
     在fat-k8s-worker13节点上操作1、先清理磁盘垃圾文件2、删除Exited状态的容器(删除的过程中遇到报错没关系,只要执行一次就好)dockerrm-f$(dockerps-a|grep'E......
  • 搭建 k8s 环境
    平台规划单Master集群多Master集群硬件要求环境节点硬件要求测试环境Master2核,4G,20GNode4核,8G,40G生产环境Master8核,16G,100GNode16核,64G,5......
  • framework 用 jexus 也能跑 k8s
     Jexus以支持ASP.NET、Core、php在Linux上运行为特色,能够支持ASP.NET的原理,就是在Linux上安装了Mono(跨平台.NET运行环境),进而支持ASP.NET程序的运行。官网:JexusWebServer......