书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》
一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:
当我们运行一个pod的时候,master会根据自己的算法来调度pod运行在哪个节点之上,具体是在哪个节点上,我们只有在pod被创建出来之后才知道。
给节点设置标签我们可以通过在每个节点上设置一些标签,然后指定pod运行在特定标签的节点上,就可动手动地指定pod运行在哪个节点之上。
标签的格式:key=value,key的值里可以包括符号“/”或者“.”,多个标签用逗号隔开。
步骤1:查看所有节点的标签。
##########实操验证##########
[root@vms10 pod]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
vms10.rhce.cc Ready control-plane,master 4d16h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/OS=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vms10.rhce.cc,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
vms11.rhce.cc Ready <none> 4d16h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vms11.rhce.cc,kubernetes.io/os=linux
vms12.rhce.cc Ready <none> 4d16h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vms12.rhce.cc,kubernetes.io/os=linux
[root@vms10 pod]#
步骤2:查看某特定节点的标签。
##########实操验证##########
[root@vms10 pod]# kubectl get nodes vms12.rhce.cc --show-labels
NAME STATUS ROLES AGE VERSION LABELS
vms12.rhce.cc Ready <none> 4d16h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vms12.rhce.cc,kubernetes.io/os=linux
[root@vms10 pod]#
给节点设置标签的语法如下。
kubectl label node 节点名 key=value
步骤3:给vms12节点设置一个标签diskxx=ssdxx。
##########实操验证##########
[root@vms10 pod]# kubectl label node vms12.rhce.cc diskxx=ssdxx
node/vms12.rhce.cc labeled
[root@vms10 pod]#
步骤4:查看标签是否生效。
##########实操验证##########
[root@vms10 pod]# kubectl get nodes vms12.rhce.cc --show-labels
NAME STATUS ROLES AGE VERSION LABELS
vms12.rhce.cc Ready <none> 4d16h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,diskxx=ssdxx,kubernetes.io/arch=amd64,kubernetes.io/hostname=vms12.rhce.cc,kubernetes.io/os=linux
[root@vms10 pod]#
如果要取消节点的某个标签,语法如下。
kubectl label node 节点名 key-
注意:在key后面加上-,-前面不要有空格。
步骤5:现在取消vms12的diskxx-ssdxx标签。
##########实操验证##########
[root@vms10 pod]# kubectl label node vms12.rhce.cc diskxx-
node/vms12.rhce.cc labeled
[root@vms10 pod]#
步骤6:再次查看vms12的标签。
##########实操验证##########
[root@vms10 pod]# kubectl get nodes vms12.rhce.cc --show-labels
NAME STATUS ROLES AGE VERSION LABELS
vms12.rhce.cc Ready <none> 4d16h v1.21.1 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=vms12.rhce.cc,kubernetes.io/os=linux
[root@vms10 pod]#
可以看到diskxx这个标签,已经不存在了。
如果要给所有的节点设置标签,语法如下。
kubectl label node --all key=value
这里有个特殊的标签,格式为node-role.kubernetes.io/名字。
这个标签是用于设置kubectl get nodes结果里ROLES那列值的,比如master节点上会显示control-plane和master,其他节点显示为<none>。
##########实操验证##########
[root@vms10 pod]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms10.rhce.cc Ready control-plane,master 4d16h v1.21.1
vms11.rhce.cc Ready <none> 4d16h v1.21.1
vms12.rhce.cc Ready <none> 4d16h v1.21.1
[root@vms10 pod]#
这里vms10上会显示control-plane和master,就是因为系统自动设置了标签node-role.kubernetes.io/control-plane和node-role.kubernetes.io/master,其中node-role.kubernetes.io后面的部分就是显示在ROLES下面的。
这个键有没有值都无所谓,如果不设置值的话,value部分直接使用""替代即可,假设现在把vms11 ROLES位置设置为worker1,vms12 Roles位置设置为worker2。
步骤7:给两台worker设置node-role.kubernetes.io标签,并把master上的control-plane给去掉。
##########实操验证##########
[root@vms10 pod]# kubectl label nodes vms11.rhce.cc node-role.kubernetes.io/worker1=""
node/vms11.rhce.cc labeled
[root@vms10 pod]# kubectl label nodes vms12.rhce.cc node-role.kubernetes.io/worker2=""
node/vms12.rhce.cc labeled
[root@vms10 pod]# kubectl label nodes vms10.rhce.cc node-role.kubernetes.io/control-plane-
node/vms10.rhce.cc labeled
[root@vms10 pod]#
步骤8:查看结果。
##########实操验证##########
[root@vms10 pod]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vms10.rhce.cc Ready master 4d16h v1.21.1
vms11.rhce.cc Ready worker1 4d16h v1.21.1
vms12.rhce.cc Ready worker2 4d16h v1.21.1
[root@vms10 pod]#
步骤9:如果要取消这个名字的话,和取消普通标签是一样的。
##########实操验证##########
[root@vms10 pod]# kubectl label nodes vms11.rhce.cc node-role.kubernetes.io/worker1-
node/vms11.rhce.cc labeled
[root@vms10 pod]# kubectl label nodes vms12.rhce.cc node-role.kubernetes.io/worker2-
node/vms12.rhce.cc labeled
[root@vms10 pod]#
步骤10:再次给vms12设置diskxx=ssdxx标签。
##########实操验证##########
[root@vms10 pod]# kubectl label node vms12.rhce.cc diskxx=ssdxx
node/vms12.rhce.cc labeled
[root@vms10 pod]#
5.6.2 创建在特定节点上运行的pod
在pod里通过nodeSelector可以让pod在含有特定标签的节点上运行。
创建新pod,让其在vms12节点上运行。
步骤1:创建pod所需的yaml文件podlabel.yaml,内容如下。
##########实操验证##########
[root@vms10 pod]# cat podlabel.yaml
apiVersion: v1
kind: Pod
metadata:
name: web1
labels:
role: myrole
spec:
nodeSelector:
diskxx: ssdxx
containers:
- name: web
image: nginx
imagePullPolicy: IfNotPresent
[root@vms10 pod]#
这样web1只会在含有标签为diskxx=ssdxx的节点上运行,如果有多个节点都含有标签diskxx=ssdxx的话,则k8s会在这几个节点中的一个节点运行。
请注意nodeSelector的缩进,是和containers同级的。
步骤2:创建pod。
##########实操验证##########
[root@vms10 pod]# kubectl apply -f podlabel.yaml
pod/web1 created
[root@vms10 pod]#
步骤3:查看pod运行的节点。
##########实操验证##########
[root@vms10 pod]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web1 1/1 Running 0 20s 10.244.14.7 vms12.rhce.cc <none> <none>
[root@vms10 pod]#
注意:如果在nodeSelector里指定了标签,但是不存在含有这个标签的节点,那么这个pod是创建不出来的,状态为Pending。
步骤4:自行删除此pod。
Annotations设置不管是node还是pod,包括后面讲述的其他对象(比如deployment),都还有一个属性Annotations,这个属性可以理解为注释。
步骤1:现在查看vms12.rhce.cc的Annotations属性。
##########实操验证##########
[root@vms10 pod]# kubectl describe nodes vms12.rhce.cc
Name: vms12.rhce.cc
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
diskxx=ssdxx
kubernetes.io/arch=amd64
kubernetes.io/hostname=vms12.rhce.cc
kubernetes.io/os=linux
Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 192.168.1.112/24
projectcalico.org/IPv4IPIPTunnelAddr: 10.244.14.0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Thu, 04 May 2023 18:00:12 0800
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: vms12.rhce.cc
AcquireTime: <unset>
RenewTime: Tue, 09 May 2023 10:47:08 0800
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Thu, 04 May 2023 18:37:17 0800 Thu, 04 May 2023 18:37:17 0800 CalicoIsUp Calico is running on this node
MemoryPressure False Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:12 0800 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:12 0800 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:12 0800 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:22 0800 KubeletReady kubelet is posting ready status
Addresses:
InternalIP: 192.168.1.112
Hostname: vms12.rhce.cc
Capacity:
cpu: 2
ephemeral-storage: 17394Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1867048Ki
pods: 110
Allocatable:
cpu: 2
ephemeral-storage: 16415037823
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1764648Ki
pods: 110
System Info:
Machine ID: 1762869d691248c982c3fe66d69ab0af
System UUID: D3E14D56-5794-9DE5-9134-C9421723F5C6
Boot ID: 975e18cb-751c-4889-afa7-641022e31174
Kernel Version: 3.10.0-693.el7.x86_64
OS Image: CentOS Linux 7 (Core)
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://23.0.5
Kubelet Version: v1.21.1
Kube-Proxy Version: v1.21.1
PodCIDR: 10.244.2.0/24
PodCIDRs: 10.244.2.0/24
Non-terminated Pods: (3 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system calico-kube-controllers-7cc8dd57d9-2rzpg 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4d16h
kube-system calico-node-jgj2s 250m (12%) 0 (0%) 0 (0%) 0 (0%) 4d16h
kube-system kube-proxy-tcjt6 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4d16h
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 250m (12%) 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>
[root@vms10 pod]#
步骤2:要设置此节点的Annotations,可以通过如下命令设置。
##########实操验证##########
[root@vms10 pod]# kubectl annotate nodes vms12.rhce.cc aa=123
node/vms12.rhce.cc annotated
[root@vms10 pod]#
步骤3:查看节点vms12.rhce.cc的属性。
##########实操验证##########
[root@vms10 pod]# kubectl describe nodes vms12.rhce.cc
Name: vms12.rhce.cc
Roles: <none>
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
diskxx=ssdxx
kubernetes.io/arch=amd64
kubernetes.io/hostname=vms12.rhce.cc
kubernetes.io/os=linux
Annotations: aa: 123
kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
projectcalico.org/IPv4Address: 192.168.1.112/24
projectcalico.org/IPv4IPIPTunnelAddr: 10.244.14.0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Thu, 04 May 2023 18:00:12 0800
Taints: <none>
Unschedulable: false
Lease:
HolderIdentity: vms12.rhce.cc
AcquireTime: <unset>
RenewTime: Tue, 09 May 2023 10:48:29 0800
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Thu, 04 May 2023 18:37:17 0800 Thu, 04 May 2023 18:37:17 0800 CalicoIsUp Calico is running on this node
MemoryPressure False Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:12 0800 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:12 0800 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:12 0800 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Tue, 09 May 2023 10:43:57 0800 Thu, 04 May 2023 18:00:22 0800 KubeletReady kubelet is posting ready status
Addresses:
InternalIP: 192.168.1.112
Hostname: vms12.rhce.cc
Capacity:
cpu: 2
ephemeral-storage: 17394Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1867048Ki
pods: 110
Allocatable:
cpu: 2
ephemeral-storage: 16415037823
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 1764648Ki
pods: 110
System Info:
Machine ID: 1762869d691248c982c3fe66d69ab0af
System UUID: D3E14D56-5794-9DE5-9134-C9421723F5C6
Boot ID: 975e18cb-751c-4889-afa7-641022e31174
Kernel Version: 3.10.0-693.el7.x86_64
OS Image: CentOS Linux 7 (Core)
Operating System: linux
Architecture: amd64
Container Runtime Version: docker://23.0.5
Kubelet Version: v1.21.1
Kube-Proxy Version: v1.21.1
PodCIDR: 10.244.2.0/24
PodCIDRs: 10.244.2.0/24
Non-terminated Pods: (3 in total)
Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits Age
--------- ---- ------------ ---------- --------------- ------------- ---
kube-system calico-kube-controllers-7cc8dd57d9-2rzpg 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4d16h
kube-system calico-node-jgj2s 250m (12%) 0 (0%) 0 (0%) 0 (0%) 4d16h
kube-system kube-proxy-tcjt6 0 (0%) 0 (0%) 0 (0%) 0 (0%) 4d16h
Allocated resources:
(Total limits may be over 100 percent, i.e., overcommitted.)
Resource Requests Limits
-------- -------- ------
cpu 250m (12%) 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>
[root@vms10 pod]#
步骤4:要是取消的话,用如下命令。
##########实操验证##########
[root@vms10 pod]# kubectl annotate nodes vms12.rhce.cc aa-
node/vms12.rhce.cc annotated
[root@vms10 pod]#
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved