튜토리얼: 오픈시프트에서 GitLab Runner Operator를 사용하여 rootless 컨테이너에서 Buildah 사용하기
이 튜토리얼은 오픈시프트 클러스터에서 GitLab Runner Operator를 사용하여 buildah
도구를 사용하여 이미지를 성공적으로 빌드하는 방법을 가르쳐줍니다.
이 가이드는 GitLab Runner Operator를 위한 rootless 오픈시프트 컨테이너에서 이미지 빌드하기 문서를 적용한 것입니다.
이 튜토리얼을 완료하려면 다음을 수행해야 합니다.
전제 조건
-
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 # rootless 실행 시 기본 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
-
러너(runner) 구성 템플릿을 사용하여 방금 생성한 서비스 계정을 사용하도록 Operator를 구성합니다. 다음을 포함하는
custom-config.toml
파일을 만듭니다:[[runners]] [runners.kubernetes] service_account_overwrite_allowed = "buildah-*"
-
custom-config.toml
파일에서ConfigMap
인custom-config-toml
을 생성합니다:oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runner
-
커스텀 리소스 정의(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
변수는 생성한 서비스 계정의 이름이어야 합니다.
축하합니다! 이제 rootless 컨테이너에서 Buildah를 사용하여 이미지를 성공적으로 빌드했습니다.
문제 해결
비루트로 실행할 경우 알려진 문제가 있습니다. OpenShift 러너를 사용 중이라면 작업 환경을 수행해야 할 수도 있습니다.