03.节点相关的知识

在K8S中创建节点时,仅仅是创建了一个描述该节点的API对象。节点API对象创建成功后,K8S将检查该节点是否有效。

1
2
3
4
5
6
7
8

kind: Node
apiVersion: v1
metadata:
    name: "10.240.79.157"
    labels:
        name: "my-first-k8s-node"

K8S在APIServer上创建一个节点对象(节点描述),并且基于metadata.name字段对节点进行健康检查。如果节点组件正在运行,则可以向该节点调度Pod,否则,该节点对象将被忽略,直到节点变为有效状态。

K8S将保留无效的节点对象,并不断地检查该节点是否有效。除非使用kubectl delete node my-first-k8s-node

节点控制器

节点控制器是一个负责管理节点的生命周期的K8S组件:

  1. 节点控制器在注册节点时为节点分配CIDR地址块

  2. 节点控制器检查节点列表中每一个节点对应的虚拟机是否可用。

  3. 节点控制器监控节点的健康状态,如果节点不可达(例如节点停机,节点无法再收到来自节点的心跳信号),节点控制器将节点对象的NodeStatus Conditon取值从NodeReady更新为Unknown,然后在等待pod-eviciton-timeout时间后,将节点上的所有Pod从节点驱逐(似乎最新版不是这样实现的,新版的Node描述中不存在pod-eviciton-timeout)。

    • 默认40秒未收到心跳,修改NodeStatus Conditon为Unknown
    • 默认pod-eviciton-timeout为5分钟
    • 节点控制器每隔--node-monitor-period秒检查一次节点的状态