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

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

为什么要添加污点容忍度

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

配置步骤

1. 检查节点的污点

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

bash 复制代码
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 文件中添加容忍度配置。以下是一个示例:

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 模板添加到相应的位置来应用这个污点容忍度配置

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 添加污点容忍度,使其能够在带有特定污点的节点上运行。

相关推荐
fiveym5 小时前
01 - iPXE + Clonezilla 网络装机原理解析
linux·运维·服务器·网络
虎头金猫5 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
反转180度6 小时前
Qt 6 + C++17 实现 SFTP 批量部署:工业设备运维工具实战解析
运维·c++·qt
雨辰AI7 小时前
RAG 知识库搭建:基于人大金仓构建信创运维问答机器人|全栈国产化落地完整版
运维·ai·机器人·ai编程
-今昭-7 小时前
Ansible
linux·运维·ansible
星野川崎2067 小时前
电商多店运维:云机长期挂机频繁掉线、账号无故风控原因剖析与解决方案
大数据·运维·云计算·电商
IT邦德9 小时前
Dify1.6基于ubuntu系统的部署实战
linux·运维·ubuntu
蓝速科技10 小时前
蓝速科技会议电子门牌规模化部署与运维成本实测
运维·科技
许彰午10 小时前
# allbytaskid——一个接口扛六个DataStore
运维·服务器·php
牛奶咖啡1310 小时前
AI助力运维——AIGC运维应用实践—Deepseek的介绍与本地部署选型
运维·人工智能·deepseek·deepseek能做什么·deepseek本地部署配置·本地部署选型避坑原则·本地部署的典型方案