튜토리얼: OpenShift에서 GitLab Runner Operator와 함께 rootless 컨테이너에서 Buildah 사용하기
이 튜토리얼에서는 OpenShift 클러스터에서 GitLab Runner Operator를 사용하여 buildah
도구를 사용하여 이미지를 성공적으로 빌드하는 방법을 설명합니다.
이 가이드는 rootless 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 # 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
-
서비스 계정을 사용하도록 Operator를 구성하기 위해 러너 구성 템플릿을 사용합니다.
custom-config.toml
파일을 생성하고 다음 내용을 포함합니다:[[runners]] [runners.kubernetes] service_account_overwrite_allowed = "buildah-*"
-
custom-config.toml
파일에서custom-config-toml
이라는 이름의ConfigMap
을 생성합니다:oc create configmap custom-config-toml --from-file config.toml=custom-config.toml -n gitlab-runner
-
Runner
의config
속성을 업데이트하여 Custom Resource Definition (CRD) 파일을 설정합니다: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 러너를 사용하는 경우 우회 방법을 사용해야 할 수 있습니다.