튜토리얼: GitLab Runner Operator를 사용하여 OpenShift에서 루트리스 컨테이너에서 Buildah 사용하기
이 튜토리얼에서는 GitLab Runner Operator를 사용하여 OpenShift 클러스터에서 GitLab Runner Operator를 사용하여
buildah
도구를 사용하여 이미지를 성공적으로 빌드하는 방법을 가르치겠습니다.
이 가이드는 GitLab Runner Operator를위한 루트리스 OpenShift 컨테이너에서 이미지를 빌드하는 데 사용되는 Buildah 문서를 적용한 것입니다.
이 튜토리얼을 완수하려면 다음을 수행해야합니다.
전제 조건
-
gitlab-runner
네임스페이스에 이미 배포 된 러너.
Buildah 이미지 구성
우리는 quay.io/buildah/stable:v1.23.1
이미지를 기반으로 사용자 정의 이미지를 준비하는 것부터 시작합니다.
-
Containerfile-buildah
파일을 생성합니다.cat > Containerfile-buildah <<EOF FROM quay.io/buildah/stable:v1.23.1 RUN touch /etc/subgid /etc/subuid \ && chmod g=u /etc/subgid /etc/subuid /etc/passwd \ && echo build:10000:65536 > /etc/subuid \ && echo build:10000:65536 > /etc/subgid # 루트리스 실행시 기본 runc가 작동하지 않으므로 chroot 사용 RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc # fuse가 작동하지 않으므로 VFS 사용 RUN mkdir -p /home/build/.config/containers \ && (echo '[storage]';echo 'driver = "vfs"') > /home/build/.config/containers/storage.conf # buildah 컨테이너는 `build` 사용자로 실행됩니다 USER build WORKDIR /home/build EOF
-
Buildah 이미지를 빌드하고 컨테이너 레지스트리에 푸시합니다. 이미지를 GitLab 컨테이너 레지스트리에 푸시해 봅시다.
docker build -f Containerfile-buildah -t registry.example.com/group/project/buildah:1.23.1 . docker push registry.example.com/group/project/buildah:1.23.1
서비스 계정 구성
이러한 단계의 경우 OpenShift 클러스터에 연결된 터미널에서 명령을 실행해야합니다.
-
다음 명령을 실행하여
buildah-sa
라는 서비스 계정을 생성합니다.oc create -f - <<EOF apiVersion: v1 kind: ServiceAccount metadata: name: buildah-sa namespace: gitlab-runner EOF
-
생성된 서비스 계정에
anyuid
SCC 권한을 부여합니다.oc adm policy add-scc-to-user anyuid -z buildah-sa -n gitlab-runner
-
러너 설정 템플릿을 사용하여 방금 생성한 서비스 계정을 사용하도록 Operator를 설정합니다. 다음을 포함하는
custom-config.toml
파일을 생성합니다.[[runners]] [runners.kubernetes] service_account_overwrite_allowed = "buildah-*"
-
custom-config.toml
파일에서ConfigMap
을 작성하여custom-config-toml
이라는 이름의ConfigMap
을 만듭니다.oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runner
-
Custom Resource Definition (CRD)
파일을 업데이트하여Runner
의config
속성을 설정합니다. 설치합니다.apiVersion: apps.gitlab.com/v1beta2 kind: Runner metadata: name: builah-runner spec: gitlabUrl: https://gitlab.example.com token: gitlab-runner-secret config: custom-config-toml
작업 구성
마지막 단계는 프로젝트에 GitLab CI/CD 구성 파일을 설정하여 빌드 한 이미지 및 구성 된 서비스 계정을 사용하는 것입니다.
build:
stage: build
image: registry.example.com/group/project/buildah:1.23.1
variables:
STORAGE_DRIVER: vfs
BUILDAH_FORMAT: docker
BUILDAH_ISOLATION: chroot
FQ_IMAGE_NAME: "$CI_REGISTRY_IMAGE/test"
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE: "buildah-sa"
before_script:
# GitLab 컨테이너 레지스트리에 로그인합니다.
- buildah login -u "$CI_REGISTRY_USER" --password $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- buildah images
- buildah build -t $FQ_IMAGE_NAME
- buildah images
- buildah push $FQ_IMAGE_NAME
작업은 image
키워드의 값으로 빌드 한 이미지를 사용해야합니다.
KUBERNETES_SERVICE_ACCOUNT_OVERWRITE
변수는 생성 한 서비스 계정의 이름을 가져야합니다.
축하합니다. 루트리스 컨테이너에서 Buildah를 사용하여 이미지를 성공적으로 빌드했습니다!
문제 해결
루트로 실행시에 관련된 알려진 문제가 있습니다. OpenShift 러너를 사용하는 경우 워크어라운드을 사용해야 할 수 있습니다.