背景资料
在Kubernetes架构图中可以看到,节点(Node)是一个由管理节点委托运行任务的worker。 它能运行一个或多个Pods,节点(Node)提供了运行容器环境所需要的所有必要条件,在Kubernetes之前版本中叫做Minion。
相关结构体
通过下面这张图可以看到在Kubernetes中节点(Node)的相关结构体信息:
• 结构体Node:表示Kubernetes中的节点,在节点上面运行POD。
• 结构体NodeSpec:存放节点的属性信息。
这里面有一个例外,就是如果使用daemonSet控制器来创建POD的时候,不会关心Unschedulable这个属性是否被设置成了true,这是因为daemonSet控制器认为任何节点上的daemonSet POD都是必须要创建的,同这个属性无关。
•结构体NodeStatus:存放节点当前状态信息。
1. 属性Capacity:存放节点上所有资源总量
2. 属性Allocatable:存放节点上可以被调度使用的可用资源数量
3. 属性Phase:存放节点当前所处在什么阶段,一共有三个取值,分别是“Pending”、“Running”和“Terminated”,分别表示如下阶段:
1)Pending:表示节点已经被添加到Kubernetes集群中,但是还没有被Kubernetes进行配置
2)Running:表示节点已经被Kubernetes配置完成,可以由Kubernetes进行调度使用
3)Terminated:表示节点已经从Kubernetes集群中被删除掉了
•结构体NodeCondition:存放节点健康状况。
1.属性Type:节点健康状况类型,包括Ready、OutOfDisk、MemoryPressure、DiskPressure和NetworkUnavailable,分别表示:
1)Ready:表示节点是健康的,可以随时在上面创建POD
2)OutOfDisk:表示这个节点没有空闲的磁盘空间了,已经不能在上面创建POD了
3)MemoryPressure:表示这个节点上可用内存已经很少了
4)DiskPressure:表示这个节点上可用磁盘空间已经很少了
5) NetworkUnavailable:表示这个节点上网络没有被正确配置
2. 属性Status:表示某种类型健康状况的当前状态,目前只有True、False和Unknown,在kubernetes将来版本中还会继续添加新的状态。
1)True:表示当前类型的健康状况确实存在
2)False:表示当前类型的健康状况不存在
3)Unknown:表示kubernetes无法确定当前类型的健康状况是否存在
• 结构体AttachedVolume:存放挂载到节点上的数据卷信息。
• 结构体NodeStats:存放节点的统计数据。
新特性
在Kubernetes1.4中,结构体NodeCondition新增了一个健康状况类型DiskPressure,用来表示这个节点上可用磁盘空间已经很少了。
新增了这个健康状况类型DiskPressure后,在两个方面会提升Kubernetes的使用:
1.可以在调度POD的时候进行参考,如果节点上确实发生了DiskPressure这件事,那么就会由scheduler模块将POD调度到其他节点上。
2.可以在控制节点的时候进行参考,如果节点上确实发生了DiskPressure这件事,那么就会由kubelet模块回收这个节点上的所有POD,将这些POD驱逐到其他节点上。
下面介绍kubelet模块在控制节点的时候是如何参考使用DiskPressure的,这就需要更细致的分析结构体NodeStats中的五个属性:
1. 属性CPU:表示CPU相关的统计数据。这个属性对应结构体CPUStats:
其中属性Time表示统计数据更新时间,属性UsageNanoCores表示节点上所有CPU在采样窗口内的使用量,属性UsageCoreNanoSeconds表示节点上所有CPU历史使用总量。
2. 属性Memory:表示内存相关的统计数据。这个属性对应结构体MemoryStats:
其中属性Time表示统计数据更新时间,属性AvailableBytes表示可以使用的内存总量,属性UsageBytes表示已经被分配的内存大小,属性WorkingSetBytes表示已经被使用的内存大小,已经被使用的内存大小