可以改用 podman 来构建
K8s CRI 改用 Containerd 后,Devops 构建镜像时报错
chilianyi 您好 podman 流水线 怎么配置?是配置全局变量吗
configmap:jenkins-casc-config
里面 的 image 部分,加下 -podman 后缀,比如:“kubesphere/builder-maven:v3.2.0-podman”,
然后 等70s 自动生效后,同时 把 jenkinsfile 中 docker 改成 podman 命令,再运行流水线试试。
大佬,我现在环境里的 jenkins-casc-config CM 里就是带有 podman 的标签,jenkisfile 里面也把 docker 改为 podman 了,但是提示 podman 的命令不存在。。。。
该怎么办呢
koalawangyang 我用这种环境试了下,可以操作,有什么不同吗?
pipeline {
agent {
node {
label 'maven'
}
}
stages {
stage('stage-rbzgp') {
agent none
steps {
container('maven') {
sh '''
alias docker=podman
docker ps
podman ps
'''
}
}
}
}
}
感谢大佬回复,我昨天做了一些测试,发现了更多信息,我在此列出,可能需要 KS 官方来修复。
- 检查了 CM jenkins-casc-config 中的 jenkins.yaml 文件,其中 maven 标签的 image url 的确含有 podman,但是在往下看到这个 CM 中的 另外一个文件:jenkins_user.yaml ,该文件中的 maven 标签里的 image url 是不含 podman 的。猜测可这个有关。
- 在 node 上通过
crictl image ls
查看已有镜像,发现只有这么一个镜像:docker.io/kubesphere/builder-maven:v3.2.0
,并不是用的含有 podman 的镜像。 - 在 node 上通过
crictl rmi docker.io/kubesphere/builder-maven:v3.2.0
来删除镜像,然后重新运行流水线,看是否会拉取含有 podman 的镜像。 - 重新运行流水线后,现象依旧,在 node 上查看删除的
builder-maven:v3.2.0
镜像又被拉下来了。 - 尝试修改 jenkins_user.yaml 文件中的 maven 标签里的 image url,修改为含有 podman 的镜像。
- 重新运行流水线后,现象依旧,node 上仍然使用的是不含 podman 的镜像。
- 检查
kubesphere-devops-system
名称空间中的devops-jenkins
Deployment,进入/var/jenkins_home/cascconfigs/
目录,确认存在 jenkins.yaml 和 jenkins_user.yaml 文件,并且jenkins_user.yaml是我修改后的CM 内容。 - 想到可能是没有重启该 Pod,重启
devops-jenkins
Pod。 - 重新运行流水线后,报错变为下面这个,看提示是和权限有关,检查 node 上的镜像,发现拉取了带有 podman 的镜像,说明步骤 5 中的修改终于生效了。
Error: mount /var/lib/containers/storage/overlay:/var/lib/containers/storage/overlay, flags: 0x1000: operation not permitted
- 仔细对比 CM 中的 jenkins.yaml 和 jenkins_user.yaml 文件,发现 jenkins.yaml 文件中的 maven 标签对应的
privileged: true
,而 jenkins_user.yaml 文件中的 maven 标签对应的privileged: false
,猜测和这个有关。 - 将其修改为
true
后,再次重启devops-jenkins
Pod。 - 重新运行流水线后,镜像可以正常 build 了,最终流水线运行成功。
上面的步骤是我排查的过程,大概的意思就是我升级了 k8s 到 v1.24,改用 containerd 作为 CRI ,同时升级了 Kubesphere 版本到 v3.3.1,之前的流水线运行失败,提示无法连接 docker daemon,问题根源是 devops jenkins 没有加载到正确的配置文件,从而没有使用含有 podman 标签的镜像,最终导致 docker 命令异常。
而现在官网上的文档中使用的示例均以 docker 为例,而未来大家都升级 k8s 版本后,可能陆续会遇到我的这个问题,因此建议 KS 官方看看是否可以尽快修复该问题,谢谢。
koalawangyang 非常详细,应该是版本升级 + 切换 CRI 时,配置文件有问题
已经在 kubesphere 的 devops 上提交了 issue:kubesphere/ks-devops#900
会尽快安排排查和修复,再次感谢您的详细反馈。
大佬,您客气了,能帮到开源社区就好,多谢您的帮助~
koalawangyang 大佬 ,podman镜像里面的registries.conf文件在哪里配置的呢?想修改podman里面的镜像加速。
k8s-taye 有一个办法应该可以 就是根据 https://github.com/kubesphere/devops-agent/blob/master/base/podman/Dockerfile 自己构建镜像
不知道kubesphere有没有提供更加方便的方法
YyudongK零S
- 已编辑
k8s-taye 配置 registries.conf,参考下这个帖子:https://www.kubesphere.io/forum/d/9454-devops-podman
YyudongK零S
robin2023 哦哦,那 podman registries.conf 配置可以参考 https://blog.csdn.net/kiritow/article/details/113854996 ;