튜토리얼: OpenShift에서 GitLab Runner Operator를 사용한 루트리스 컨테이너에서 Buildah 사용하기
이 튜토리얼은 OpenShift 클러스터에서 GitLab Runner Operator를 사용하여 buildah
도구를 사용하여 이미지를 성공적으로 빌드하는 방법을 가르쳐줍니다.
이 가이드는 GitLab Runner Operator를 위한 루트리스 OpenShift 컨테이너에서 이미지를 빌드하는 방법 문서의 적응판입니다.
이 튜토리얼을 완료하려면 다음을 수행해야 합니다:
전제 조건
-
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
을 만듭니다.oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runner
-
Custom Resource Definition (CRD)
파일을 업데이트하여Runner
의config
속성을 설정합니다. 해당 값을 작성해Runner
을 설정합니다.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 러너를 사용 중이라면 대처 방법을 사용해야 할 수 있습니다.