12.2.6. 配置 Jenkins Kubernetes 插件
OpenShift Container Platform Jenkins 镜像包含预装的 Kubernetes 插件,支持使用 Kubernes 和 OpenShift Container Platform 在多个容器主机上动态置备 Jenkins 代理。
为了使用 Kubernetes 插件,OpenShift Container Platform 提供了适合用作 Jenkins 代理的镜像,包括 Base、Maven 和 Node.js 镜像。
Maven 和 Node.js 代理镜像均会在 OpenShift Container Platform Jenkins 镜像的 Kubernetes 插件配置中自动配置为 Kubernetes Pod 模板镜像。该配置包含各个镜像的标签,可应用于 “Restrict where this project can be run” 设置下的任何 Jenkins 任务。如果应用了标签,任务将在运行相应代理镜像的 OpenShift Container Platform Pod 下运行。
Jenkins 镜像还为 Kubernetes 插件提供附加代理镜像的自动发现和自动配置。
使用 OpenShift Container Platform 同步插件时,Jenkins 启动上的 Jenkins 镜像会在运行的项目或插件配置中特别列出的项目中搜索以下内容:
-
将标签
role
设置为jenkins-agent
的镜像流。 -
将注解
role
设置为jenkins-agent
的镜像流标签。 -
将标签
role
设置为jenkins-agent
的配置映射。
当找到具有适当标签的镜像流或带有适当注解的镜像流标签时,它会生成对应的 Kubernetes 插件配置,以便您可以将 Jenkins 任务分配在运行镜像流提供的容器镜像的 pod 中运行。
镜像流或镜像流标签的名称和镜像引用映射到 Kubernetes 插件 pod 模板中的名称和镜像字段。您可以通过使用 agent-label
键在镜像流或镜像流标签对象上设置注解,来控制 Kubernetes 插件 pod 模板的标签字段。否则,名称将用作标签。
不要登录到 Jenkins 控制台,也不要修改 pod 模板配置。如果您在创建 pod 模板后这样做,且 OpenShift Container Platform Sync 插件检测到与镜像流或镜像流标签关联的镜像已更改,则该插件会替换 pod 模板并覆盖这些配置更改。您无法将新配置与现有配置合并。
如果您的配置需要更复杂的配置需求,请考虑配置映射方法。
当找到具有适当标签的配置映射时,它会假定配置映射的键值数据有效负载中的任何值均包含与 Jenkins 和 Kubernetes 插件 pod 模板的配置格式一致的 XML。使用配置映射而非镜像流或镜像流标签时,需要注意的一个关键区别在于,您可以控制 Kubernetes 插件 pod 模板的所有参数。
jenkins-agent
的配置映射示例
kind: ConfigMap apiVersion: v1 metadata: name: jenkins-agent labels: role: jenkins-agent data: template1: |- <org.csanchez.jenkins.plugins.kubernetes.PodTemplate> <inheritFrom></inheritFrom> <name>template1</name> <instanceCap>2147483647</instanceCap> <idleMinutes>0</idleMinutes> <label>template1</label> <serviceAccount>jenkins</serviceAccount> <nodeSelector></nodeSelector> <volumes/> <containers> <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> <name>jnlp</name> <image>openshift/jenkins-agent-maven-35-centos7:v3.10</image> <privileged>false</privileged> <alwaysPullImage>true</alwaysPullImage> <workingDir>/tmp</workingDir> <command></command> <args>${computer.jnlpmac} ${computer.name}</args> <ttyEnabled>false</ttyEnabled> <resourceRequestCpu></resourceRequestCpu> <resourceRequestMemory></resourceRequestMemory> <resourceLimitCpu></resourceLimitCpu> <resourceLimitMemory></resourceLimitMemory> <envVars/> </org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate> </containers> <envVars/> <annotations/> <imagePullSecrets/> <nodeProperties/> </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
如果您登录到 Jenkins 控制台并在创建 pod 模板后对 pod 模板配置进行进一步更改,且 OpenShift Container Platform Sync 插件检测到配置映射已更改,则该插件将替换 pod 模板并覆盖这些配置更改。您无法将新配置与现有配置合并。
不要登录到 Jenkins 控制台,也不要修改 pod 模板配置。如果您在创建 pod 模板后这样做,且 OpenShift Container Platform Sync 插件检测到与镜像流或镜像流标签关联的镜像已更改,则该插件会替换 pod 模板并覆盖这些配置更改。您无法将新配置与现有配置合并。
如果您的配置需要更复杂的配置需求,请考虑配置映射方法。
安装后,OpenShift Container Platform Sync 插件会监控 OpenShift Container Platform 的 API 服务器,以获取对镜像流、镜像流标签和配置映射的更新,并调整 Kubernetes 插件的配置。
适用以下规则:
-
从配置映射、镜像流或镜像流标签中删除标签或注解会导致从 Kubernetes 插件配置中删除任何现有的
PodTemplate
。 - 如果删除了这些对象,相应配置也会从 Kubernetes 插件中删除。
-
无论是创建适当标记或注解的
ConfigMap
、ImageStream
或ImageStreamTag
对象,还是在最初创建后添加标签,都会导致在 Kubernetes-plugin 配置中创建PodTemplate
。 -
对于按照配置映射表单排布的
PodTemplate
,对PodTemplate
的配置映射数据的更改将应用于 Kubernetes 插件配置中的PodTemplate
设置,并在配置映射更改之间覆盖通过 Jenkins UI 对PodTemplate
所做的任何更改。
要将容器镜像用作 Jenkins 代理,镜像必须运行该代理作为入口点。有关此方面的更多详情,请参阅官方 Jenkins 文档。