除了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信息。