在 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-agentimage: jenkins/inbound-agent:alpinecommand: ['/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: v1kind: Podspec:tolerations:- key: "node-role.kubernetes.io/jenkins"operator: "Exists"effect: "NoSchedule"
3. 應用配置
完成配置后,保存并應用配置。當 Jenkins 創建新的 Agent Pod 時,會根據配置的容忍度來調度 Pod 到合適的節點上。
通過以上步驟,你就可以為 Jenkins Agent 添加污點容忍度,使其能夠在帶有特定污點的節點上運行。