OpenShift Virtualization에서 RHEL용 이미지 모드 빌드 및 배포

Red Hat Blog를 보다가 관심 가는 글이 보여서 AI번역+약간 교정해 보았습니다.
출처: https://developers.redhat.com/articles/2024/11/11/deploy-image-mode-rhel-openshift-virtualization

RHEL 9.4에서 기술 프리뷰 로 도입된 Red Hat Enterprise Linux(RHEL)용 이미지 모드는 컨테이너 이미지를 사용하여 운영 체제를 빌드, 배포 및 유지 관리하는 간소화된 방법을 제공합니다. 이 문서에서는 Red Hat OpenShift Virtualization 에서 RHEL 이미지 모드 웹 서버를 생성하고 배포하는 방법을 살펴보겠습니다  .

웹 서버를 구축하세요

 먼저, 다음 사용자 정의를 포함하는 Containerfile을 기반으로 Apache httpd 웹 서버 에 대한 액세스를 제공하는 RHEL 이미지를 빌드합니다  .

  • 암호가 redhat인 bootc-user
  • Apache httpd패키지가 설치
  • Apache httpd서비스가 활성화
  • 홈페이지에 서비스를 제공하는 사용자 정의 index.html 파일

최종 Containerfile은 다음과 같습니다.

FROM registry.redhat.io/rhel9/rhel-bootc:9.4
RUN dnf -y update && dnf -y install tmux mkpasswd
RUN pass=$(mkpasswd --method=SHA-512 --rounds=4096 redhat) && useradd -m -G wheel bootc-user -p $pass
RUN echo "%wheel        ALL=(ALL)       NOPASSWD: ALL" > /etc/sudoers.d/wheel-sudo
RUN dnf -y install httpd && \
    systemctl enable httpd && \
    mv /var/www /usr/share/www && \
    sed -ie 's,/var/www,/usr/share/www,' /etc/httpd/conf/httpd.conf
RUN echo "Welcome to the bootc-http instance!" > /usr/share/www/html/index.html
EXPOSE 80

이제 해야 할 일은 레지스트리에 로그인하는 것뿐입니다. 자체 호스팅 레지스트리나  quay.io 와 같은 공개 레지스트리를 사용할 수 있습니다 .

podman login $REGISTRY_URL

이제 Podman을 사용하여 이미지를 빌드하고 푸시할 수 있습니다.

podman build -t $REGISTRY_URL/$USERNAME/awesome-webserver:v1.0
podman push $REGISTRY_URL/$USERNAME/awesome-webserver:v1.0

이미지가 준비되면 다음 단계로 진행하여  bootc-image-builder를 사용하여 이미지를 KVM QCOW2 형식으로 변환할 수 있습니다 .

컨테이너 이미지를 QCOW2로 변환하세요

Red Hat OpenShift Virtualization은 QCOW2 이미지를 디스크 이미지 소스로 사용하여 가상 머신을 배포할 수 있습니다. 따라서 이전에 빌드한 이미지를 필요한 형식으로 변환합니다.

이 작업을 수행하려면 공식 Red Hat bootc-image-builder 이미지를 활용할 수 있습니다.

먼저, 최종 이미지가 저장될 output 폴더를 만듭니다  .

mkdir -p output

그런 다음 (권한이 있는 컨테이너로) 이미지 변환을 실행합니다.

sudo podman run \
   --rm \
   -it \
   --privileged \
   --pull=newer \
   --security-opt label=type:unconfined_t \
   -v $(pwd)/output:/output \
   -v /var/lib/containers/storage:/var/lib/containers/storage \
   registry.redhat.io/rhel9/bootc-image-builder:latest \
   --type qcow2 \
   $REGISTRY_URL/$USERNAME/awesome-webserver:v1.0

최종 이미지를 생성하는 데는 시간이 다소 걸리지만, 프로세스가 끝나면 다음 경로에 output/qcow2/disk.qcow2 이미지가 생성됩니다.

VM에 필요한 리소스를 만듭니다.

OpenShift Virtualization은 컨테이너 이미지를 소스로 사용하여 QCOW2 디스크를 가져오고 VM의 부팅 가능한 디스크로 변환하는 기능을 지원합니다. 이 단계에서는 이전 프로세스의 출력을 가져와 새 컨테이너 이미지에 임베드합니다. 그런 다음 이 이미지를 OpenShift Virtualization으로 가져와 새 VM을 생성하는 데 사용합니다.

FROM registry.access.redhat.com/ubi9/ubi-minimal:latest AS builder
ADD --chown=107:107 output/qcow2/disk.qcow2 /disk/
RUN chmod 0440 /disk/*
FROM scratch
COPY --from=builder /disk/* /disk/

보시다시피, 이 Containerfile이 하는 일은 OpenShift Virtualization이 가져오기를 위해 디스크 이미지를 예상하는 기본 디스크/경로에 QCOW2 이미지를 넣는 것뿐입니다.

평소와 같이 이번에는 전용 태그를 사용하여 이미지를 빌드하고 푸시합니다.

podman build -t $REGISTRY_URL/$USERNAME/awesome-webserver:v1.0-ocpv
podman push $REGISTRY_URL/$USERNAME/awesome-webserver:v1.0-ocpv

다음 단계에서 마법이 시작됩니다. 이미지를 가져오고 생성할 VM의 부팅 가능한 소스를 생성하는 데 필요한 작업을 구성하는 볼륨 리소스(그림 1)를 생성합니다.

OpenShift 가상화 카탈로그 탭 세부 정보, 상단에 볼륨 프로젝트 드롭다운 메뉴, 오른쪽 상단 모서리에 강조 표시된 볼륨 추가 버튼.
그림 1: OpenShift 대시보드에서 볼륨 추가를 클릭하여 볼륨 리소스를 만듭니다.

입력을 다음과 같이 구성합니다(그림 2 참조).

  • Registry URL: REGISTRY_URL 및 YOURUSERNAME를 사용 중인 레지스트리와 사용자 이름으로 바꾸세요.
  • Volume name: awesome-webserver
  • Cron: */2 * * * *
  • Preference: rhel.9
  • InstanceType: u1.small
이전 목록에 설명된 필드와 샘플 레지스트리 URL을 포함한 볼륨 세부 정보 추가 모달입니다.
그림 2: 볼륨 소스 및 대상 세부 정보 구성

몇 분 후에 볼륨 리소스가 OpenShift Virtualization 카탈로그에 나타나는 것을 확인할 수 있습니다(그림 3).

새 VirtualMachine 만들기 탭에는 방금 추가된 예제 볼륨 리소스가 나열됩니다.
그림 3: 새로운 볼륨 리소스가 OpenShift Virtualization 카탈로그에 추가되었습니다.

새로운 부팅 볼륨, 인스턴스 유형 u1 Small을 선택 하고 VM 생성을 진행할 수 있습니다.

몇 초 후 VM이 실행됩니다! 그림 4는 결과를 보여줍니다.

VirtualMachines 탭에 예제 가상 머신이 실행 중 상태로 나열되어 있습니다.
그림 4: 가상 머신이 성공적으로 생성되면 ‘실행 중’ 상태가 표시됩니다.

웹 서버 노출 및 테스트

이제 VM이 실행 중이므로 웹 서버에 액세스하여 인덱스 페이지를 제공하는지 확인해 보겠습니다.

그러려면 먼저 VM에 대한 서비스를 생성해야 합니다. Networking → Services 탭 에서 Create Service (그림 5)을 클릭하고 다음 YAML 정의를 붙여넣어 서비스가 VM 포드를 선택하고 서버가 수신 대기하는 포트 80을 노출하도록 합니다.

kind: Service
apiVersion: v1
metadata:
  name: http-server
  namespace: awesome-webserver
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    vm.kubevirt.io/name: my-awesome-webserver-vm
서비스 생성 아래에 YAML 코드 블록이 표시되고 그 아래에 파란색 생성 버튼이 있습니다.
그림 5: VM에 대한 서비스를 설정하기 위해 YAML 정의를 입력합니다.

서비스가 구축되면  Networking → Routes 그림 6에서 볼 수 있듯이 웹 서버에 연결하는 HTTP 경로를 만들 수 있습니다.

경로에서 사용자는 이름, 호스트 이름, 경로 이름, 서비스 및 대상 포트 필드를 입력하여 HTTP 경로를 구성할 수 있습니다.
그림 6: 웹 서버에 연결하기 위한 HTTP 경로를 만듭니다.

브라우저에서 경로를 생성할 때 입력한 URL로 이동하여 서버가 정상적으로 작동하는지 확인하세요. 그림 7과 같은 환영 메시지가 표시됩니다.

브라우저에 "bootc-http 인스턴스에 오신 것을 환영합니다!"라는 메시지가 표시됩니다.
그림 7: 웹 서버가 실행 중인지 확인하기 위해 경로 URL로 이동합니다.

마무리

이 문서에서는 RHEL 이미지 모드 컨테이너를 구축하고 Red Hat OpenShift Virtualization을 사용하여 추가 도구나 수정 없이 몇 분 만에 배포하는 것이 얼마나 쉬운지 보여주었습니다. 또한, 이 과정을 자동화하여 여러 인스턴스와 다양한 하이퍼바이저, 클라우드 제공업체 또는 베어 메탈 인스턴스에 대한 대규모 배포를 지원할 수 있습니다.

Red Hat Enterprise Linux의 이미지 모드를 시작하고 가상 머신을 OpenShift Virtualization으로 가져오는 방법에 대해 자세히 알아보세요 .

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You May Also Like