k8s ready 不调度_图解 K8S 控制器 Node 生命周期管理

Node其实就对应着kubernetes中的工作组件,今天我们来看下kubernetes中针对Node的生命周期的管理包括心跳检测/污点/容忍/中断等机制的实现

1. 基础概念 

1.1 心跳机制

b8da3f00926f7971184c1249c8b8ef20.png心跳机制是分布式调度系统中常见的设计, kubernetes中通过Lease这种资源来进行实现心跳信息的传递,其在kubelet上运行nodelease的线程定时向apiserver更新自己的心跳信息, 同时controller控制器中的nodelifecycle会通过informer来监听集群中的lease信息

1.2 node状态

7946281ba63375704598d5f800a03806.pngNode的状态除了相关资源压力、网络不可达之外,其实只有一个Ready状态, 对应的Status则同其他资源一样三种:ConditionTrue、conditionFalse、conditionUnknown,那什么时候会是一个ready状态呢, 其实在kubernetes中我们有三大列资源: CRI、CNI、CSI,如果任一一个运行时出现错误,则当前节点就不是Ready状态

1.3 Taint和Toleration

812debdaee59cf78c5e04e04e7fe584f.pngTaint(污点)和Toleration(容忍)是kubernetes中的调度约束的一种实现,其通过一种打标签的方式,来进行调度约束,当一个Node节点被打上了一个Taint则调度器在进行调度的时候,如果发现当前调度的pod没有容忍这种污点,则当前节点就不能调度过去, 其次如果发现对应节点上已经运行的pod不能容忍node新标记的Taint, 则可能会被从当前节点中驱逐

1.4 基于心跳/Taint/Toleration的故障转移

03473395be48151728eaf0d29e432451.pngkubernetes中针对Node节点down机的故障转移的实现,其实就是记住这几个机制来进行的,在发现无法接收到对应节点的心跳之后,kubernetes就会给对应节点打上一些异常的Taint, 并且根据之前缓存的节点上的Pod来进行检查,如果发现没有对应的Toleration,则就会尝试驱逐这些Pod, 然后由对应的控制器发现Pod的删除, 就开始重新进行补偿, 然后经过调度器选择新的节点运行

2. 容忍与驱逐

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值