CKA备考实验 | 手动指定pod运行位置

CKA备考实验 | 手动指定pod运行位置

首页休闲益智Project Cat更新时间:2024-05-02

书籍来源:《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