1.2.1. 节点¶
节点是Kubernetes中的工作机器。接受控制面的管理。 节点上面有kubelet 容器运行时(docker或者rtk)以及kube-proxy。
1.2.1.1. 地址¶
Hostname: 主机名字
ExternalIP: 外部ip
InternalIP: 内部ip
1.2.1.2. 状态¶
OutOfDisk
Ready 就绪
MemoryPressure 内存压力
PIDPressure 进程过多
DiskPressure 磁盘空闲不足
NetworkUnavailable 网络不可达
ConfigOK
1.2.1.3. 节点控制器¶
节点控制器为节点分配cidr块
使节点控制器的内部节点列表与云提供商的可用计算机列表保持同步
监控节点的健康状况。节点控制器负责在节点变得无法访问时将NodeStatus的NodeReady条件更新为ConditionUnknown
负责驱逐在有污点的节点上运行的pod(1.6以后)
可以负责创建表示节点条件的污点(1.8以后)
kubelet 负责创建和更新 NodeStatus 和 Lease 对象。
kubelet默认美5分钟更新node status, 默认10s更新一次租期信息。如果失败的话会指数级回退。
1.2.1.4. 节点管理¶
标记一个节点不可调度
kubectl cordon <nodename>
Note
DaemonSet 通常提供节点本地的服务,即使节点上的负载应用已经被腾空,这些服务也仍需 运行在节点之上。
一个监控节点的描述信息说明
节点的描述信息包含如下几个部分内容
名字、角色、标签、注解、污点、创建时间、是否可以调度、租期信息
地址信息
事件
先决条件
容量数据(cpu, memory,pod)
分配情况
系统信息
pod cidr
[root@zhaojiedi-elk-2 ~]# kubectl describe node zkdemo-1.epc.duxiaoman.com
# 基本信息展示, 名字,角色,标签和主机信息
Name: zkdemo-1.epc.duxiaoman.com
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=zkdemo-1.epc.duxiaoman.com
kubernetes.io/os=linux
Annotations: flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"b6:5b:04:70:59:c0"}
flannel.alpha.coreos.com/backend-type: vxlan
flannel.alpha.coreos.com/kube-subnet-manager: true
flannel.alpha.coreos.com/public-ip: 10.157.31.40
kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Fri, 24 Sep 2021 19:08:39 +0800
# 污点信息,是否不可调度,租期信息,身份信息
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: zkdemo-1.epc.duxiaoman.com
AcquireTime: <unset>
RenewTime: Fri, 24 Sep 2021 20:11:07 +0800
# 状况进展,开始是网络不可达的,然后作为几个探测后,就ready了。
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Fri, 24 Sep 2021 19:21:34 +0800 Fri, 24 Sep 2021 19:21:34 +0800 FlannelIsUp Flannel is running on this node
MemoryPressure False Fri, 24 Sep 2021 20:10:29 +0800 Fri, 24 Sep 2021 19:08:39 +0800 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Fri, 24 Sep 2021 20:10:29 +0800 Fri, 24 Sep 2021 19:08:39 +0800 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Fri, 24 Sep 2021 20:10:29 +0800 Fri, 24 Sep 2021 19:08:39 +0800 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Fri, 24 Sep 2021 20:10:29 +0800 Fri, 24 Sep 2021 19:19:52 +0800 KubeletReady kubelet is posting ready status
Addresses:
InternalIP: 10.157.31.40
Hostname: zkdemo-1.epc.duxiaoman.com
# 容量信息,表示机器有多少资源的
Capacity:
cpu: 2
ephemeral-storage: 20510288Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8173780Ki
pods: 110
# 分配的资源情况
Allocatable:
cpu: 2
ephemeral-storage: 18902281390
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 8071380Ki
pods: 110
# 系统信息,
System Info:
Machine ID: f58b2b87d0c14042984f07b3654572ca
System UUID: 30950B98-CED8-4BFB-B006-9A572CC41A86
Boot ID: 574a0c40-db74-4600-b676-9dfa50caf862
Kernel Version: 3.10.0-1160.42.2.el7.x86_64
OS Image: CentOS Linux 7 (Core)
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://20.10.8
Kubelet Version: v1.22.2
Kube-Proxy Version: v1.22.2
PodCIDR: 10.244.2.0/24
PodCIDRs: 10.244.2.0/24
Non-terminated Pods: (2 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system kube-flannel-ds-v74v6 100m (5%) 100m (5%) 50Mi (0%) 50Mi (0%) 62m
kube-system kube-proxy-prl4c 0 (0%) 0 (0%) 0 (0%) 0 (0%) 62m
# 分配的资源情况
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 100m (5%) 100m (5%)
memory 50Mi (0%) 50Mi (0%)
ephemeral-storage 0 (0%) 0 (0%)
hugepages-1Gi 0 (0%) 0 (0%)
hugepages-2Mi 0 (0%) 0 (0%)
# 事件信息
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Starting 62m kubelet Starting kubelet.
Normal NodeHasSufficientMemory 62m (x2 over 62m) kubelet Node zkdemo-1.epc.duxiaoman.com status is now: NodeHasSufficientMemory
Normal NodeHasNoDiskPressure 62m (x2 over 62m) kubelet Node zkdemo-1.epc.duxiaoman.com status is now: NodeHasNoDiskPressure
Normal NodeHasSufficientPID 62m (x2 over 62m) kubelet Node zkdemo-1.epc.duxiaoman.com status is now: NodeHasSufficientPID
Normal NodeAllocatableEnforced 62m kubelet Updated Node Allocatable limit across pods
Normal NodeReady 51m kubelet Node zkdemo-1.epc.duxiaoman.com status is now: NodeRead
1.2.1.5. 节点可靠性¶
节点控制器把逐出速率限制在每秒 –node-eviction-rate 个(默认为 0.1)。 这表示它每 10 秒钟内至多从一个节点驱逐 Pod。 一个可用区的节点变为不健康时,节点的驱逐行为将发生改变,检查不健康的node百分比,若果超过–unhealthy-zone-threshold (默认为 0.55),驱逐的速率将会降低,降低为每秒 –secondary-node-eviction-rate 个(默认为 0.01)。 如果集群规模比较小,如果集群较小(意即小于等于 –large-cluster-size-threshold 个节点 - 默认为 50),驱逐操作会停止。
节点控制器还会驱逐哪些运行在noexecute污点节点上面的pod。
1.2.1.6. 节点容量¶
node对象会跟踪节点的资源容量的,通过自注册方式生成注册期间的报告自身容量数据,默认k8s是使用机器全部的资源的, 可以设置一些预留资源给非k8s服务或者容器使用的。
k8s将资源分为几个部分
kube-reserved: 用来给kubelet 容器运行时 节点问题监控器等k8s系统守护进程资源预留的
system-reserved: 这个部分是系统预留,主要给类似sshd udev等系统守护进程预留的资源
eviction-hard: 节点的内存压力降导致系统内存不足,影响整个节点上面的pod服务Pod,将不能使用超过 capacity-eviction-hard 所 指定的资源量。因此,为驱逐而预留的资源对 Pod 是不可用的。
1.2.1.7. 节点拓扑¶
待补充。