江小南

V1

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

【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/

实际操作

  1. 通过描述信息查看 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。

  1. 将数字写入文本
candidate@node01:~$ echo 2 > /opt/KUSC00402/kusc00402.txt
  1. 检查验证
candidate@node01:~$ cat /opt/KUSC00402/kusc00402.txt
2
candidate@node01:~$

将数字写入到了指定的文本中。

至此本道题目完成。

扩展

  1. grep 命令

如果大家对 grep 命令使用熟练,可以一步完成操作。如下:

kubectl describe node | grep -i taint | grep -vc NoSchedul > /opt/KUSC00402/kusc00402.txt

参数说明:

参数 含义
-i 忽略大小写
-v 排除在外
-c 统计数目
  1. 污点(Taint)和容忍度(Toleration)概念

污点(Taint)是节点属性,它使节点能够排斥一类特定的 Pod 。

容忍度(Toleration)是应用于 Pod 上的。允许调度器调度带有对应污点的 Pod 。容忍度允许调度但并不保证调度。

污点和容忍度(Toleration)相互配合,可以用来避免 Pod 被分配到不合适的节点上。 每个节点上都可以应用一个或多个污点,这表示对于那些不能容忍这些污点的 Pod, 是不会被该节点接受的。

  1. 污点(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 能不能忍受这个污点,能忍受就会被调度到该节点,不能忍受就不能被调度到该节点。

分类:

后端

标签:

云计算

作者介绍

江小南
V1