【问题标题】: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,但有以下限制:
- runner (openshift pod) 以具有高随机 uid 的用户身份运行(例如 234131111111)。
- runner pod 没有特权。
- 没有集群管理员权限,也没有重新配置运行器的能力。
所以显然 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,这会中断。
这是我在其中使用的配置:
- OpenShift 4.12
- 通过 OpenShift Cluster web 控制台/OperatorHub 安装的 RedHat 认证的 GitLab Runner Operator;它具有 gitlab-runner v 14.2.0
- 泊坞窗:20.10.16 & 泊坞窗:20.10.16-dind
参考文档:
- GitLab Runner Operator安装指南:https://cloud.redhat.com/blog/installing-the-gitlab-runner-the-openshift-way
- Runner配置细节:https://docs.gitlab.com/runner/install/operator.html和https://docs.gitlab.com/runner/configuration/configuring_runner_operator.html
- 和这个关于匹配管道和运行器设置的关键:https://docs.gitlab.com/ee/ci/docker/using_docker_build.html 这实际上是您在 gitlab .gitlab-ci.yml 管道定义和运行器配置 config.toml 文件中非常精确地遵循的设置。
安装步骤:
-
按照上面参考中的文档 1 和 2 在 OpenShift 中安装 Gitlab Runner Operator,但不要实例化来自操作员的 Runner
-
在您的 gitlab 服务器上,复制用于组范围或项目范围的跑步者注册的跑步者注册令牌
-
在安装了 oc CLI 的终端会话的其他地方,通过“oc”CLI 登录到 openshift 集群,例如具有 cluster:admin 或 system:admin 角色
-
创建一个 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
-
创建自定义配置映射;请注意,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
-
创建一个由操作员部署的 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
的
的