在 podTemplate 中为 kubernetes-plugin 配置时未安装 hostPathVolume

Posted

技术标签:

【中文标题】在 podTemplate 中为 kubernetes-plugin 配置时未安装 hostPathVolume【英文标题】:hostPathVolume not mounting when configured in podTemplate for kubernetes-plugin 【发布时间】:2019-10-15 20:29:39 【问题描述】:

我一直在尝试在 Kubernetes 插件 podTemplate 中挂载 hostPathVolume,当 pod 通过 Jenkins master 启动时,路径永远不会挂载。

我在一个 5 节点集群中部署了 Openshift v3.10,它附带了 Jenkins (v 2.89.2) 模板和 Kubernetes 插件 (v 0.10) 已经可用。在我的项目中,我正在部署 jenkins-ephemeral 模板来测试管道构建的配置。当我的管道启动时,我的自定义 jenkins 代理 pod 会按照 Jenkins 主容器的预期启动,但我配置的 hostPathVolume 安装永远不会安装。我尝试了许多目录和文件,但无法挂载其中的任何一个。想知道它是否可能是权限,但詹金斯和我的 pod 日志没有显示与挂载目录或文件有关的任何错误或问题。我有一个这样配置的 ConfigMap(为简洁起见,省略了一些标签):

     apiVersion: v1
     metadata:
       name: jenkins-agent-test
     labels:
       role: jenkins-slave
     data:
       dino: |-
         <org.csanchez.jenkins.plugins.kubernetes.PodTemplate>
           <inheritFrom></inheritFrom>
           <name>dino</name>
           <label>dino</label>
           <serviceAccount>jenkins</serviceAccount>
           <nodeSelector></nodeSelector>
           <containers>
             <org.csanchez.jenkins.plugins.kubernetes.ContainerTemplate>
               <name>jnlp</name>
               <image>blah.blah.blah/deploy/jenkins-agent-test</image>
               ...
           </containers>
           <volumes>
             <hostPathVolume>
               <mountPath>/tmp/test</mountPath>
               <hostPath>/home/sysadmin/test</hostPath>
             </hostPathVolume>
           </volumes>
           ...
         </org.csanchez.jenkins.plugins.kubernetes.PodTemplate>

I expect the volume to be mounted in my pod. oc describe pod dino does not show the mounted volume and I logged into my pod and verified the path is not mounted.  Not sure what else to try or where to look.

【问题讨论】:

顺便说一句,所有其他 podTemplate 配置项都按我的预期显示在 pod 上。 【参考方案1】:

想通了。也许这会帮助别人。您必须为 hostPathVolumes 指定完整的包...

<volumes>
  <org.csanchez.jenkins.plugins.kubernetes.volumes.HostPathVolume>
     <mountPath>/tmp/test</mountPath>
     <hostPath>/home/sysadmin/test</hostPath>
  </org.csanchez.jenkins.plugins.kubernetes.volumes.HostPathVolume>
</volumes>

【讨论】:

以上是关于在 podTemplate 中为 kubernetes-plugin 配置时未安装 hostPathVolume的主要内容,如果未能解决你的问题,请参考以下文章

12.Jenkins进阶之分布式架构扩充知识(Kubernetes-plugin)实践讲解

在 Kubernetes Init 容器中为 Kubernetes 主容器创建环境变量

在 Kubernetes 中为 Statefulset 应用 HPA?

如何在 Kubernetes 中为容器设置 ulimit?

在 Kubernetes 中为 kubectl 创建用户

有没有办法在 kubernetes 部署(或 statefulset)中为每个 pod 创建一个持久卷?