【问题标题】:Gitlab CI - Kubernetes executor on openshift - build an image with podman/makisu/buildah/kanikoGitlab CI - openshift 上的 Kubernetes 执行器 - 使用 podman/makisu/buildah/kaniko 构建图像
【发布时间】:2023-02-05 11:20:05
【问题描述】:

我正在使用配置了 kubernetes 执行程序的 gitlab-ci runner 执行 CI 作业,并且实际上在 openshift 上运行。我希望能够将 docker 图像构建到 dockerfiles,但有以下限制:

  1. runner (openshift pod) 以具有高随机 uid 的用户身份运行(例如 234131111111)。
  2. runner pod 没有特权。
  3. 没有集群管理员权限,也没有重新配置运行器的能力。

    所以显然 DinD 不能工作,因为它需要特殊的 docker 设备配置。 Podman、kaniko、buildah、buildkit 和 makisu 不适用于随机的非根用户且没有任何音量。 有什么建议么?

【问题讨论】:

    标签: docker openshift gitlab-ci-runner podman kaniko


    【解决方案1】:

    DinD (Docker-in-Docker) 确实在 OpenShift 4 gitlab runners 中工作……刚刚成功,那是……一场战斗!事实上,该解决方案对于其他地方版本的任何更改都非常脆弱。我刚刚尝试过将 docker:20.10.16 换成 docker:latest 或 docker:stable,这会中断。

    这是我在其中使用的配置:

    1. OpenShift 4.12
    2. 通过 OpenShift Cluster web 控制台/OperatorHub 安装的 RedHat 认证的 GitLab Runner Operator;它具有 gitlab-runner v 14.2.0
    3. 泊坞窗:20.10.16 & 泊坞窗:20.10.16-dind

      参考文档:

      1. GitLab Runner Operator安装指南:https://cloud.redhat.com/blog/installing-the-gitlab-runner-the-openshift-way
      2. Runner配置细节:https://docs.gitlab.com/runner/install/operator.htmlhttps://docs.gitlab.com/runner/configuration/configuring_runner_operator.html
      3. 和这个关于匹配管道和运行器设置的关键:https://docs.gitlab.com/ee/ci/docker/using_docker_build.html 这实际上是您在 gitlab .gitlab-ci.yml 管道定义和运行器配置 config.toml 文件中非常精确地遵循的设置。

        安装步骤:

        1. 按照上面参考中的文档 1 和 2 在 OpenShift 中安装 Gitlab Runner Operator,但不要实例化来自操作员的 Runner

        2. 在您的 gitlab 服务器上,复制用于组范围或项目范围的跑步者注册的跑步者注册令牌

        3. 在安装了 oc CLI 的终端会话的其他地方,通过“oc”CLI 登录到 openshift 集群,例如具有 cluster:admin 或 system:admin 角色

        4. 创建一个 OpenShift 秘密,例如:

          vi gitlab-runner-secret.yml

          apiVersion: v1
          kind: Secret
          metadata:
            name: gitlab-runner-secret
          type: Opaque
          stringData:
            runner-registration-token: myRegistrationTokenHere
          

          oc apply -f gitlab-runner-secret.yml

        5. 创建自定义配置映射;请注意,OpenShift 运算符将合并由 gitlab runner operator 本身生成的 config.toml 提供的内容;因此,我们只提供我们想要补充的字段(我们甚至不能覆盖现有的字段值):

          vi gitlab-runner-config-map.toml

              [[runners]]  
                [runners.kubernetes]
                host = ""
                tls_verify = false
                image = "alpine"
                privileged = true
                [[runners.kubernetes.volumes.empty_dir]]
                  name = "docker-certs"
                  mount_path = "/certs/client"
                  medium = "Memory"
          

          oc create configmap gitlab-runner-config-map --from-file config.toml=gitlab-runner-config-map.toml

        6. 创建一个由操作员部署的 Runner

          ​vi gitlab-runner.yml

              apiVersion: apps.gitlab.com/v1beta2
              kind: Runner
              metadata:
                name: gitlab-runner
              spec:
                gitlabUrl: https://gitlab.uliege.be/
                buildImage: alpine
                token: gitlab-runner-secret
                tags: openshift, docker
                config: gitlab-runner-config-map
          

          oc apply -f gitlab-runner.yml

    【讨论】:

      猜你喜欢
      • 2022-11-13
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多