튜토리얼: OpenShift의 GitLab Runner Operator로 rootless 컨테이너에서 Buildah 사용하기
튜토리얼: OpenShift의 GitLab Runner Operator로 rootless 컨테이너에서 Buildah 사용하기
GitLab Runner Operator를 사용해 배포된 GitLab Runner로 OpenShift 클러스터에서 buildah 도구를 이용해 이미지를 성공적으로 빌드하는 방법을 가르쳐 주는 튜토리얼이에요.
이 가이드는 rootless OpenShift 컨테이너에서 Buildah로 이미지 빌드하기 문서를 GitLab Runner Operator용으로 각색한 것이에요.
출처: 문서
본문
GitLab Runner Operator를 사용해 배포된 GitLab Runner로 OpenShift 클러스터에서 buildah 도구를 이용해 이미지를 성공적으로 빌드하는 방법을 가르쳐 주는 튜토리얼이에요.
이 튜토리얼을 완료하려면:
- Buildah 이미지를 구성하세요.
- 서비스 계정(service account)을 구성하세요.
- 작업을 구성하세요.
시작하기 전에
이 튜토리얼을 완료하기 전에 다음이 있는지 확인하세요.
- 이미
gitlab-runner네임스페이스에 배포된 러너.
Buildah 이미지 구성하기
quay.io/buildah/stable:v1.23.1 이미지를 기반으로 한 사용자 정의 이미지를 준비하는 것부터 시작할게요.
Containerfile-buildah파일을 만드세요.cat > Containerfile-buildah 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 # Use chroot because the default runc does not work when running rootless RUN echo "export BUILDAH_ISOLATION=chroot" >> /home/build/.bashrc # Use VFS because fuse does not work RUN mkdir -p /home/build/.config/containers \ && (echo '[storage]';echo 'driver = "vfs"') > /home/build/.config/containers/storage.conf # The buildah container will run as `build` user 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 - apiVersion: v1 kind: ServiceAccount metadata: name: buildah-sa namespace: gitlab-runner EOF- 생성된 서비스 계정에
anyuidSCC로 실행할 권한을 부여하세요.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- Custom Resource Definition(CRD) 파일을 업데이트해
Runner의config속성을 설정하세요.apiVersion: apps.gitlab.com/v1beta2 kind: Runner metadata: name: buildah-runner spec: gitlabUrl: https://gitlab.example.com token: gitlab-runner-secret config: custom-config-toml
작업 구성하기
마지막 단계는 프로젝트에 새 Buildah 이미지와 구성된 서비스 계정을 사용하는 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:
# Log in to the GitLab container registry
- 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로 이미지를 성공적으로 빌드했어요!
문제 해결
비루트(non-root)로 실행할 때 알려진 이슈가 있어요. OpenShift 러너를 사용한다면 해결 방법(workaround)을 사용해야 할 수 있어요.
더 알아보기
Buildah를 통해 여러 CPU 아키텍처용 이미지를 함께 빌드하려면 Buildah로 멀티플랫폼 이미지 빌드하기 문서를 함께 보시면 좋아요. 또한 Docker 데몬 없이 이미지를 빌드하는 다른 방법에 관해서는 Docker를 대체하는 방법 문서도 참고할 수 있답니다.