在 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 中配置
- 打开 Jenkins 管理界面,进入“Manage Jenkins” -> “Configure Clouds”。
- 找到你的 Kubernetes 云配置,展开“Pod Templates”。
- 选择要配置的 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
:操作符,有Equal
和Exists
两种。Equal
表示键和值都要匹配;Exists
表示只要存在该键的污点就容忍。value
:要容忍的污点的值。当operator
为Equal
时,需要指定该值。effect
:污点的效果,有NoSchedule
、PreferNoSchedule
和NoExecute
三种。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 添加污点容忍度,使其能够在带有特定污点的节点上运行。