江小南

V1

2022/10/23阅读:33主题:默认主题

【CKA、CKS篇】CKA真题解析——调度 pod 到指定节点

真题解析

题目

按如下要求调度一个pod:

名称:nginx-kusc00401

Image:nginx

Node:selector: disk=ssd

考察点

nodeSelect 属性的使用

解析

  1. 根据题目意思,需要先确认名称为 nginx-kusc00401 的 pod 是否存在,如果没有需要创建,并且使用的镜像是 nginx 镜像。

  2. 将创建的 pod 调度到标有 disk=ssd 标签的节点上。

帮助文档

https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/

实际操作

  1. 检查
# 检查pod和节点标签
candidate@node01:~$ kubectl get pod -A | grep nginx-kusc00401
candidate@node01:~$
candidate@node01:~$ kubectl get node --show-labels | grep disk=ssd
node01     Ready    <none>          50d   v1.24.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disk=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node01,kubernetes.io/os=linux
candidate@node01:~$

通过检查发现Pod并不存在,需要创建。而含有 disk=ssd 标签的node已经存在,为node01。

  1. 创建pod
# pod-disk-ssd.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disk: ssd

拷贝官文案例,修改下 pod 名称和镜像,删除多余的部分即可。

注意:使用:set paste,防止 yaml 文件空格错序。

candidate@node01:~$ kubectl apply -f pod-disk-ssd.yaml
pod/nginx-kusc00401 created
candidate@node01:~$
  1. 检查验证
candidate@node01:~$ kubectl get pod nginx-kusc00401
NAME              READY   STATUS    RESTARTS   AGE
nginx-kusc00401   1/1     Running   0          17s
candidate@node01:~$ kubectl get pod nginx-kusc00401 -o wide
NAME              READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
nginx-kusc00401   1/1     Running   0          22s   10.244.196.172   node01   <none>           <none>
candidate@node01:~$

通过验证发现确实调度到了node01节点。

至此本道题目完成。

扩展

  1. 给节点添加标签
# kubectl label nodes <your-node-name> <your-label>
candidate@node01:~$ kubectl label nodes node02 project=app
node/node02 labeled
candidate@node01:~$
candidate@node01:~$ kubectl get node --show-labels | grep project=app
node02     Ready    <none>          50d   v1.24.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node02,kubernetes.io/os=linux,project=app
candidate@node01:~$
  1. 创建一个会被调度到特定节点上的 Pod
# foo-node.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  nodeName: node02 # 调度 Pod 到特定的节点
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
candidate@node01:~$ kubectl apply -f foo-node.yaml
pod/nginx created
candidate@node01:~$
candidate@node01:~$ kubectl get pod nginx -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          65s   10.244.140.110   node02   <none>           <none>
candidate@node01:~$

成功调度到了node02节点上。

这种是将pod调度到指定的节点上。上面题目中是将pod调度到指定标签的节点上,注意这两种区别。

分类:

后端

标签:

云计算

作者介绍

江小南
V1