kubernetes 基础 -- 2.3 kubernetes 资源对象之 Node

文章目录

  • 概念
    • Master
    • Worker
  • Node 信息
  • Node 操作

概念

节点,Kubernetes 集群的管理角色,一般分为 Master 和 Worker 两种角色

Master

Master 是 Kubernetes 集群的控制节点,负责整个集群的管理和控制,所有的控制命令都发个 Master 进行处理,Master 负责具体的执行过程;

Master 节点上运行着以下关键进程

  • kube-apiserver:提供了 HTTP Rest 接口的关键任务进程,是 Kubernetes 集群里资源的增,删,查,改等操作的唯一入口。
  • kube-controller-manager:Kubernetes 集群中的所有资源对象的自动化控制中心。
  • kube-scheduler:负责资源调度的进程。
  • etcd:集群中所有的数据全部保存在 etcd 中。

Worker

Worker 节点为 Kubernetes 集群中的工作负载节点,Master 会调度 pod 到每个可用的 Worker 节点,当某个 Worker 节点宕机,pod 会自动被迁移到其他节点上去。

每个 Worker 节点有以下关键进程:

  • kubelet:负责 pod 的创建,启停,检查等任务,与 Master 节点密切协作,实现整个集群管理的基本功能。
  • kube-proxy:实现 Kubernetes Service 的通信与负载均衡机制的组件。
  • 容器引擎:负载容器的创建管理工作。使用 contained 或 dockershim。

Worker 节点在服务正常的情况下可以动态增加到 Kubernetes 集群中,kubelet 会向 Master 注册,注册完成后,kubelet 会定期向 Master 节点汇报自己的情况,操作系统,容器情况,CPU和内存使用情况等。如果汇报时间超时,Master 则会标记 Worker 节点为 NotReady,然后进行工作 pod 的迁移。

Node 信息

kubectl get nodes 获取所有节点,获取 worker 节点的详细信息

$ kubectl get nodes
NAME      STATUS   ROLES                  AGE    VERSION
master    Ready    control-plane,master   6d2h   v1.22.3
worker    Ready                     6d2h   v1.22.3
worker2   Ready                     78s    v1.22.3

$ kubectl describe node worker
Name:               worker
Roles:              
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=worker
                    kubernetes.io/os=linux
Annotations:        flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"62:dc:60:f9:6f:39"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 1.2.3.213
                    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:  Wed, 10 Nov 2021 22:12:30 +0800
Taints:             
Unschedulable:      false
Lease:
  HolderIdentity:  worker
  AcquireTime:     
  RenewTime:       Wed, 17 Nov 2021 14:48:33 +0800
Conditions:
  Type                 Status  LastHeartbeatTime                 LastTransitionTime                Reason                       Message
  ----                 ------  -----------------                 ------------------                ------                       -------
  NetworkUnavailable   False   Tue, 16 Nov 2021 22:14:27 +0800   Tue, 16 Nov 2021 22:14:27 +0800   FlannelIsUp                  Flannel is running on this node
  MemoryPressure       False   Wed, 17 Nov 2021 14:46:15 +0800   Wed, 17 Nov 2021 00:26:48 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
  DiskPressure         False   Wed, 17 Nov 2021 14:46:15 +0800   Wed, 17 Nov 2021 00:26:48 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
  PIDPressure          False   Wed, 17 Nov 2021 14:46:15 +0800   Wed, 17 Nov 2021 00:26:48 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
  Ready                True    Wed, 17 Nov 2021 14:46:15 +0800   Wed, 17 Nov 2021 00:26:48 +0800   KubeletReady                 kubelet is posting ready status
Addresses:
  InternalIP:  1.2.3.213
  Hostname:    worker
Capacity:
  cpu:                4
  ephemeral-storage:  62903276Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             8008368Ki
  pods:               110
Allocatable:
  cpu:                4
  ephemeral-storage:  57971659066
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             7905968Ki
  pods:               110
System Info:
  Machine ID:                 b4b61451752b4b8f92a73d22a48a0dff
  System UUID:                B4B61451-752B-4B8F-92A7-3D22A48A0DFF
  Boot ID:                    badc7940-f02f-4b02-a305-e0e445901782
  Kernel Version:             3.10.0-1160.45.1.el7.x86_64
  OS Image:                   CentOS Linux 7 (Core)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://20.10.10
  Kubelet Version:            v1.22.3
  Kube-Proxy Version:         v1.22.3
PodCIDR:                      10.244.1.0/24
PodCIDRs:                     10.244.1.0/24
Non-terminated Pods:          (3 in total)
  Namespace                   Name                     CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                     ------------  ----------  ---------------  -------------  ---
  default                     nginx-app                0 (0%)        0 (0%)      0 (0%)           0 (0%)         19h
  kube-system                 kube-flannel-ds-n6gnt    100m (2%)     100m (2%)   50Mi (0%)        50Mi (0%)      5d23h
  kube-system                 kube-proxy-rp2d8         0 (0%)        0 (0%)      0 (0%)           0 (0%)         6d16h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests   Limits
  --------           --------   ------
  cpu                100m (2%)  100m (2%)
  memory             50Mi (0%)  50Mi (0%)
  ephemeral-storage  0 (0%)     0 (0%)
  hugepages-1Gi      0 (0%)     0 (0%)
  hugepages-2Mi      0 (0%)     0 (0%)
Events:              

展示了 Node 的名称,标签,创建时间等基本信息,Node 的当前状态,Node 的主机名,IP;Node 的资源总量和可分配资源,主机的信息,包括系统,kubernetes,kubelet,kube-proxy 的版本号;当前运行的 POD 列表信息;Node 相关的 Event 信息。

Node 操作

禁止 Pod 调度到该节点上。

$ kubectl cordon 

驱逐该节点上的所有 Pod。

$ kubectl drain 

该命令会删除该节点上的所有 Pod(DaemonSet 除外),在其他 node 上重新启动它们,通常该节点需要维护时使用该命令。

将该节点重新添加到 kubernetes 集群中。

$ kubectl uncordon  

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