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

书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:CKA备考实验 | 汇总_热爱编程的通信人的博客-CSDN博客


当我们运行一个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                     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                     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       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       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       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,其他节点显示为

##########实操验证##########
[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                     4d16h   v1.21.1
vms12.rhce.cc   Ready                     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              
[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:              
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:             
Unschedulable:      false
Lease:
  HolderIdentity:  vms12.rhce.cc
  AcquireTime:     
  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:              
[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:              
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:             
Unschedulable:      false
Lease:
  HolderIdentity:  vms12.rhce.cc
  AcquireTime:     
  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:              
[root@vms10 pod]# 

步骤4:要是取消的话,用如下命令。

##########实操验证##########
[root@vms10 pod]# kubectl annotate nodes vms12.rhce.cc aa-
node/vms12.rhce.cc annotated
[root@vms10 pod]# 
展开阅读全文

页面更新:2024-03-22

标签:位置   逗号   节点   这个名字   语法   属性   步骤   命令   标签   博客

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top