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)를 생성합니다.

입력을 다음과 같이 구성합니다(그림 2 참조).
- Registry URL:
REGISTRY_URL및YOURUSERNAME를 사용 중인 레지스트리와 사용자 이름으로 바꾸세요. - Volume name:
awesome-webserver - Cron:
*/2 * * * * - Preference:
rhel.9 - InstanceType:
u1.small

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

새로운 부팅 볼륨, 인스턴스 유형 u1 Small을 선택 하고 VM 생성을 진행할 수 있습니다.
몇 초 후 VM이 실행됩니다! 그림 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
서비스가 구축되면 Networking → Routes 그림 6에서 볼 수 있듯이 웹 서버에 연결하는 HTTP 경로를 만들 수 있습니다.

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

마무리
이 문서에서는 RHEL 이미지 모드 컨테이너를 구축하고 Red Hat OpenShift Virtualization을 사용하여 추가 도구나 수정 없이 몇 분 만에 배포하는 것이 얼마나 쉬운지 보여주었습니다. 또한, 이 과정을 자동화하여 여러 인스턴스와 다양한 하이퍼바이저, 클라우드 제공업체 또는 베어 메탈 인스턴스에 대한 대규모 배포를 지원할 수 있습니다.
Red Hat Enterprise Linux의 이미지 모드를 시작하고 가상 머신을 OpenShift Virtualization으로 가져오는 방법에 대해 자세히 알아보세요 .