2장. 이미지 관리
Image 서비스(glance)는 디스크 및 서버 이미지에 대한 검색, 등록 및 전달 서비스를 제공합니다. 서버 이미지를 복사하거나 스냅샷을 작성하고 저장할 수 있는 기능을 제공합니다. 저장된 이미지를 서버 운영 체제를 설치하고 개별적으로 서비스를 구성하는 것보다 새로운 서버를 빠르고 일관되게 위임하는 템플릿으로 사용할 수 있습니다.
2.1. 이미지 생성
RHEL(Red Hat Enterprise Linux) ISO 파일 또는 Windows ISO 파일을 사용하여 QCOW2 형식으로 RHOSP(Red Hat OpenStack Platform) 호환 이미지를 수동으로 생성합니다.
2.1.1. Red Hat OpenStack Platform에서 KVM 게스트 이미지 사용
준비된 RHEL KVM(커널 기반 가상 머신) 게스트 QCOW2 이미지를 사용할 수 있습니다.
이러한 이미지는 cloud-init
로 구성되며 SSH 키 프로비저닝이 올바르게 작동하려면 ec2-compatible 메타데이터 서비스를 활용해야 합니다.
준비된 Windows KVM 게스트 QCOW2 이미지를 사용할 수 없습니다.
KVM 게스트 이미지의 경우:
-
이미지의
root
계정은 비활성화되어 있지만sudo
액세스는cloud-user
라는 특수 사용자에게 부여됩니다. -
이 이미지에는
루트
암호가 설정되어 있지 않습니다.
루트
암호는 두 번째 필드에 !!
를 배치하여 /etc/shadow
에 잠겨 있습니다.
RHOSP 인스턴스의 경우 RHOSP 대시보드 또는 명령줄에서 ssh 키 쌍을 생성하고 해당 키 조합을 사용하여 인스턴스에 대한 SSH 공용 인증을 root로 수행합니다.
인스턴스가 시작되면 이 공개 키가 삽입됩니다. 그런 다음 키 쌍을 만들 때 다운로드한 개인 키를 사용하여 인증할 수 있습니다.
2.1.2. 사용자 지정 Red Hat Enterprise Linux 또는 Windows 이미지 만들기
사전 요구 사항
- 이미지를 생성할 Linux 호스트 머신입니다. 언더클라우드 또는 오버클라우드를 제외한 Linux 패키지를 설치하고 실행할 수 있는 머신일 수 있습니다.
advanced-virt 리포지토리가 활성화되어 있습니다.
$ sudo subscription-manager repos --enable=advanced-virt-for-rhel-8-x86_64-rpms
libvirt, virt-manager: 게스트 운영 체제를 생성하는 데 필요한 모든 패키지를 설치합니다.
$ sudo dnf module install -y virt
libguestfs 툴을 설치하여 가상 머신 이미지에 액세스하고 수정합니다.
$ sudo dnf install -y libguestfs-tools-c
- RHEL 9 또는 8 ISO 파일 또는 Windows ISO 파일. RHEL ISO 파일에 대한 자세한 내용은 RHEL 9.0 Binary DVD 또는 RHEL 8.6 Binary DVD 를 참조하십시오. Windows ISO 파일이 없는 경우 Microsoft Evaluation Center 에서 평가판 이미지를 다운로드합니다.
-
Kickstart
파일(RHEL만)을 변경하려면 텍스트 편집기입니다.
언더클라우드에 libguestfs-tools
패키지를 설치하는 경우 언더클라우드에서 tripleo_iscsid
서비스와 포트 충돌을 방지하기 위해 iscsid.socket
을 비활성화합니다.
$ sudo systemctl disable --now iscsid.socket
2.1.3. Red Hat Enterprise Linux 9 이미지 생성
Red Hat Enterprise Linux 9 ISO 파일을 사용하여 QCOW2 형식으로 RHOSP(Red Hat OpenStack Platform) 호환 이미지를 수동으로 생성합니다.
호스트 시스템에서 [root@host]#
을 사용하여 모든 명령을 실행해야 합니다.
절차
virt-install
을 사용하여 설치를 시작하십시오.[root@host]# qemu-img create -f qcow2 rhel9.qcow2 10G. [root@host]# virt-install --virt-type kvm --name rhel9 --ram 2048 \ --cdrom /var/lib/libvirt/images/rhel-9.0-x86_64-dvd.iso \ --disk rhel9.qcow2,format=qcow2 \ --network=bridge:virbr0 --graphics vnc,listen=127.0.0.1 \ --noautoconsole --os-type=linux --os-variant=rhel9.0
그러면 인스턴스가 시작되고 설치 프로세스가 시작됩니다.
참고인스턴스가 자동으로 시작되지 않으면
virt-viewer
명령을 실행하여 콘솔을 확인합니다.[root@host]# virt-viewer rhel9
인스턴스를 구성합니다.
- 초기 설치 관리자 부팅 메뉴에서 Install Red Hat Enterprise Linux 9 를 선택합니다.
- 적절한 Language 및 Cryostat 옵션을 선택합니다.
- 설치에서 사용하는 장치 유형에 대한 메시지가 표시되면 자동 감지된 설치 미디어를 선택합니다.
- 설치 대상 유형에 대한 메시지가 표시되면 로컬 표준 디스크 를 선택합니다. 기타 스토리지 옵션의 경우 파티션 자동 구성을 선택합니다.
- SSH 서버를 설치하는 기본 서버 설치를 선택합니다.
- 네트워크 및 호스트 이름의 경우 네트워크에 eth0 을 선택하고 장치의 호스트 이름을 선택합니다. 기본 호스트 이름은 localhost.localdomain 입니다.
Root Password 필드에 암호를 입력하고 Confirm 필드에 동일한 암호를 다시 입력합니다.
- 결과
- 설치 프로세스가 완료되고 Complete! 화면이 표시됩니다.
- 설치가 완료되면 인스턴스를 재부팅하고 root 사용자로 로그인합니다.
다음 값만 포함하도록
/etc/sysconfig/network-scripts/ifcfg-eth0
파일을 업데이트합니다.TYPE=Ethernet DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp NM_CONTROLLED=no
- 시스템을 재부팅합니다.
Content Delivery Network에 머신을 등록합니다.
# sudo subscription-manager register # sudo subscription-manager attach --pool=Valid-Pool-Number-123456 # sudo subscription-manager repos --enable=rhel-9-server-rpms
시스템을 업데이트합니다.
# dnf -y update
cloud-init
패키지를 설치합니다.# dnf install -y cloud-utils-growpart cloud-init
/etc/cloud/cloud.cfg
구성 파일을 편집하고cloud_init_modules
에서 다음을 추가합니다.- resolv-conf
resolv-conf
옵션은 인스턴스가 처음 부팅될 때resolv.conf
를 자동으로 구성합니다. 이 파일에는이름 서버
,도메인
및 기타 옵션과 같은 인스턴스와 관련된 정보가 포함되어 있습니다.EC2 메타데이터 서비스에 액세스하는 문제를 방지하려면
/etc/sysconfig/network
에 다음 행을 추가합니다.NOZEROCONF=yes
콘솔 메시지가 대시보드 및
nova console-log
출력의 로그 탭에 표시되도록 하려면/etc/default/grub
파일에 다음 부팅 옵션을 추가합니다.GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"
grub2-mkconfig
명령을 실행합니다.# grub2-mkconfig -o /boot/grub2/grub.cfg
출력은 다음과 같습니다.
Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-229.9.2.el9.x86_64 Found initrd image: /boot/initramfs-3.10.0-229.9.2.el9.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-121.el9.x86_64 Found initrd image: /boot/initramfs-3.10.0-121.el9.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-b82a3044fb384a3f9aeacf883474428b Found initrd image: /boot/initramfs-0-rescue-b82a3044fb384a3f9aeacf883474428b.img done
생성된 이미지에 이 인스턴스의 서브스크립션 세부 정보가 포함되지 않도록 인스턴스를 등록합니다.
# subscription-manager repos --disable=* # subscription-manager unregister # dnf clean all
인스턴스의 전원을 끕니다.
# poweroff
virt-sysprep
명령을 사용하여 문제 없이 인스턴스를 생성하는 데 사용할 수 있도록 이미지를 재설정하고 정리합니다.[root@host]# virt-sysprep -d rhel9
디스크 이미지 내의 사용 가능한 공간을 다시 호스트 내의 여유 공간으로 변환하여 이미지 크기를 줄입니다.
[root@host]# virt-sparsify --compress rhel9.qcow2 rhel9-cloud.qcow2
그러면 명령이 실행되는 위치에 새
rhel9-cloud.qcow2
파일이 생성됩니다.rhel9-cloud.qcow2
이미지 파일을 이미지 서비스에 업로드할 수 있습니다. 이 이미지를 RHOSP 배포에 업로드하는 방법에 대한 자세한 내용은 이미지 업로드를 참조하십시오.
2.1.4. Red Hat Enterprise Linux 8 이미지 생성
Red Hat Enterprise Linux 8 ISO 파일을 사용하여 QCOW2 형식으로 RHOSP(Red Hat OpenStack Platform) 호환 이미지를 수동으로 생성합니다.
호스트 시스템에서 [root@host]#
을 사용하여 모든 명령을 실행해야 합니다.
절차
virt-install
을 사용하여 설치를 시작하십시오.[root@host]# qemu-img create -f qcow2 rhel8.qcow2 10G [root@host]# virt-install --virt-type kvm --name rhel8 --ram 2048 \ --cdrom /var/lib/libvirt/images/RHEL-8.0.0--x86_64-dvd1.iso \ --disk rhel8.qcow2,format=qcow2 \ --network=bridge:virbr0 --graphics vnc,listen=127.0.0.1 \ --noautoconsole --os-type=linux --os-variant=rhel8.0
그러면 인스턴스가 시작되고 설치 프로세스가 시작됩니다.
참고인스턴스가 자동으로 시작되지 않으면
virt-viewer
명령을 실행하여 콘솔을 확인합니다.[root@host]# virt-viewer rhel8
인스턴스를 구성합니다.
초기 설치 프로그램 부팅 메뉴에서 Install or upgrade an existing system 을 선택하고 설치 프롬프트를 따릅니다. 기본값을 수락합니다.
디스크 설치 프로그램은 설치 전에 설치 미디어를 테스트하는 옵션을 제공합니다. 확인을 선택하여 테스트 또는 Skip 을 실행하여 테스트 없이 진행합니다.
- 적절한 Language 및 Cryostat 옵션을 선택합니다.
- 설치에서 사용하는 장치 유형에 대한 메시지가 표시되면 Basic Storage Devices 를 선택합니다.
-
장치의 호스트 이름을 선택합니다. 기본 호스트 이름은
localhost.localdomain
입니다. -
시간대 및
root
암호를 설정합니다. - 디스크 공간에 따라 설치하려는 옵션에서 설치 유형을 선택합니다.
- SSH 서버를 설치하는 기본 서버 설치를 선택합니다.
- 설치 프로세스가 완료되고 Congratulations가 완료되면 Red Hat Enterprise Linux 설치가 완전히 표시됩니다.
-
인스턴스를 재부팅하고
root
사용자로 로그인합니다. 다음 값만 포함하도록
/etc/sysconfig/network-scripts/ifcfg-eth0
파일을 업데이트합니다.TYPE=Ethernet DEVICE=eth0 ONBOOT=yes BOOTPROTO=dhcp NM_CONTROLLED=no
- 시스템을 재부팅합니다.
Content Delivery Network에 머신을 등록합니다.
# sudo subscription-manager register # sudo subscription-manager attach --pool=Valid-Pool-Number-123456 # sudo subscription-manager repos --enable=rhel-8-server-rpms
시스템을 업데이트합니다.
# dnf -y update
cloud-init
패키지를 설치합니다.# dnf install -y cloud-utils-growpart cloud-init
/etc/cloud/cloud.cfg
구성 파일을 편집하고cloud_init_modules
아래에 다음 콘텐츠를 추가합니다.- resolv-conf
resolv-conf
옵션은 인스턴스가 처음 부팅될 때resolv.conf
구성 파일을 자동으로 구성합니다. 이 파일에는 이름 서버 ,도메인
및 기타 옵션과
같은 인스턴스 관련 정보가 포함되어 있습니다.네트워크 문제를 방지하려면
/etc/udev/rules.d/75-persistent-net-generator.rules
:을 생성하십시오.# echo "#" > /etc/udev/rules.d/75-persistent-net-generator.rules
이렇게 하면
/etc/udev/rules.d/70-persistent-net.rules
파일이 생성되지 않습니다./etc/udev/rules.d/70-persistent-net.rules
가 생성되면 스냅샷에서 부팅할 때 네트워킹이 올바르게 작동하지 않을 수 있습니다. 네트워크 인터페이스는eth0
이 아니라eth1
로 생성되고 IP 주소가 할당되지 않습니다.EC2 메타데이터 서비스에 액세스하는 문제를 방지하려면
/etc/sysconfig/network
에 다음 행을 추가합니다.NOZEROCONF=yes
콘솔 메시지가 대시보드 및
nova console-log
출력의 로그 탭에 표시되도록 하려면/etc/grub.conf
파일에 다음 부팅 옵션을 추가합니다.console=tty0 console=ttyS0,115200n8
결과 이미지에 이 인스턴스에 대한 동일한 서브스크립션 세부 정보가 포함되지 않도록 가상 머신을 등록합니다.
# subscription-manager repos --disable=* # subscription-manager unregister # dnf clean all
인스턴스의 전원을 끕니다.
# poweroff
virt-sysprep
명령을 사용하여 문제 없이 인스턴스를 생성하는 데 사용할 수 있도록 이미지를 재설정하고 정리합니다.[root@host]# virt-sysprep -d rhel8
virt-sparsify
명령을 사용하여 이미지 크기를 줄입니다. 이 명령은 디스크 이미지 내의 사용 가능한 공간을 다시 변환하여 호스트 내의 사용 가능한 공간을 다시 변환합니다.[root@host]# virt-sparsify --compress rhel8.qcow2 rhel8-cloud.qcow2
이렇게 하면 명령이 실행되는 위치에 새
rhel8-cloud.qcow2
파일이 생성됩니다.참고인스턴스에 적용되는 플레이버의 디스크 공간에 따라 이미지를 기반으로 인스턴스 파티션의 크기를 수동으로 조정해야 합니다.
rhel8-cloud.qcow2
이미지 파일을 이미지 서비스에 업로드할 준비가 되었습니다. 이 이미지를 RHOSP 배포에 업로드하는 방법에 대한 자세한 내용은 이미지 업로드를 참조하십시오.
2.1.5. Windows 이미지 생성
Windows ISO 파일을 사용하여 QCOW2 형식으로 RHOSP(Red Hat OpenStack Platform) 호환 이미지를 수동으로 생성합니다.
호스트 시스템에서 [root@host]#
을 사용하여 모든 명령을 실행해야 합니다.
절차
virt-install
을 사용하여 설치를 시작하십시오.[root@host]# virt-install --name=<name> \ --disk size=<size> \ --cdrom=<path> \ --os-type=windows \ --network=bridge:virbr0 \ --graphics spice \ --ram=<ram>
virt-install
매개변수의 다음 값을 바꿉니다.- <name> true - Windows 인스턴스에 있는 이름입니다.
- <size> Cryostat- Cryostatdisk 크기(GB)입니다.
- Windows 설치 ISO 파일의 경로입니다.
<RAM>유지 관리 - 요청된 RAM 양(MB)입니다.
참고--os-type=windows
매개변수를 사용하면 시계가 Windows 게스트에 대해 올바르게 구성되어 있으며 Hyper-V 지원 기능을 활성화합니다. 이미지를 Image 서비스(glance)에 업로드하기 전에 이미지 메타데이터에서os_type=windows
를 설정해야 합니다.
virt-install
은 게스트 이미지를/var/lib/libvirt/images/
<name
> .qcow2
로 저장합니다. 게스트 이미지를 다른 곳에 유지하려면--disk
옵션의 매개변수를 변경합니다.--disk path=<filename>,size=<size>
<filename>을 인스턴스 이미지를 저장하는 파일 이름 및 선택적으로 해당 경로로 바꿉니다. 예를 들어
path=win8.qcow2,size=8
은 현재 작업 디렉터리에win8.qcow2
라는 8GB 파일을 생성합니다.작은 정보게스트가 자동으로 시작되지 않으면
virt-viewer
명령을 실행하여 콘솔을 확인합니다.[root@host]# virt-viewer <name>
Windows를 설치하는 방법에 대한 자세한 내용은 관련 Microsoft 설명서를 참조하십시오.
-
새로 설치된 Windows 시스템이 가상화된 하드웨어를 사용하도록 허용하려면 VirtIO 드라이버를 설치해야 할 수 있습니다. 이렇게 하려면 이미지를 Windows 인스턴스에 CD-ROM 드라이브로 연결하여 설치합니다.
virtio-win
패키지를 설치하려면 VirtIO ISO 이미지를 인스턴스에 추가하고 VirtIO 드라이버를 설치해야 합니다. 자세한 내용은 가상화 구성 및 관리 가이드에서 Windows 가상 머신용 KVM 반가상화 드라이버 설치를 참조하십시오. 구성을 완료하려면 Windows 시스템에서 Cloudbase-Init 를 다운로드하고 실행합니다. Cloudbase-Init 설치가 끝나면 Run Sysprep 및 Cryostat 확인란 을 선택합니다.
Sysprep
툴은 특정 Microsoft 서비스에서 사용하는 OS ID를 생성하여 게스트를 고유하게 만듭니다.중요Red Hat은 Cloudbase-Init에 대한 기술 지원을 제공하지 않습니다. 문제가 발생하면 Contact Cloudbase Solutions 를 참조하십시오.
Windows 시스템이 종료되면 < name>.qcow2
이미지 파일을 이미지 서비스에 업로드할 준비가 된 것입니다. 이 이미지를 RHOSP 배포에 업로드하는 방법에 대한 자세한 내용은 이미지 업로드를 참조하십시오.
2.1.5.1. 메타데이터 속성
Compute 서비스(nova)는 libosinfo
데이터를 사용하여 기본 장치 모델을 설정할 수 있도록 더 이상 지원되지 않습니다. 대신 다음 이미지 메타데이터 속성을 사용하여 인스턴스에 최적의 가상 하드웨어를 구성합니다.
-
os_distro
-
os_version
-
hw_cdrom_bus
-
hw_disk_bus
-
hw_scsi_model
-
hw_vif_model
-
hw_video_model
-
hypervisor_type
이러한 메타데이터 속성에 대한 자세한 내용은 이미지 구성 매개변수를 참조하십시오.
2.1.6. UEFI Secure Boot 용 이미지 생성
오버클라우드에 UEFI Secure Boot Compute 노드가 포함된 경우 클라우드 사용자가 Secure Boot 인스턴스를 시작하는 데 사용할 수 있는 Secure Boot 인스턴스 이미지를 생성할 수 있습니다.
프로세스
UEFI Secure Boot의 새 이미지를 생성합니다.
$ openstack image create --file <base_image_file> uefi_secure_boot_image
-
&
lt;base_image_file
>을 UEFI 및 GUID 파티션 테이블(GPT) 표준을 지원하고 EFI 시스템 파티션을 포함하는 이미지 파일로 바꿉니다.
-
&
기본 머신 유형이
q35
가 아닌 경우 시스템 유형을q35
로 설정합니다.$ openstack image set --property hw_machine_type=q35 uefi_secure_boot_image
UEFI Secure Boot 호스트에서 인스턴스를 예약하도록 지정합니다.
$ openstack image set \ --property hw_firmware_type=uefi \ --property os_secure_boot=required \ uefi_secure_boot_image