k8s 学习记录 (六)_Pod 污点和容忍性详解

一、前言

在 Kubernetes 集群中,我们已经了解了节点亲和性和 Pod 亲和性,它们在 Pod 调度方面提供了很大的灵活性。今天,我们来探讨另外两个重要的概念 ——Pod 污点(Taints)和容忍性(Tolerations),它们同样在 Pod 的调度和节点资源分配中扮演着关键角色。

二、Pod 污点(Taints)

污点是应用在节点上的一种标记,它的作用是让节点拒绝接受某些 Pod 的调度,除非这些 Pod 明确表示可以容忍这些污点。可以将污点看作是节点对 Pod 的一种 “排斥规则”。

使用kubectl taint`命令来给节点添加污点。命令格式如下:

kubectl taint nodes <node-name> <taint-key>=<taint-value>:<taint-effect>

其中:

  • node-name:要添加污点的节点名称。
  • taint-key:污点的键,用于标识污点的类型。
  • taint-value:污点的值,与键一起构成污点的具体标识。
  • taint-effect:污点的效果,常见的有以下三种:
    • NoSchedule:表示 Pod 不能被调度到带有该污点的节点上,即使 Pod 已经在该节点上运行,也不会被重新调度到其他节点。
    • PreferNoSchedule:这是一种软限制,尽量避免将 Pod 调度到带有该污点的节点上,但如果没有其他合适的节点,还是会调度过去。
    • NoExecute:不仅 Pod 不能被调度到带有该污点的节点上,而且如果 Pod 正在该节点上运行,当污点被添加时,Pod 会根据其容忍性决定是否被驱逐。

例如,我们给名为node1的节点添加一个污点,使其不允许普通 Pod 调度:

kubectl taint nodes node1 dedicated=special-user:NoSchedule

这个命令表示node1节点被标记为仅供特定用户使用,普通 Pod 如果没有相应的容忍性,将无法被调度到该节点。

三、Pod 容忍性(Tolerations)

容忍性是 Pod 的一种属性,它允许 Pod 调度到带有特定污点的节点上。也就是说,容忍性是 Pod 对节点污点的一种 “免疫能力”。

在 Pod 的配置文件中定义容忍性,示例如下:

yaml

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  tolerations:
  - key: "dedicated"
    operator: "Equal"
    value: "special-user"
    effect: "NoSchedule"
  containers:
  - name: my-container
    image: nginx:1.14.2
    ports:
    - containerPort: 80

在上述配置中:

  • key:对应节点污点的键。
  • operator:用于指定匹配操作符,有Equal(表示值必须完全匹配)和Exists(表示只要存在该键的污点就匹配,忽略值)两种。
  • value:对应节点污点的值,当opera为Equal时需要指定。
  • effect:对应节点污点的效果,只有当 Pod 的容忍性中effect与节点污点的effect相匹配时,才会考虑容忍该污点。

如果一个 Pod 需要容忍多种污点,可以在=spec.tolerations字段中定义多个容忍项。

四、深入理解容忍性的应用场景

1. 独占节点资源:在集群中,某些节点可能配置了特殊的硬件资源,如 GPU。为了确保这些节点仅被特定的任务使用,可以给这些节点添加污点,然后让需要使用这些资源的 Pod 设置相应的容忍性,这样就实现了资源的独占。
2. 维护和升级节点:当需要对某个节点进行维护或升级时,可以给该节点添加` NoExecute` 类型的污点。此时,具有相应容忍性的 Pod 可以继续在该节点上运行,而没有容忍性的 Pod 会被驱逐,避免了服务中断。

五、总结

Pod 污点和容忍性是 Kubernetes 调度系统中非常重要的特性,它们通过节点和 Pod 之间的 “排斥” 与 “容忍” 机制,实现了更加精细的资源分配和调度控制。合理使用污点和容忍性,可以让集群的资源管理更加高效,确保不同类型的 Pod 能够在合适的节点上运行,提高整个集群的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值