跳转至

Kubernetes集群Node管理

一、查看集群信息

[root@k8smaster001 ~]# kubectl cluster-info
Kubernetes control plane is running at https://192.168.3.101:6443
CoreDNS is running at https://192.168.3.101:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

二、查看节点信息

2.1 查看集群节点信息

[root@k8smaster001 ~]# kubectl get nodes
NAME           STATUS     ROLES           AGE   VERSION
k8smaster001   Ready      control-plane   20d   v1.29.2
k8smaster002   Ready      control-plane   20d   v1.29.2
k8smaster003   Ready      control-plane   20d   v1.29.2
k8sworker001   Ready      <none>          20d   v1.29.2
k8sworker002   Ready      <none>          20d   v1.29.2

2.2 查看集群节点详细信息

[root@k8smaster001 ~]# kubectl get nodes -o wide
NAME           STATUS     ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION                CONTAINER-RUNTIME
k8smaster001   Ready   control-plane   20d   v1.29.2   192.168.3.201   <none>        CentOS Linux 7 (Core)   5.4.271-1.el7.elrepo.x86_64   docker://25.0.4
k8smaster002   Ready      control-plane   20d   v1.29.2   192.168.3.202   <none>        CentOS Linux 7 (Core)   5.4.271-1.el7.elrepo.x86_64   docker://25.0.4
k8smaster003   Ready      control-plane   20d   v1.29.2   192.168.3.203   <none>        CentOS Linux 7 (Core)   5.4.271-1.el7.elrepo.x86_64   docker://25.0.4
k8sworker001   Ready      <none>          20d   v1.29.2   192.168.3.204   <none>        CentOS Linux 7 (Core)   5.4.271-1.el7.elrepo.x86_64   docker://25.0.4
k8sworker002   Ready      <none>          20d   v1.29.2   192.168.3.205   <none>        CentOS Linux 7 (Core)   5.4.271-1.el7.elrepo.x86_64   docker://25.0.4

2.3 查看节点描述详细信息

[root@k8smaster001 ~]# kubectl describe node k8smaster001
Name:               k8smaster001
Roles:              control-plane
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=k8smaster001
                    kubernetes.io/os=linux
                    node-role.kubernetes.io/control-plane=
                    node.kubernetes.io/exclude-from-external-load-balancers=
Annotations:        csi.volume.kubernetes.io/nodeid: {"csi.tigera.io":"k8smaster001"}
                    kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/cri-dockerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    projectcalico.org/IPv4Address: 192.168.3.201/24
                    projectcalico.org/IPv4VXLANTunnelAddr: 10.244.10.192
                    volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp:  Sat, 09 Mar 2024 21:09:39 +0800
Taints:             node.kubernetes.io/unreachable:NoExecute
                    node-role.kubernetes.io/control-plane:NoSchedule
                    node.kubernetes.io/unreachable:NoSchedule
Unschedulable:      false
Lease:
  HolderIdentity:  k8smaster001
  AcquireTime:     <unset>
  RenewTime:       Fri, 22 Mar 2024 15:06:57 +0800
Conditions:
  Type                 Status    LastHeartbeatTime                 LastTransitionTime                Reason              Message
  ----                 ------    -----------------                 ------------------                ------              -------
  NetworkUnavailable   False     Sat, 09 Mar 2024 21:24:28 +0800   Sat, 09 Mar 2024 21:24:28 +0800   CalicoIsUp          Calico is running on this node
  MemoryPressure       Unknown   Fri, 22 Mar 2024 15:02:08 +0800   Mon, 25 Mar 2024 17:17:24 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
  DiskPressure         Unknown   Fri, 22 Mar 2024 15:02:08 +0800   Mon, 25 Mar 2024 17:17:24 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
  PIDPressure          Unknown   Fri, 22 Mar 2024 15:02:08 +0800   Mon, 25 Mar 2024 17:17:24 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
  Ready                Unknown   Fri, 22 Mar 2024 15:02:08 +0800   Mon, 25 Mar 2024 17:17:24 +0800   NodeStatusUnknown   Kubelet stopped posting node status.
Addresses:
  InternalIP:  192.168.3.201
  Hostname:    k8smaster001
Capacity:
  cpu:                2
  ephemeral-storage:  17394Mi
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             2025648Ki
  pods:               110
Allocatable:
  cpu:                2
  ephemeral-storage:  16415037823
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             1923248Ki
  pods:               110
System Info:
  Machine ID:                 ff622d7dc1094db389b11fb6e949d103
  System UUID:                b9ee3a28-ef28-437b-b259-040c41149318
  Boot ID:                    53ab7381-4f6e-4676-af1a-6881f9eff1ee
  Kernel Version:             5.4.271-1.el7.elrepo.x86_64
  OS Image:                   CentOS Linux 7 (Core)
  Operating System:           linux
  Architecture:               amd64
  Container Runtime Version:  docker://25.0.4
  Kubelet Version:            v1.29.0
  Kube-Proxy Version:         v1.29.0
PodCIDR:                      10.244.0.0/24
PodCIDRs:                     10.244.0.0/24
Non-terminated Pods:          (9 in total)
  Namespace                   Name                                        CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                                        ------------  ----------  ---------------  -------------  ---
  calico-system               calico-kube-controllers-6f7d776688-m4dx5    0 (0%)        0 (0%)      0 (0%)           0 (0%)         20d
  calico-system               calico-node-k7brp                           0 (0%)        0 (0%)      0 (0%)           0 (0%)         20d
  calico-system               csi-node-driver-cmvns                       0 (0%)        0 (0%)      0 (0%)           0 (0%)         20d
  kube-system                 coredns-76f75df574-fgmnd                    100m (5%)     0 (0%)      70Mi (3%)        170Mi (9%)     20d
  kube-system                 coredns-76f75df574-zpls9                    100m (5%)     0 (0%)      70Mi (3%)        170Mi (9%)     20d
  kube-system                 kube-apiserver-k8smaster001                 250m (12%)    0 (0%)      0 (0%)           0 (0%)         20d
  kube-system                 kube-controller-manager-k8smaster001        200m (10%)    0 (0%)      0 (0%)           0 (0%)         20d
  kube-system                 kube-proxy-xcx4j                            0 (0%)        0 (0%)      0 (0%)           0 (0%)         20d
  kube-system                 kube-scheduler-k8smaster001                 100m (5%)     0 (0%)      0 (0%)           0 (0%)         20d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                750m (37%)  0 (0%)
  memory             140Mi (7%)  340Mi (18%)
  ephemeral-storage  0 (0%)      0 (0%)
  hugepages-1Gi      0 (0%)      0 (0%)
  hugepages-2Mi      0 (0%)      0 (0%)

三、worker node节点管理集群

  • 如果是kubeasz安装,所有节点(包括master与node)都已经可以对集群进行管理

  • 如果是kubeadm安装,在node节点上管理时会报如下错误

[k8sworker001 ~]# kubectl get nodes
The connection to the server localhost:8080 was refused - did you specify the right host or port?

只要把master上的管理文件/etc/kubernetes/admin.conf拷贝到node节点的$HOME/.kube/config就可以让node节点也可以实现kubectl命令管理

1, 在node节点的用户家目录创建.kube目录

[k8sworker001 ~]# mkdir /root/.kube

2, 在master节点做如下操作

[k8sworker001 ~]# scp /etc/kubernetes/admin.conf node1:/root/.kube/config

3, 在worker node节点验证

[root@k8smaster001 ~]# kubectl get nodes
NAME           STATUS     ROLES           AGE   VERSION
k8smaster001   Ready      control-plane   20d   v1.29.2
k8smaster002   Ready      control-plane   20d   v1.29.2
k8smaster003   Ready      control-plane   20d   v1.29.2
k8sworker001   Ready      <none>          20d   v1.29.2
k8sworker002   Ready      <none>          20d   v1.29.2

四、节点标签(label)

  • k8s集群如果由大量节点组成,可将节点打上对应的标签,然后通过标签进行筛选及查看,更好的进行资源对象的相关选择与匹配

4.1 查看节点标签信息

[root@k8smaster001 ~]# kubectl get node --show-labels
NAME           STATUS     ROLES           AGE   VERSION   LABELS
k8smaster001   Ready      control-plane   20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster001,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8smaster002   Ready      control-plane   20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster002,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8smaster003   Ready      control-plane   20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster003,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8sworker001   Ready      <none>          20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker001,kubernetes.io/os=linux
k8sworker002   Ready      <none>          20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker002,kubernetes.io/os=linux

4.2 设置节点标签信息

4.2.1 设置节点标签

为节点k8sworker001打一个env=dev 的标签

[root@k8smaster001 ~]# kubectl label node k8sworker001 env=dev
node/k8sworker001 labeled

4.2.2 查看所有节点标签

[root@k8smaster001 ~]# kubectl get node --show-labels
NAME           STATUS     ROLES           AGE   VERSION   LABELS
k8smaster001   NotReady   control-plane   20d   v1.29.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster001,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8smaster002   Ready      control-plane   20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster002,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8smaster003   Ready      control-plane   20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8smaster003,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8sworker001   Ready      <none>          20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,env=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker001,kubernetes.io/os=linux
k8sworker002   Ready      <none>          20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker002,kubernetes.io/os=linux

4.2.3 查看所有节点带 env 的标签

[root@k8smaster001 ~]# kubectl get nodes -L env
NAME           STATUS     ROLES           AGE   VERSION   ENV
k8smaster001   Ready      control-plane   20d   v1.29.2   
k8smaster002   Ready      control-plane   20d   v1.29.2   
k8smaster003   Ready      control-plane   20d   v1.29.2   
k8sworker001   Ready      <none>          20d   v1.29.2   dev
k8sworker002   Ready      <none>          20d   v1.29.2

4.3 多维度标签

4.3.1 设置多维度标签

也可以加其它的多维度标签,用于不同的需要区分的场景

如把k8sworker001标签为北京区,A机房,测试环境,游戏业务

[root@k8smaster001 ~]# kubectl label node k8sworker001 region=beijing zone=A env=dev bussiness=game
node/k8sworker001 labeled
[root@k8smaster001 ~]# kubectl get nodes k8sworker001 --show-labels
NAME           STATUS   ROLES    AGE   VERSION   LABELS
k8sworker001   Ready    <none>   20d   v1.29.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,bussiness=game,env=dev,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8sworker001,kubernetes.io/os=linux,region=beijing,zone=A

4.3.2 显示节点的相应标签

[root@k8smaster001 ~]# kubectl get nodes -L region,zone
NAME           STATUS     ROLES           AGE   VERSION   REGION   ZONE
k8smaster001   Ready      control-plane   20d   v1.29.2            
k8smaster002   Ready      control-plane   20d   v1.29.2            
k8smaster003   Ready      control-plane   20d   v1.29.2            
k8sworker001   Ready      <none>          20d   v1.29.2   beijing   A
k8sworker002   Ready      <none>          20d   v1.29.2  

4.3.3 查找region=beijing的节点

[root@k8smaster001 ~]# kubectl get nodes -l region=beijing
NAME           STATUS   ROLES    AGE   VERSION
k8sworker001   Ready    <none>   20d   v1.29.2

4.3.4 标签的修改

[root@k8smaster001 ~]# kubectl label node k8sworker001 region=beijing001 --overwrite=true
node/k8sworker001 labeled
加上--overwrite=true覆盖原标签的value进行修改操作
[root@k8smaster001 ~]# kubectl get nodes -L region
NAME           STATUS     ROLES           AGE   VERSION   REGION
k8smaster001   Ready      control-plane   20d   v1.29.2   
k8smaster002   Ready      control-plane   20d   v1.29.2   
k8smaster003   Ready      control-plane   20d   v1.29.2   
k8sworker001   Ready      <none>          20d   v1.29.2   beijing001
k8sworker002   Ready      <none>          20d   v1.29.2  

4.3.5 标签的删除

使用key加一个减号的写法来取消标签

[root@k8smaster001 ~]# kubectl label node k8sworker001 region-
node/k8sworker001 unlabeled

4.3.6 标签选择器

标签选择器主要有2类:

  • 等值关系: =, !=
  • 集合关系: KEY in {VALUE1, VALUE2......}
[root@k8smaster001 ~]# kubectl label node k8sworker001 env=test1 --overwrite
node/k8sworker001 labeled
[root@k8smaster001 ~]# kubectl label node k8sworker002 env=test2 --overwrite
node/k8sworker002 labeled
[root@k8smaster001 ~]# kubectl get node -l env=test1
NAME           STATUS   ROLES    AGE   VERSION
k8sworker001   Ready    <none>   20d   v1.29.2
[root@k8smaster001 ~]# kubectl get node -l "env in(test1,test2)"
NAME           STATUS   ROLES    AGE   VERSION
k8sworker001   Ready    <none>   20d   v1.29.2
k8sworker002   Ready    <none>   20d   v1.29.2