• DevOps
  • K8s CRI 改用 Containerd 后,Devops 构建镜像时报错

koalawangyang 我用这种环境试了下,可以操作,有什么不同吗?

pipeline {
  agent {
    node {
      label 'maven'
    }

  }
  stages {
    stage('stage-rbzgp') {
      agent none
      steps {
        container('maven') {
          sh '''
            alias docker=podman
            docker ps
            podman ps
            '''
        }

      }
    }

  }
}

    chilianyi

    感谢大佬回复,我昨天做了一些测试,发现了更多信息,我在此列出,可能需要 KS 官方来修复。

    1. 检查了 CM  jenkins-casc-config 中的 jenkins.yaml 文件,其中 maven 标签的 image url 的确含有 podman,但是在往下看到这个 CM 中的 另外一个文件:jenkins_user.yaml ,该文件中的 maven 标签里的 image url 是不含 podman 的。猜测可这个有关。
    2. 在 node 上通过 crictl image ls 查看已有镜像,发现只有这么一个镜像:docker.io/kubesphere/builder-maven:v3.2.0,并不是用的含有 podman 的镜像。
    3. 在 node 上通过 crictl rmi docker.io/kubesphere/builder-maven:v3.2.0 来删除镜像,然后重新运行流水线,看是否会拉取含有 podman 的镜像。
    4. 重新运行流水线后,现象依旧,在 node 上查看删除的 builder-maven:v3.2.0 镜像又被拉下来了。
    5. 尝试修改 jenkins_user.yaml 文件中的 maven 标签里的 image url,修改为含有 podman 的镜像。
    6. 重新运行流水线后,现象依旧,node 上仍然使用的是不含 podman 的镜像。
    7. 检查 kubesphere-devops-system 名称空间中的 devops-jenkins Deployment,进入 /var/jenkins_home/cascconfigs/ 目录,确认存在 jenkins.yamljenkins_user.yaml 文件,并且jenkins_user.yaml是我修改后的CM 内容。
    8. 想到可能是没有重启该 Pod,重启 devops-jenkins Pod。
    9. 重新运行流水线后,报错变为下面这个,看提示是和权限有关,检查 node 上的镜像,发现拉取了带有 podman 的镜像,说明步骤 5 中的修改终于生效了。Error: mount /var/lib/containers/storage/overlay:/var/lib/containers/storage/overlay, flags: 0x1000: operation not permitted
    10. 仔细对比 CM 中的 jenkins.yamljenkins_user.yaml 文件,发现 jenkins.yaml 文件中的 maven 标签对应的privileged: true ,而 jenkins_user.yaml 文件中的 maven 标签对应的 privileged: false ,猜测和这个有关。
    11. 将其修改为 true 后,再次重启devops-jenkins Pod。
    12. 重新运行流水线后,镜像可以正常 build 了,最终流水线运行成功。

    上面的步骤是我排查的过程,大概的意思就是我升级了 k8s 到 v1.24,改用 containerd 作为 CRI ,同时升级了 Kubesphere 版本到 v3.3.1,之前的流水线运行失败,提示无法连接 docker daemon,问题根源是 devops jenkins 没有加载到正确的配置文件,从而没有使用含有 podman 标签的镜像,最终导致 docker 命令异常。

    而现在官网上的文档中使用的示例均以 docker 为例,而未来大家都升级 k8s 版本后,可能陆续会遇到我的这个问题,因此建议 KS 官方看看是否可以尽快修复该问题,谢谢。

      21 天 后

      chilianyi 大佬,jenkinsfile改成podman后连接harbor的443拒绝这个怎么解决呢

      chilianyi 大佬 我的解决了,我用腾讯云颁发的证书解决的,还有个问题想请教一下您,我在配置应用路由的时候项目获取不到网关地址,为啥呢如下图

      网关启用了

      应用路由网关地址获取不到

        lijq 您好,我看您这个是在 qingcloud 上部署的 QKE 吧。 可以提工单试一下。

        2 个月 后
        1 个月 后
        12 天 后

        yudong 请问,在kubesphere的流水线中创建的容器,比如:“nodejs”(image: “kubesphere/builder-nodejs:v3.2.0-podman”),怎么修改这个容器的registries.conf 配置以增加镜像加速的url?

          5 天 后

          yudong 你好,我遇到了与上面类似的问题,就是在使用KubeSphere流水线进行镜像构建时,需要依赖基础镜像 FROM openjdk:8-jdk ,实际运行时,会有一定概率 20%~30% 基础镜像拉取失败,查看日志发现是由于从docker官方镜像仓库拉取镜像超时导致的。因此我想是否可以修改podman的配置,使用国内的镜像加速服务。但是我发现podman是运行在Jenkins的agent / maven 的容器内的,而这个maven容器是动态创建的容器组中的实例,也就是说我进入maven的容器内修改了podman的配置,可以暂时使得修改后的配置生效,但是一旦容器销毁重建,修改后的配置就失效了,后续的构建还是会从docker官方仓库拉取镜像。不知道我的理解是否正确呢?

          如果我的理解正确,那么是否可以有什么办法在KubeSphere平台中通过修改devops-system或者devops-worker中的某个配置的方式,比如类似于修改 kubesphere-devops-worker的ConfigMap:ks-devops-agent 来修改maven的配置,添加国内的mirror的方式。 是否可以通过类似的方式永久的修改podman的配置呢?比如将podman的配置挂载到某个configmap,比如 configmap/ks-devops-agent 中呢?

            leixing1012

            我这边自己修改了一下,

            1 在项目 kubesphere-devops-worker 中修改 configmap/ks-devops-agent 添加数据

            键:PodmanSetting

            值:pomand配置文件,例如:

            unqualified-search-registries = ["docker.io"]
            
            [[registry]]
            prefix = "docker.io"
            location = "xxx.mirror.aliyuncs.com"
            insecure = true

            注意:xxx.mirror.aliyuncs.com要替换成自己的阿里云镜像加速地址

            2 在项目 kubesphere-devops-system 中修改 configmap/jenkins-casc-config,在要使用的agent的容器配置中修改数据挂载:

            		    containers:
                                - name: "maven"
                                  resources:
                                    requests:
                                      ephemeral-storage: "1Gi"
                                    limits:
                                      ephemeral-storage: "10Gi"
                                  volumeMounts:
                                  - name: config-volume
                                    mountPath: /opt/apache-maven-3.5.3/conf/settings.xml
                                    subPath: settings.xml
                                volumes:
                                  - name: config-volume
                                    configMap:
                                      name: ks-devops-agent
                                      items:
                                      - key: MavenSetting
                                        path: settings.xml
                                securityContext:
                                  fsGroup: 1000

            修改为:

                                containers:
                                - name: "maven"
                                  resources:
                                    requests:
                                      ephemeral-storage: "1Gi"
                                    limits:
                                      ephemeral-storage: "10Gi"
                                  volumeMounts:
                                  - name: config-volume
                                    mountPath: /opt/apache-maven-3.5.3/conf/settings.xml
                                    subPath: settings.xml
                                  - name: podman-config-volume
                                    mountPath: /etc/containers/registries.conf
                                    subPath: registries.conf                     
                                volumes:
                                  - name: config-volume
                                    configMap:
                                      name: ks-devops-agent
                                      items:
                                      - key: MavenSetting
                                        path: settings.xml
                                  - name: podman-config-volume
                                    configMap:
                                      name: ks-devops-agent
                                      items:
                                      - key: PodmanSetting
                                        path: registries.conf
                                securityContext:
                                  fsGroup: 1000

            也就是增加了

            volumeMounts:
            - name: podman-config-volume
              mountPath: /etc/containers/registries.conf
              subPath: registries.conf 

            volumes:
            - name: podman-config-volume
              configMap:
                name: ks-devops-agent
                items:
                - key: PodmanSetting
                  path: registries.conf

            jenkins-casc-config内有2个配置文件,我都进行了同样的修改,只改了maven,其他的agent根据需要可以做类似的改动,实测有效,挂载到configmap中的podman的配置确实生效了。

            3 个月 后