搜索

4.2.3.6. 配置 Jenkins Kubernetes 插件

download PDF

OpenShift Container Platform Jenkins 镜像包含预装的 Kubernetes 插件,支持使用 Kubernes 和 OpenShift Container Platform 在多个容器主机上动态置备 Jenkins 代理。

为了使用 Kubernetes 插件,OpenShift Container Platform 提供了适合用作 Jenkins 代理的五个镜像: BaseMavenNode.js 镜像。如需更多信息,请参阅 Jenkins 代理

注意

jenkins-slave-maven-* 和 jenkins-slave-nodejs-* 镜像在 v3.10 发行周期中被标记为已弃用。临时镜像仍会存在,因此用户可以将其应用程序迁移到较新的 jenkins-agent-maven-* 和 jenkins-agent-nodejs-* 镜像中。

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 Sync 插件,Jenkins 上的 Jenkins 镜像会在其正在运行的项目中搜索,或搜索在插件配置中特别列出的项目:

  • 将标签 role 设置为 jenkins-slave 的镜像流。
  • 将注解 role 设置为 jenkins-slave 的镜像流标签。
  • 将标签 role 设置为 jenkins-slave 的 ConfigMaps。

当找到具有适当标签的镜像流或带有适当注解的镜像流标签时,它会生成对应的 Kubernetes 插件配置,以便您可以将 Jenkins 任务分配在运行镜像流提供的容器镜像的 pod 中运行。

镜像流或镜像流标签的名称和镜像引用映射到 Kubernetes 插件 pod 模板中的名称和镜像字段。您可以通过使用 slave-label 键在镜像流或镜像流标签对象上设置注解,来控制 Kubernetes 插件 pod 模板的标签字段。否则,名称将用作标签。

当找到具有适当标签的 ConfigMap 时,它会假定 ConfigMap 的键值数据有效负载中的任何值都包含与 Jenkins 和 Kubernetes 插件 pod 模板的配置格式一致的 XML。使用 ConfigMaps 而非镜像流或镜像流标签时,需要注意的一个关键区别在于您可以控制 Kubernetes 插件 pod 模板的所有字段。

以下是 ConfigMap 示例:

kind: ConfigMap
apiVersion: v1
metadata:
  name: jenkins-agent
  labels:
    role: jenkins-slave
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>

启动后,OpenShift Sync 插件会监控 OpenShift Container Platform 的 API 服务器用于对 ImageStreamsImageStreamTagsConfigMaps 的更新,并调整 Kubernetes 插件的配置。

特别是将应用以下规则:

  • ConfigMapImageStreamImageStreamTag 中移除标签或注解会导致从 Kubernetes 插件配置中删除任何现有的 PodTemplate
  • 如果删除了这些对象,相应配置也会从 Kubernetes 插件中删除。
  • 以前,创建适当标记或注解的 ConfigMapImageStreamImageStreamTag 对象,或者在初始创建后添加标签,都会导致在 Kubernetes-plugin 配置中创建 PodTemplate
  • 对于使用 ConfigMap 表单的 PodTemplate,对 PodTemplateConfigMap 数据的更改将应用到 Kubernetes 插件配置中的 PodTemplate 设置,,并将覆盖在 ConfigMap 更改之间临时通过 Jenkins UI 对 PodTemplate 所做的任何更改。

要将容器镜像用作 Jenkins 代理,该镜像必须运行 slave 代理,作为入口点。有关此方面的更多详情,请参阅官方 Jenkins 文档

4.2.3.6.1. 权限注意事项

在以前的版本中,Pod 模板 XML 的 <serviceAccount> 元素是用于生成的 Pod 的 OpenShift Container Platform 服务账户。挂载到 Pod 的服务帐户凭证,以及与服务帐户关联的权限,控制允许从 Pod 针对 OpenShift Container Platform master 执行的操作。

考虑使用 OpenShift Container Platform Jenkins 镜像中运行的 Kubernetes 插件启动的用于 Pod 的服务帐户:

  • 如果您使用 OpenShift Container Platform 提供的 Jenkins 示例模板,则 jenkins 服务帐户将由运行 Jenkins 的项目的 edit 角色定义,且 master Jenkins Pod 已挂载了该服务帐户。
  • 注入 Jenkins 配置的两个默认 Maven 和 NodeJS Pod 模板也被设置为使用与 master 相同的服务帐户。
  • 由于镜像流标签(tag)具有所需标签或注解,其服务帐户被 OpenShift 的服务帐户设置为 master 的服务帐户,因此 OpenShift Sync 插件会自动发现任何 Pod 模板。
  • 对于其他方法,您可在 Jenkins 和 Kubernetes 插件中提供 Pod 模板定义,但必须明确指定要使用的服务帐户。
  • 其它方法包括 Jenkins 控制台、由 Kubernetes 插件提供的 podTemplate 管道 DSL,或标记其数据为 Pod 模板的 XML 配置的 ConfigMap。
  • 如果没有为服务帐户指定值,则将使用 default 服务帐户。
  • 确保所使用的任何服务帐户均具有 OpenShift Container Platform 中定义的必要权限、角色等,以操作您选择从 Pod 中操作的任何项目。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.