除了master kubernets集群中的其他機器被稱為node,node是kubernetes集群中的工作負載節點,每個node都會被master分配一些工作負載(docker容器),當某個node節點宕機,其上面的工作負載會被master自動轉移到其他的節點上。
每個node上都運行着以下關鍵進程
1.kubelet 負責pod對應的容器的創建,啟停等任務,同時與master密切協作,實現集群管理的基本功能。
2.kube-proxy 實現kubernetes,service的通訊與負載均衡機制的重要組件
3.docker engine:docker 引擎,負責本機的容器創建和管理
node在運行期間動態增加到kubernetes集群中,前提是在這個節點上已經正確安裝,配置和啟動上訴關鍵進程,在默認情況下,kubelet會向master注冊自己,這也是kubernetes推薦的node管理方式。一旦node被納入集群管理范圍,kubelet進程會定時向
master匯報自身的情況,例如操作系統,docker版本,機器的cpu和內存情況,以及當時有哪些pod在運行等。這樣master就可以獲知每個node的資源使用情況,並實現高效均衡的資源調度策略。而某個node在超過指定的時間不上報信息時,會被master判定
為失聯,node的狀態會被標記為不可用。NOT Ready,隨后master會觸發工作負載大轉移的自動流程。
查看集群中有多少個node
[root@k8s-master1 ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master1 Ready,SchedulingDisabled <none> 3d18h v1.17.5 k8s-master2 Ready,SchedulingDisabled <none> 3d18h v1.17.5 k8s-master3 Ready,SchedulingDisabled <none> 3d18h v1.17.5 k8s-node1 Ready <none> 39d v1.17.5 k8s-node2 Ready <none> 39d v1.17.5
通過 kubectl describe node <node_name> 查看某個node的詳細信息
[root@k8s-master1 ~]# kubectl describe node k8s-node1 Name: k8s-node1 Roles: <none> Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 kubernetes.io/hostname=k8s-node1 kubernetes.io/os=linux Annotations: node.alpha.kubernetes.io/ttl: 0 projectcalico.org/IPv4Address: 10.23.215.243/24 volumes.kubernetes.io/controller-managed-attach-detach: true CreationTimestamp: Wed, 27 May 2020 17:07:00 +0800 Taints: <none> Unschedulable: false Lease: HolderIdentity: k8s-node1 AcquireTime: <unset> RenewTime: Mon, 06 Jul 2020 10:56:42 +0800 Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- NetworkUnavailable False Wed, 01 Jul 2020 17:44:09 +0800 Wed, 01 Jul 2020 17:44:09 +0800 CalicoIsUp Calico is running on this node MemoryPressure False Mon, 06 Jul 2020 10:56:42 +0800 Wed, 01 Jul 2020 17:44:04 +0800 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Mon, 06 Jul 2020 10:56:42 +0800 Wed, 01 Jul 2020 17:44:04 +0800 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Mon, 06 Jul 2020 10:56:42 +0800 Wed, 01 Jul 2020 17:44:04 +0800 KubeletHasSufficientPID kubelet has sufficient PID available Ready True Mon, 06 Jul 2020 10:56:42 +0800 Wed, 01 Jul 2020 17:44:04 +0800 KubeletReady kubelet is posting ready status Addresses: InternalIP: 10.23.215.243 Hostname: k8s-node1 Capacity: cpu: 4 ephemeral-storage: 36805060Ki hugepages-2Mi: 0 memory: 3880352Ki pods: 110 Allocatable: cpu: 4 ephemeral-storage: 33919543240 hugepages-2Mi: 0 memory: 3777952Ki pods: 110 System Info: Machine ID: 778c9b59aa8743a7814bfcd85012ac07 System UUID: 422E25C4-CE82-7099-DC72-39D23474DB5F Boot ID: f1186766-1e81-419a-8cfb-5dabd532d543 Kernel Version: 3.10.0-1062.4.1.el7.x86_64 OS Image: CentOS Linux 7 (Core) Operating System: linux Architecture: amd64 Container Runtime Version: docker://18.9.9 Kubelet Version: v1.17.5 Kube-Proxy Version: v1.17.5 PodCIDR: 10.244.0.0/24 PodCIDRs: 10.244.0.0/24 Non-terminated Pods: (8 in total) Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits AGE --------- ---- ------------ ---------- --------------- ------------- --- default web-5c987b8447-6b6bx 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3d17h ingress-nginx nginx-ingress-controller-z9clj 0 (0%) 0 (0%) 0 (0%) 0 (0%) 39d kube-system calico-kube-controllers-fdf7dfdf4-c565p 0 (0%) 0 (0%) 0 (0%) 0 (0%) 39d kube-system calico-kube-controllers-fdf7dfdf4-lfcgv 0 (0%) 0 (0%) 0 (0%) 0 (0%) 39d kube-system calico-node-8pcgz 250m (6%) 0 (0%) 0 (0%) 0 (0%) 39d kube-system coredns-66cd74bdd6-qd9kp 100m (2%) 0 (0%) 70Mi (1%) 170Mi (4%) 3d20h kube-system metrics-server-fb7c8cc6d-gfrks 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3d19h kube-system nfs-client-provisioner-644c45ff78-rn7q5 0 (0%) 0 (0%) 0 (0%) 0 (0%) 3d20h Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted.) Resource Requests Limits -------- -------- ------ cpu 350m (8%) 0 (0%) memory 70Mi (1%) 170Mi (4%) ephemeral-storage 0 (0%) 0 (0%) Events: <none>
上述命令展示了Node的如下關鍵信息。
◎ Node的基本信息:名稱、標簽、創建時間等。
◎ Node當前的運行狀態:Node啟動后會做一系列的自檢工作,
比如磁盤空間是否不足(DiskPressure)、內存是否不足
(MemoryPressure)、網絡是否正常(NetworkUnavailable)、PID資源
是否充足(PIDPressure)。在一切正常時設置Node為Ready狀態
(Ready=True),該狀態表示Node處於健康狀態,Master將可以在其上
調度新的任務了(如啟動Pod)。
◎ Node的主機地址與主機名。
◎ Node上的資源數量:描述Node可用的系統資源,包括CPU、
內存數量、最大可調度Pod數量等。
◎ Node可分配的資源量:描述Node當前可用於分配的資源量。
◎ 主機系統信息:包括主機ID、系統UUID、Linux kernel版本
號、操作系統類型與版本、Docker版本號、kubelet與kube-proxy的版本
號等。
◎ 當前運行的Pod列表概要信息。
◎ 已分配的資源使用概要信息,例如資源申請的最低、最大允許
使用量占系統總量的百分比。
◎ Node相關的Event信息。