我已经在k8s上创建了jenkins的deployment,但是并没有持久化,现在怎么办?(当然想保留现在已经做了的配置啦)

要想完成上述问题,统共分几步:1.固定node;2.挂载固定node上的目录到pod;3.拷贝旧jenkins运行所需的文件到node中上一步中指定的目录中;

其中前两步我理解是通用的持久化步骤,第三步是针对我当前场景的特殊操作。

因为我想要保留当前jenkins的已有配置,所以我需要拷贝当前jenkins的所有文件到docker外,其中涉及到两个目录,一个是/var/jenkins-home,一个是/usr/share/jenkins,前一个目录是jenkins官方镜像中默认的安装目录,后一个是启动jenkins需要的jenkins.war文件,每次更新版本后这个jenkins.war都是需要更新的。

我将这两个目录从镜像里拷贝出来,按照当前node的目录空间,找了个相对空间较大点的目录,分别放置到了/run/jenkin-home和/run/jenkins-war目录;

然后就是修改yaml文件的步骤了如下图,红框部分是挂载步骤,黄框部分是指定node部分。

如此一来,每次jenkins的pod重新生成后,都会生成在node2上面,并且会使用/run/jenkins_home作为镜像中默认的安装目录/var/jenkins_home,使用/run/jenkins_home作为镜像中放置jenkins.war的目录/usr/share/jenkins。这样应该也会同时解决之前的一个问题,原因不详——过几天就会发现jenkins会回退到旧版本,我想应该可能是收到k8s的驱逐导致重新生成jenkins的pod所致吧。

执行命令更新pod:kubectl replace --force -f jenkins-deployment.yaml

还有个善后需要做:最新生成的jenkins竟然是无法使用之前的账户登录!于是编辑config.xml中的true参数改为false,重启pod后就可以匿名访问jenkins,发现版本竟然是很老很老的,而且之前的所有配置都不再能体现出来,还有很多错误提示。不用担心,从容地去插件中心改插件源地址为清华源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json, 然后选择自动更新jenkins版本,经过漫长地等待,就变成了最新版本,重启后就一切都美好了。在等待过程中你可以看到jenkins.war的目录中生成了tmp文件,完成后看到原来的jenkins.war变为了.bak文件,新下载了一个更新的jenkins.war文件。最后,为了提升插件中心的相应速度,记得要改回配置为jenkins中文社区的源:https://updates.jenkins-zh.cn/update-center.json

本次操作完成!

通过pvc来解决持久化的问题应该更普适,固定node,如果node宕机,那没法自愈。