江小南
2022/10/23阅读:79主题:默认主题
【CKA、CKS篇】CKA真题解析——查看可用节点数量
真题解析
题目:
检查有多少 nodes 已准备就绪(不包括被打上 Taint: NoSchedule 的节点)。
并将数量写入 /opt/KUSC00402/kusc00402.txt。
考察点:
检查节点角色标签,状态属性,污点属性的使用
解析:
根据题目意思,需要找出已准备就绪的节点。这些节点中不能含有污点(Taint:NoSchedule)。并将数量写入到 /opt/KUSC00402/kusc00402.txt 中即可。
帮助文档:
https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/taint-and-toleration/

实际操作:
-
通过描述信息查看 Taint 属性
candidate@node01:~$ kubectl describe node | grep -i Taint
Taints: node-role.kubernetes.io/control-plane:NoSchedule
Taints: <none>
Taints: <none>
candidate@node01:~$
可以看到有2个节点不含有NoSchedule。
-
将数字写入文本
candidate@node01:~$ echo 2 > /opt/KUSC00402/kusc00402.txt
-
检查验证
candidate@node01:~$ cat /opt/KUSC00402/kusc00402.txt
2
candidate@node01:~$
将数字写入到了指定的文本中。
至此本道题目完成。
扩展
-
grep 命令
如果大家对 grep 命令使用熟练,可以一步完成操作。如下:
kubectl describe node | grep -i taint | grep -vc NoSchedul > /opt/KUSC00402/kusc00402.txt
参数说明:
参数 | 含义 |
---|---|
-i | 忽略大小写 |
-v | 排除在外 |
-c | 统计数目 |
-
污点(Taint)和容忍度(Toleration)概念
污点(Taint)是节点属性,它使节点能够排斥一类特定的 Pod 。
容忍度(Toleration)是应用于 Pod 上的。允许调度器调度带有对应污点的 Pod 。容忍度允许调度但并不保证调度。
污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。
-
污点(Taint)和容忍度(Toleration)实际应用
给节点增加一个污点
kubectl taint nodes node1 key1=value1:NoSchedule
移除节点的污点
kubectl taint nodes node1 key1=value1:NoSchedule-
为 Pod 设置容忍度
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
tolerations:
- key: "example-key"
operator: "Exists"
effect: "NoSchedule"
字段解释
一个容忍度和一个污点相"匹配"是指它们有一样的键名和效果。
operator 的默认值是 Equal。如果 operator 是 Equal ,需要指定 value ,且它们的 value 应该相等。如果 operator 是 Exists , 此时容忍度不能指定 value 。
effect 有 NoSchedule 、 NoExecute 和 PreferNoSchedule 等值。
-
NoSchedule 污点情况下,已在该节点上的 Pod 不受影响,对于后续的 Pod 如果不能容忍该污点,则不能被调度该节点上。
-
NoExecute 污点情况下,任何不能忍受这个污点的 Pod 都会马上被驱逐,相反的都不会被驱逐。 但是,如果 Pod 存在可选属性 tolerationSeconds 的值,则 Pod 还能继续在节点上运行的时间。如果在此之前上述污点被删除了,则 Pod 不会被驱逐。
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoExecute"
tolerationSeconds: 3600
-
PreferNoSchedule 是"优化"或"软"版本的 NoSchedule —— 系统会 尽量 避免将 Pod 调度到存在其不能容忍污点的节点上, 但这不是强制的。
总结
污点(Taint)是节点属性。容忍度(Toleration)是 Pod 的属性。
对于污点和容忍度,说的直观一些就是:节点上有污点,看 Pod 能不能忍受这个污点,能忍受就会被调度到该节点,不能忍受就不能被调度到该节点。
作者介绍