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