【kubernetes系列】Kubernetes之master和node

在学习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 node
NAME     STATUS   ROLES    AGE    VERSION
k8s-m1   Ready    master   111d   v1.19.16
k8s-m2   Ready    master   111d   v1.19.16
k8s-m3   Ready    master   111d   v1.19.16

#查看node的详细信息
[root@k8s-m1 ~]# kubectl describe node k8s-m1
Name:               k8s-m1
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=k8s-m1
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/master=
Annotations:        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: 192.168.2.140/24
                    projectcalico.org/IPv4IPIPTunnelAddr: 10.244.42.151
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Mon, 06 Mar 2023 10:27:18 +0800
Taints:             <none>
Unschedulable:      false
Lease:
  HolderIdentity:  k8s-m1
  AcquireTime:     <unset>
  RenewTime:       Sun, 25 Jun 2023 15:58:26 +0800
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       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 node
  MemoryPressure       False   Sun, 25 Jun 2023 15:56:18 +0800   Mon, 08 May 2023 15:33:54 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Sun, 25 Jun 2023 15:56:18 +0800   Wed, 21 Jun 2023 11:13:07 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Sun, 25 Jun 2023 15:56:18 +0800   Mon, 08 May 2023 15:33:54 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Sun, 25 Jun 2023 15:56:18 +0800   Mon, 19 Jun 2023 10:58:37 +0800   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  192.168.2.140
  Hostname:    k8s-m1
Capacity:
  cpu:                16
  ephemeral-storage:  38815216Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8007188Ki
  pods:               110
Allocatable:
  cpu:                16
  ephemeral-storage:  35772103007
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             7904788Ki
  pods:               110
System Info:
  Machine ID:                 df2da3c566ed497795d970fc58760acd
  System UUID:                420948D8-763D-6A67-4414-58ECF43AD89C
  Boot ID:                    3b3cc5df-90ce-44df-add0-d4e7a4f07869
  Kernel Version:             3.10.0-957.el7.x86_64
  OS Image:                   CentOS Linux 7 (Core)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://19.3.15
  Kubelet Version:            v1.19.16
  Kube-Proxy Version:         v1.19.16
PodCIDR:                      10.244.2.0/24
PodCIDRs:                     10.244.2.0/24
Non-terminated Pods:          (6 in total)
  Namespace                   Name                              CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
  ---------                   ----                              ------------  ----------  ---------------  -------------  ---
  kube-system                 calico-node-cgffm                 250m (1%)     0 (0%)      0 (0%)           0 (0%)         222d
  kube-system                 kube-apiserver-k8s-m1             250m (1%)     0 (0%)      0 (0%)           0 (0%)         111d
  kube-system                 kube-controller-manager-k8s-m1    200m (1%)     0 (0%)      0 (0%)           0 (0%)         111d
  kube-system                 kube-proxy-dlw8r                  0 (0%)        0 (0%)      0 (0%)           0 (0%)         45d
  kube-system                 kube-scheduler-k8s-m1             100m (0%)     0 (0%)      0 (0%)           0 (0%)         111d
  metallb-system              speaker-t44hq                     0 (0%)        0 (0%)      0 (0%)           0 (0%)         4d1h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests   Limits
  --------           --------   ------
  cpu                800m (5%)  0 (0%)
  memory             0 (0%)     0 (0%)
  ephemeral-storage  0 (0%)     0 (0%)
  hugepages-1Gi      0 (0%)     0 (0%)
  hugepages-2Mi      0 (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集群中节点管理

1.节点调度:不可调度kubectl cordon k8s-m3 / 可调度kubectl uncordon k8s-m3

2.驱逐节点:kubectl drain k8s-m3 --delete-local-data --force --ignore-daemonsets

3.删除kubectl delete node k8s-m3

更多内容请参考《kubernetes权威指南》

更多关于kubernetes的知识分享,请前往博客主页。编写过程中,难免出现差错,敬请指出

你可能感兴趣的:(Kubernetes,kubernetes,容器,docker)