16.11.4. 在 Pod 中添加容限


要为 pod 添加容限,请编辑 pod 规格使其包含 tolerations 部分:

使用 Equal 运算符的 pod 配置文件示例

tolerations:
- key: "key1" 1
  operator: "Equal" 2
  value: "value1" 3
  effect: "NoExecute" 4
  tolerationSeconds: 3600 5

1 2 3 4
容限参数,如 Taint 和 toleration 组件表中所述。
5
tolerationSeconds 参数指定 pod 在被驱除前可以保持与节点绑定的时长。请参阅以下 使用 Toleration seconds to Delay Pod 驱除

使用 Exists 运算符的 pod 配置文件示例

tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoExecute"
  tolerationSeconds: 3600

这两个容限都与 以上 oc adm taint 命令创建 的污点匹配。具有任一容限的 pod 可以调度到 node1

16.11.4.1. 使用 Toleration Seconds 延迟 Pod 驱除

您可以通过在 pod 规格中指定 tolerationSeconds 参数,指定 pod 在被驱除前可以保持与节点绑定的时长。如果将具有 NoExecute effect 的污点添加到某个节点,则所有不容许该污点的 pod 都被立即驱除(容许该污点的 pod 不会被驱除)。但是,如果要被驱除的 pod 具有 tolerationSeconds 参数,则只有该时限到期后 pod 才会被驱除。

例如:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
  tolerationSeconds: 3600

在这里,如果此 pod 正在运行但没有匹配的污点,pod 保持与节点绑定 3600 秒,然后被驱除。如果污点在这个时间之前移除,pod 就不会被驱除。

16.11.4.1.1. 为 Toleration second 设置默认值

此插件为 pod 设置默认的强制容限,以容忍 node.kubernetes.io/not-ready:NoExecutenode.kubernetes.io/unreachable:NoExecute 污点为五分钟。

如果用户提供的 pod 配置已具有任一容限,则不会添加默认值。

启用 Default Toleration seconds:

  1. 将 master 配置文件(/etc/origin/master/master-config.yaml)修改为将 DefaultTolerationSeconds 添加到 admissionConfig 部分:

    admissionConfig:
      pluginConfig:
        DefaultTolerationSeconds:
          configuration:
            kind: DefaultAdmissionConfig
            apiVersion: v1
            disable: false
  2. 重启 OpenShift 以使更改生效:

    # master-restart api
    # master-restart controllers
  3. 验证是否已添加默认值:

    1. 创建 pod:

      $ oc create -f </path/to/file>

      例如:

      $ oc create -f hello-pod.yaml
      pod "hello-pod" created
    2. 检查 pod 容限:

      $ oc describe pod <pod-name> |grep -i toleration

      例如:

      $ oc describe pod hello-pod |grep -i toleration
      Tolerations:    node.kubernetes.io/not-ready=:Exists:NoExecute for 300s
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.