调度 pod 到指定节点
模拟题目:
Task
按如下要求调度一个 pod: 名称:nginx-kusc00401 Image:nginx Node selector:disk=ssd
参考:
任务 --> 配置 Pods 和容器 --> 将pod分配给节点 kubernetes.io/zh-cn/docs/…
解答:
# 检查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
查看可用节点数量
步骤详解
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
从上述输出中,可以看到 node1, node2, 和 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:已准备就绪,无NoScheduletaint。node2:已准备就绪,无NoScheduletaint。node4:已准备就绪,无NoScheduletaint。
符合条件的节点数量为 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/…
解答:
ready 的数量 减去 noschedule 的数量为可用节点数
kubectl get nodes kubectl describe nodes | grep -i taints echo "结果" > /opt/KUSC00402/kusc00402.txt
创建多容器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
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