为 Jenkins Agent 添加污点(Taint)容忍度(Toleration)

发布于:2025-04-03 ⋅ 阅读:(24) ⋅ 点赞:(0)

在 Kubernetes(k8s)环境中使用 Jenkins 时,为 Jenkins Agent 添加污点(Taint)容忍度(Toleration)是一种常见的配置操作,它允许 Jenkins Agent Pod 被调度到带有特定污点的节点上。下面为你详细介绍实现步骤及相关示例代码。

为什么要添加污点容忍度

Kubernetes 中的污点和容忍度机制用于控制 Pod 可以调度到哪些节点上。当节点被设置了污点后,默认情况下 Pod 是不能调度到该节点的。通过为 Jenkins Agent 添加容忍度,可以让 Agent Pod 无视节点上的某些污点,从而被调度到这些节点上,这样能更灵活地利用集群资源。

配置步骤

1. 检查节点的污点

首先,你需要查看节点上已经设置的污点。可以使用以下命令查看节点的污点信息:

kubectl describe nodes <node-name> | grep Taints

<node-name> 替换为你要查看的节点名称。

2. 在 Jenkins 中配置 Agent 的容忍度

在 Jenkins 的 Kubernetes 插件配置中,可以为 Agent 定义容忍度。以下是几种不同的配置方式:

方式一:在 Jenkins UI 中配置
  1. 打开 Jenkins 管理界面,进入“Manage Jenkins” -> “Configure Clouds”。
  2. 找到你的 Kubernetes 云配置,展开“Pod Templates”。
  3. 选择要配置的 Agent Pod Template,在“Tolerations”部分添加容忍度配置。你需要指定容忍的污点键(key)、效果(effect)和操作符(operator)等信息。
方式二:使用 YAML 配置

如果你使用 YAML 文件来定义 Jenkins Agent 的 Pod Template,可以在 YAML 文件中添加容忍度配置。以下是一个示例:

apiVersion: v1
kind: Pod
metadata:
  name: jenkins-agent
spec:
  containers:
    - name: jenkins-agent
      image: jenkins/inbound-agent:alpine
      command: ['/usr/bin/java', '-jar', '/agent.jar']
  tolerations:
    - key: "example-key"
      operator: "Equal"
      value: "example-value"
      effect: "NoSchedule"    

配置解释

  • key:要容忍的污点的键。例如,如果节点上的污点是 example-key=example-value:NoSchedule,那么这里的 key 就是 example-key
  • operator:操作符,有 EqualExists 两种。Equal 表示键和值都要匹配;Exists 表示只要存在该键的污点就容忍。
  • value:要容忍的污点的值。当 operatorEqual 时,需要指定该值。
  • effect:污点的效果,有 NoSchedulePreferNoScheduleNoExecute 三种。NoSchedule 表示 Pod 不会被调度到带有该污点的节点上;PreferNoSchedule 表示尽量不调度到带有该污点的节点,但不是强制的;NoExecute 表示如果 Pod 已经在节点上运行,会被驱逐。

也可以参考下面信息:
例如,在 Jenkins 的配置文件中(可能是 values.yaml 等用于 Helm 安装的配置文件),你可以将这个 YAML 模板添加到相应的位置来应用这个污点容忍度配置

jenkins:
  agent:
    podTemplate:
      yaml: |-
        apiVersion: v1
        kind: Pod
        spec:
          tolerations:
          - key: "node-role.kubernetes.io/jenkins"
            operator: "Exists"
            effect: "NoSchedule"

3. 应用配置

完成配置后,保存并应用配置。当 Jenkins 创建新的 Agent Pod 时,会根据配置的容忍度来调度 Pod 到合适的节点上。

通过以上步骤,你就可以为 Jenkins Agent 添加污点容忍度,使其能够在带有特定污点的节点上运行。