我在k8s中运行Jenkins,并且我已经用PVC挂载了/var/jenkins_home文件夹,现在我想挂载/var/jenkins_home/config.xml作为configmap,其他文件夹仍然用PVC挂载。
下面是我的yaml文件:volumeMounts:
- mountPath: /var/jenkins_home
name: jenkins-data
subPath: jenkins
- mountPath: /var/jenkins_home/config.xml
name: configxml
subPath: config.xml
volumes:
- name: jenkins-data
persistentVolumeClaim:
claimName: shdr-jenkins-k-test
- name: configxml
configMap:
name: jenkins-k-config
ites:
- key: jenkins-configfile
path: config.xml
当我打开jenkins时,它显示:
Also: java.nio.file.FileSystemException: /var/jenkins_home/atomic14997153162086721303tmp -> /var/jenkins_home/config.xml: Device or resource busy
at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixCopyFile.move(Unknown Source)
at java.base/sun.nio.fs.UnixFileSystemProvider.move(Unknown Source)
at java.base/java.nio.file.Files.move(Unknown Source)
at hudson.util.AtomicFileWriter.commit(AtomicFileWriter.java:194)
java.nio.file.FileSystemException: /var/jenkins_home/config.xml: Device or resource busy
简短回答
需要将jenkins-data
卷的挂载路径设置为/var/jenkins_home/jenkins
。这将正确配置subPath
功能。
详细说明如果我理解正确的话,你想达到的目的是:
- 您有一个名为
jenkins-k-config
的ConfigMap
。这包含一个单独的参数config.xml
,它的值是你的Jenkins配置的内容。 - 你想把这个
ConfigMap
挂载到Jenkins pod的/var/jenkins_home/
路径上,这样pod就可以使用/var/jenkins_home/config.xml
文件了。
你可以这样做:
- 您将更新您的pod规范以添加
ConfigMap
作为卷。 然后,您将添加一个
volumeMount
来将该ConfigMap
的内容挂载到pod容器中的指定挂载点。由于您的ConfigMap
只包含一个名为config.xml
的键,因此您无论如何都不必指定items
。简单地安装ConfigMap
就可以了。见下面的清单:
volumeMounts:
- mountPath: /var/jenkins_home/
name: configxml
subPath: config.xml
readOnly: true. #<==== Recommended, so config remains immutable.
volumes:
- name:configxml
configMap:
name: jenkins-k-config
我还注意到,当所有这些错误都被修复后,我们最终将有2个卷(jenkins-data, configxml)试图挂载到pod内相同的mountPoint
。这就是您看到device or resource busy
错误的原因,因为mountPoint已经很忙了,正在与jenkins-data
卷一起挂载。
可以将挂载点更改为/var/jenkins_home/jenkins
。这也将使您的subPath
变量生效,您将能够挂载两个卷。
jenkins-data
====>/var/jenkins_home/jenkins
和
config.xml
====>/var/jenkins_home/config.xml
.