Kubernetes中节点(node)指的是一个工作机器,曾经叫做 minion
。不同的集群中,节点可能是虚拟机也可能是物理机。每个节点都由 master 组件管理,并包含了运行 Pod(容器组)所需的服务(容器引擎,kubelet,kube-proxy)。
节点状态信息
- Addresses
- Conditions
- Capacity and Allocatable
- Info
查看所有节点列表
kubectl get nodes -o wide

查看节点详细信息
kubectl describe node <node-name>
输出结果如下所示:


输出信息重要字段解释
Address
- HostName: 在节点命令行界面上执行
hostname
命令所获得的值。启动 kubelet 时,可以通过参数--hostname-override
覆盖 - ExternalIP:通常是节点的外部IP(可以从集群外访问的内网IP地址;上面的例子中,此字段为空)
- InternalIP:通常是从节点内部可以访问的 IP 地址
Conditions
Node Condition | 描述 |
---|---|
OutOfDisk | 如果节点上的空白磁盘空间不够,不能够再添加新的节点时,该字段为 True,其他情况为 False |
Ready | 如果节点是健康的且已经就绪可以接受新的 Pod。则节点Ready字段为 True。False表明了该节点不健康,不能够接受新的 Pod。 |
MemoryPressure | 如果节点内存紧张,则该字段为 True,否则为False |
PIDPressure | 如果节点上进程过多,则该字段为 True,否则为 False |
DiskPressure | 如果节点磁盘空间紧张,则该字段为 True,否则为 False |
NetworkUnvailable | 如果节点的网络配置有问题,则该字段为 True,否则为 False |
如果 Ready 类型Condition 的 status 持续为 Unkown 或者 False 超过 pod-eviction-timeout(kube-controller-manager的参数)所指定的时间,节点控制器(node controller)将对该节点上的所有 Pod 执行删除的调度动作。默认的 pod-eviction-timeout 时间是 5 分钟。某些情况下(例如,节点网络故障),apiserver 不能够与节点上的 kubelet 通信,删除 Pod 的指令不能下达到该节点的 kubelet 上,直到 apiserver 与节点的通信重新建立,指令才下达到节点。这意味着,虽然对 Pod 执行了删除的调度指令,但是这些 Pod 可能仍然在失联的节点上运行。
Capacity /Allocatable(容量/可分配量)
容量和可分配量描述了节点上的可用资源的情况:
- CPU
- 内存
- 该节点可调度的最大 pod 数量
Capacity 中的字段表示节点上的资源总数,Allocatable 中的字段表示该节点上可分配给普通 Pod 的资源总数。
System Info
描述了节点的基本信息,例如:
- Linux 内核版本
- Kubernetes 版本(kubelet 和 kube-proxy 的版本)
- Docker 版本
- 操作系统名称
这些信息由节点上的 kubelet 收集。
节点控制器(Node Controller)
节点控制器是一个负责管理节点的 Kubernetes master 组件。在节点的生命周期中,节点控制器起到了许多作用。
- 首先,节点控制器在注册节点时为节点分配 CIDR 地址块
- 第二,节点控制器通过云供应商(cloud-controller-manager)接口检查节点列表中每一个节点对象对应的虚拟机是否可用。在云环境中,只要节点状态异常,节点控制器检查其虚拟机在云供应商的状态,如果虚拟机不可用,自动将节点对象从 APIServer 中删除。
- 第三,节点控制器监控节点的健康状况。当节点变得不可触达时(例如,由于节点已停机,节点控制器不再收到来自节点的心跳信号),节点控制器将节点API对象的 NodeStatus Condition 取值从 NodeReady 更新为 Unknown;然后在等待 pod-eviction-timeout 时间后,将节点上的所有 Pod 从节点驱逐。
默认40秒未收到心跳,修改 NodeStatus Condition 为 Unknown;默认 pod-eviction-timeout 为 5分钟;节点控制器每隔 --node-monitor-period 秒检查一次节点的状态