在学习k8s之前,必须先了解 Kubernetes中的重要概念,它们是组成 Kubernetes 集群的基石。(参考Kubernetes权威指南)
一、Master
Kubernetes 里的Master指的是集群的控制节点, 每个Kubernetes 集群里至少需要有一个Master节点负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它来负责具体的执行过程,我们后面执行的所有命令基本都是在Master节点上运行。为了实现高可用,可以运行多个Master。
Master节点上运行着以下一组关键进程。
- Kubernetes API Server(kube-apiserver), 提供 HTTP Rest 接口的关键服务程序,kubernets里所有资源增、删、改、查等操作的唯一入口,也是集群控制的入口进程。
- Kubernetes Controller Manager(kube-controller-manager),所有资源对象的自动化控制中心可以理解为资源对象的大总管。
- Kubernetes Scheduler(kube-scheduler),资源调度(pod)的进程,相当于调度室。
- etcd Server,Kubernetes 里所有资源对象的数据全部是保持在etcd中,etcd是一种key-value类型的数据库
二、Node
Node 的职责是运行各种容器应用。Node 由 Master 管理,Node 上有相应的服务负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Node 可以是物理机或者是虚拟机,可以是Windows或者是Linux的操作系统。Master节点也可以充当为node节点,然后部署服务。
Node运行着一些关键进程:
- kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
- kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
- Docker Engine (docker):Docker引擎,负责本机的容器创建和管理工作。
我们可以执行下述命令查看集群中有多少个Node(master节点也算是node节点中的一种):
[root@k8s-m1 ~]# kubectl get nodeNAME STATUS ROLESAGEVERSIONk8s-m1 Readymaster 111d v1.19.16k8s-m2 Readymaster 111d v1.19.16k8s-m3 Readymaster 111d v1.19.16#查看node的详细信息[root@k8s-m1 ~]# kubectl describe node k8s-m1Name: k8s-m1Roles:masterLabels: beta.kubernetes.io/arch=amd64beta.kubernetes.io/os=linuxkubernetes.io/arch=amd64kubernetes.io/hostname=k8s-m1kubernetes.io/os=linuxnode-role.kubernetes.io/master=Annotations:kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.socknode.alpha.kubernetes.io/ttl: 0projectcalico.org/IPv4Address: 192.168.2.140/24projectcalico.org/IPv4IPIPTunnelAddr: 10.244.42.151volumes.kubernetes.io/controller-managed-attach-detach: trueCreationTimestamp:Mon, 06 Mar 2023 10:27:18 +0800Taints: <none>Unschedulable:falseLease:HolderIdentity:k8s-m1AcquireTime: <unset>RenewTime: Sun, 25 Jun 2023 15:58:26 +0800Conditions:Type StatusLastHeartbeatTime LastTransitionTimeReason Message---- ----------------------- ------------------------ -------NetworkUnavailable False Wed, 21 Jun 2023 14:54:23 +0800 Wed, 21 Jun 2023 14:54:23 +0800 CalicoIsUp Calico is running on this nodeMemoryPressure False Sun, 25 Jun 2023 15:56:18 +0800 Mon, 08 May 2023 15:33:54 +0800 KubeletHasSufficientMemory kubelet has sufficient memory availableDiskPressure False Sun, 25 Jun 2023 15:56:18 +0800 Wed, 21 Jun 2023 11:13:07 +0800 KubeletHasNoDiskPressure kubelet has no disk pressurePIDPressureFalse Sun, 25 Jun 2023 15:56:18 +0800 Mon, 08 May 2023 15:33:54 +0800 KubeletHasSufficientPIDkubelet has sufficient PID availableReadyTrueSun, 25 Jun 2023 15:56:18 +0800 Mon, 19 Jun 2023 10:58:37 +0800 KubeletReady kubelet is posting ready statusAddresses:InternalIP:192.168.2.140Hostname:k8s-m1Capacity:cpu:16ephemeral-storage:38815216Kihugepages-1Gi:0hugepages-2Mi:0memory: 8007188Kipods: 110Allocatable:cpu:16ephemeral-storage:35772103007hugepages-1Gi:0hugepages-2Mi:0memory: 7904788Kipods: 110System Info:Machine ID: df2da3c566ed497795d970fc58760acdSystem UUID:420948D8-763D-6A67-4414-58ECF43AD89CBoot ID:3b3cc5df-90ce-44df-add0-d4e7a4f07869Kernel Version: 3.10.0-957.el7.x86_64OS Image: CentOS Linux 7 (Core)Operating System: linuxArchitecture: amd64Container Runtime Version:docker://19.3.15Kubelet Version:v1.19.16Kube-Proxy Version: v1.19.16PodCIDR:10.244.2.0/24PodCIDRs: 10.244.2.0/24Non-terminated Pods:(6 in total)Namespace NameCPU RequestsCPU LimitsMemory RequestsMemory LimitsAGE--------- ---------------------------------------------------------kube-system calico-node-cgffm 250m (1%) 0 (0%)0 (0%) 0 (0%) 222dkube-system kube-apiserver-k8s-m1 250m (1%) 0 (0%)0 (0%) 0 (0%) 111dkube-system kube-controller-manager-k8s-m1200m (1%) 0 (0%)0 (0%) 0 (0%) 111dkube-system kube-proxy-dlw8r0 (0%)0 (0%)0 (0%) 0 (0%) 45dkube-system kube-scheduler-k8s-m1 100m (0%) 0 (0%)0 (0%) 0 (0%) 111dmetallb-systemspeaker-t44hq 0 (0%)0 (0%)0 (0%) 0 (0%) 4d1hAllocated resources:(Total limits may be over 100 percent, i.e., overcommitted.)Resource Requests Limits-------- -------- ------cpu800m (5%)0 (0%)memory 0 (0%) 0 (0%)ephemeral-storage0 (0%) 0 (0%)hugepages-1Gi0 (0%) 0 (0%)hugepages-2Mi0 (0%) 0 (0%)Events:<none>
说明:
上述命令展示了Node的如下关键信息。
Node基本信息:名称、标签、创建时间等。
Node当前的运行状态,Node启动以后会做一系列的自检工作,比如磁盘是否满了,如果满了就标注OutOfDisk=True,否则继续检查内存是否不足(如果内存不足,就标注MemoryPressure=True),最后一切正常,就设置为Ready状态(Ready=True),该状态表示Node处于健康状态,Master将可以在其上调度新的任务了(如启动Pod)。
Node的主机地址与主机名。
Node上的资源总量:描述Node可用的系统资源,包括CPU、内存数量、最大可调度Pod数量等,注意到目前Kubernetes已经支持GPU资源分配了(alpha.kubernetes.io/nvidia-gpu=0)。
Node可分配资源量:描述Node当前可用于分配等资源量。
主机系统信息:包括主机等唯一标识UUID、Linux kernel版本号、操作系统类型与版本、Kubernetes版本号、kubelet与kube-proxy的版本号等。
当前正在运行等Pod列表概要信息。
已分配的资源使用概要信息,例如资源申请的最低、最大允许使用量占系统总量等百分比。
Node相关的Event信息。
具体内容请参考《kubernetes权威指南》
更多关于kubernetes的知识请前往博客主页。