备战CKA: 调度 pod 到指定节点|查看可用节点数量|创建多容器Pod

205 阅读3分钟

调度 pod 到指定节点

模拟题目:

Task

按如下要求调度一个 pod: 名称:nginx-kusc00401 Image:nginx Node selector:disk=ssd


参考:

任务 --> 配置 Pods 和容器 --> 将pod分配给节点 kubernetes.io/zh-cn/docs/…


解答:

image.png

# 检查pod是否存在 
kubectl get pod -A | grep nginx-kusc00401 
# 检查node标签是否存在 disk=ssd 
kubectl get nodes --show-labels | grep 'disk=ssd' 
# 如果没有ssd标签则手动设置一个 #
kubectl label nodes node01 disk=ssd
apiVersion: v1
kind: Pod
metadata:
  name: nginx-kusc00401
  labels:
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    disk: ssd
kubectl apply -f pod-disk-ssd.yaml

说明

Pod 配置

  • metadata 部分设置了 Pod 的名称 nginx-kusc00401
  • spec 部分设置了 nodeSelector,指定了节点标签 disk: ssd,确保 Pod 被调度到具有该标签的节点上。
  • containers 部分定义了一个名为 nginx 的容器,使用 nginx 镜像,并开放端口 80。

验证 Pod 状态

  • 查看 Pod 是否成功创建并运行:
kubectl get pods nginx-kusc00401
  • 查看 Pod 的详细信息:
kubectl describe pod nginx-kusc00401

检查:

kubectl get pod nginx-kusc00401 -o wide

image.png

查看可用节点数量

步骤详解

1. 获取所有节点的信息

首先,使用 kubectl 命令获取所有节点的信息:

kubectl get nodes

这将显示所有节点的基本信息,包括节点名称和状态。

2. 筛选出已准备就绪的节点

查看输出结果,筛选出状态为 Ready 的节点。例如:

NAME               STATUS   ROLES           AGE   VERSION
node1              Ready    <none>          1d    v1.21.5
node2              Ready    <none>          1d    v1.21.5
node3              NotReady <none>          1d    v1.21.5
node4              Ready    <none>          1d    v1.21.5

从上述输出中,可以看到 node1node2, 和 node4 是已准备就绪的节点。

3. 排除带有 NoSchedule taint 的节点

对于每个已准备就绪的节点,检查是否有 NoSchedule taint。例如,对于 node1

kubectl describe node node1

查找 Taints 部分,确认是否有 NoSchedule taint:

Taints:             node-role.kubernetes.io/master:NoSchedule

如果没有 NoSchedule taint,则该节点符合条件。例如:

Taints:             <none>

4. 统计符合条件的节点数量

手动统计符合条件的节点数量。例如:

  • node1:已准备就绪,无 NoSchedule taint。
  • node2:已准备就绪,无 NoSchedule taint。
  • node4:已准备就绪,无 NoSchedule taint。

符合条件的节点数量为 3。

5. 将数量写入指定文件

将统计的数量写入指定文件 /opt/KUSC00402/kusc00402.txt

sh
mkdir -p /opt/KUSC00402
echo "3" > /opt/KUSC00402/kusc00402.txt

示例

假设我们有以下节点列表:

kubectl get nodes

输出如下:

NAME               STATUS   ROLES           AGE   VERSION
node1              Ready    <none>          1d    v1.21.5
node2              Ready    <none>          1d    v1.21.5
node3              NotReady <none>          1d    v1.21.5
node4              Ready    <none>          1d    v1.21.5

检查每个节点的状态和 taint:

kubectl describe node node1

输出如下:

Name:               node1
Roles:              <none>
Taints:             <none>

同样检查 node2 和 node4

kubectl describe node node2

输出如下:

Name:               node2
Roles:              <none>
Taints:             <none>
kubectl describe node node4

输出如下:

Name:               node4
Roles:              <none>
Taints:             <none>

符合条件的节点数量为 3。

最终步骤

将数量写入指定文件:

sh
mkdir -p /opt/KUSC00402
echo "3" > /opt/KUSC00402/kusc00402.txt

这样就完成了手动检查和记录节点数量的操作。

模拟题目:

设置配置环境: [candidate@node-1] $ kubectl config use-context k8s

Task

检查有多少 nodes 已准备就绪(不包括被打上 Taint:NoSchedule 的节点), 并将数量写入 /opt/KUSC00402/kusc00402.txt


参考:

调试运行中的 Pod  使用 kubectl describe pod 命令获取 Pod 详情 kubernetes.io/zh-cn/docs/…


解答:

image.png ready 的数量 减去 noschedule 的数量为可用节点数

kubectl get nodes kubectl describe nodes | grep -i taints echo "结果" > /opt/KUSC00402/kusc00402.txt

image.png

创建多容器Pod

模拟题目:

设置配置环境: [candidate@node-1] $ kubectl config use-context k8s

Task

按如下要求调度一个Pod: 名称:kucc8 app containers: 2 container 名称/images:

  • nginx
  • consul

参考:

概念 --> 工作负载 --> Pod kubernetes.io/zh-cn/docs/…

解答:

考试的时候务必记住切换集群, 注意集群名称 kubectl config use-context k8s

image.png

vim pod-kucc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kucc8
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  - name: consul
    image: consul
    imagePullPolicy: IfNotPresent

应用文件

kubectl apply -f pod-kucc.yaml

检查:

kubectl get pod kucc8

image.png