1.Node概念
节点是Kubernetes集群中的工作机器,它们是工作单元,可以是物理机、虚拟机、或云服务器实例。
Kubernetes通过将容器放入在节点(Node)上运行的Pod中来执行工作负载。每个节点上都包含运行Pod所需的所有服务及配置。
2.Node管理
Node本质上不是由Kubernetes集群来创建的,Kubernetes只是管理Node上的资源(如Pod、Deployment)。
2.1.添加节点的方式:
2.1.1节点上的kubelet向控制面执行自动注册;
2.1.2.只用资源清单方式创建一个Node对象(该Node对象需满足运行Pod的所有要求)。
# 示例
{
"kind": "Node",
"apiVersion": "v1",
"metadata": {
"name": "192.168.1.10", # 节点的IP地址
"labels": {
"name": "k8s-node01"
}
}
}
使用资源清单方式创建Node资源对象时,kubernetes会在内部创建一个Node对象作为节点的表示。kubernetes检查kubelet想API服务器注册节点时使用的
metadata.name字段是否匹配。如果节点时监控的,则该节点可以用来运行Pod,否则直到该节点变为健康之前,所有的集群活动都会忽略该节点。
2.2.节点名称唯一性
节点的名称用来标识Node对象。没有两个Node可以同时使用相同的名称。kubernetes还假定名字相同的资源是同一个对象。就Node而言,隐式假定使用相同名称的实例会具有相同的状态(例如网络配置、根磁盘内容) 和类似节点标签这类属性。这可能在节点被更改但其名称未变时导致系统状态不一致。 如果某个 Node 需要被替换或者大量变更,需要从 API 服务器移除现有的 Node 对象, 之后再在更新之后重新将其加入。
2.3.Node的扩缩容
2.3.1.扩容
在实际生产系统中当遇到集群节点容量不足的情况下,需要添加新节点(需具备Pod运行所需的所有服务)到集群中,对集群实现水平扩展从而达到扩容目的。
2.3.2.缩容
可以通过删除node节点来实现缩容目的,删除前需先将该节点上的所有pod驱逐并将节点设置为不可调度
kubectl delete node k8s-node1
2.4.Node常用操作
2.4.1将节点设置为不可调度
kubectl cordon k8s-node1
2.4.2将节点设置为可调度
kubectl uncordon k8s-node1
2.4.3驱逐节点上Pod
kubectl drain k8s-node1
2.4.4给节点打标签
kubectl label node k8s-node1 key1=value1
2.4.5删除节点标签
删除label,只需要在命令行最后指定label的key名,并加一个减号即可:
kubectl label node k8s-node1 key1-
3.Node状态
一个节点的状态包含以下信息:
- 地址(Addresses)
- 状况(Condition)
- 容量(Capacity)与可分配(Allocatable)
- 信息(Info)
3.1.addresses
addresses记录可访达节点的地址列表,一般可以包含如下属性:
- hostname(主机名)
- externalip(外网IP)
- internalip(内网IP)
3.2.Condition
condition描述节点运行时的一系列状态。一般有如下状态:
- Ready True 表示节点是健康的并且可接受Pod调度请求,可承载Pod,False 表示节点不健康并且不能接受Pod调度请求
- Unknown 表示节点在规定时间内没有向节点控制器上次心跳,节点与集群失联,此时表示节点异常
- DiskPressure True 表明磁盘大小存在压力(磁盘可用容量较小)
- MemoryPressure True 表明内存存在压力(内存容量过小)
- PIDPressure True 表明节点上存在大量的进程
- NetworkUnavailable True 表明节点的网络配置错误
3.3.容量(Capacity)与可分配(Allocatable)
这两个值描述节点上的可用资源:CPU、内存和可以调度到节点上的pod的个数上限。
capacity块中的字段标示节点拥有的资源总量,Allocatable块表示节点上可供普通pod消耗的资源量。
3.4.信息(info)
info值的是节点的一般信息,如内核版本、kubernetes版本(kubelet和kube-proxy版本)、容器运行时详细信息,以及节点使用的操作系统。kubelet从节点收集这些信息并将其发布到kubernetes api