들어가는 말

안녕하세요, 오픈소스컨설팅 Private Cloud Team 엔지니어 정진이입니다.

오픈스택에서 인스턴스를 생성하기 위해서는 오픈스택 Glance 를 통해 만들어진 이미지가 필요합니다. Glance는 디스크와 서버의 이미지를 발견하고, 등록하고 검색하는 기능을 제공하는 이미지 서비스입니다. Glance 서비스가 제공하는 이미지는 일반적으로 템플릿 형태로 저장되며, 새로운 인스턴스를 생성하는 데 사용됩니다. 여기서 이미지란 부팅이 가능한 운영체제가 저장된 가상 디스크를 포함하는 가상 머신 이미지를 의미합니다.

이제 오픈스택 Glance의 아키텍처를 살펴보고, 이미지를 생성하는 과정을 단계별로 설명하겠습니다.

1. Glance 아키텍처

OpenStack Glance Architecture
OpenStack Glance Architecture

오픈스택 이미지 서비스인 Glance는 클라이언트-서버 기반의 아키텍처를 가지고 있으며, 이를 통해 사용자는 REST API를 통해 서버에 수행을 요청할 수 있습니다.

Glance 아키텍처의 핵심 구성 요소 중 하나는 Glance 도메인 컨트롤러입니다. 이 컨트롤러는 내부 서버의 모든 동작을 관리하며, 내부 서버는 여러 레이어로 나뉘어 각 레이어가 특정 작업을 담당합니다. 주요 레이어로는 Registry Layer와 Database Abstraction Layer(DAL) 등이 있습니다.

Glance의 추가적인 주요 구성 요소로는 Auth, Notifier, Policy, Quota, Location, DB 등이 있습니다. Auth는 사용자가 Keystone을 통해 Glance API에 접근할 수 있도록 인증합니다. Notifier는 Glance에서 발생하는 이벤트를 다른 OpenStack 서비스에 알리는 역할을 합니다. 예를 들어, 이미지가 생성되거나 삭제될 때 이를 알리기 위해 사용됩니다. Policy는 사용자가 수행할 수 있는 작업을 결정하는 규칙을 정의합니다. Quota는 사용자나 프로젝트가 사용할 수 있는 리소스의 한계를 설정합니다. Location은 이미지 데이터가 저장 위치를 관리하며, Glance는 파일 시스템, Swift, Ceph 등 이미지 데이터의 실제 저장 위치를 추적합니다. DB는 Glance의 메타데이터를 저장하는 데 사용됩니다. 여기에는 이미지의 메타데이터, 사용자 정보, 정책 등 다양한 정보가 포함됩니다.

모든 파일(이미지 데이터) 작업은 glance_store 라이브러리를 통해 이루어집니다. 이 라이브러리는 외부 스토리지 백엔드와 로컬 파일 시스템과의 상호작용을 담당하며, 백엔드 저장소에 접근할 수 있 인터페이스를 제공합니다.

Glance 서비스는 중앙 데이터베이스(Glance DB)를 사용하며, 이 데이터베이스는 시스템의 모든 구성 요소와 공유됩니다. 기본적으로 SQL 기반의 데이터베이스가 사용되며, 일반적으로 MariaDB가 많이 사용됩니다.

이러한 구조를 통해 Glance는 이미지의 발견, 등록, 검색 등 다양한 기능을 효율적으로 제공할 수 있습니다.

2. 이미지와 인스턴스의 관계

오픈스택 이미지 서비스인 Glance는 컴퓨트 노드에서 실행되는 Nova 서비스에게 이미지를 제공하며, Nova 서비스는 이 이미지를 사용해 클라이언트에게 인스턴스를 제공합니다. Glance 서비스가 제공하는 이미지와 Nova 서비스에서 클라이언트가 사용하는 인스턴스의 관계는 다음과 같이 설명할 수 있습니다.

2.1 인스턴스 시작 전

디스크 이미지는 템플릿 형태로 저장되며, 이미지 서비스는 스토리지와 이미지 관리를 전체적으로 제어합니다. 인스턴스는 개별적인 가상 머신으로 컴퓨트 노드에서 실행되며, 컴퓨트 노드는 이러한 인스턴스를 관리합니다. 사용자는 Glance 서비스가 제공하는 동일한 이미지를 사용해 여러 개의 인스턴스를 생성할 수 있습니다. 생성된 인스턴스는 기본 이미지의 복사본이며, 인스턴스에서 수정된 내용은 기본 이미지에 영향을 미치지 않습니다. 또한 현재 실행 중인 인스턴스로부터 스냅샷을 생성하여 새로운 이미지를 만들 수 있으며, 이를 통해 다른 인스턴스를 생성할 수 있습니다.

실행 중인 인스턴스가 없는 기본 이미지 상태
실행 중인 인스턴스가 없는 기본 이미지 상태

인스턴스를 시작할 때 사용자는 Flavor를 선택해야 합니다. Flavor는 가상 리소스의 집합을 나타내며, 인스턴스의 vCPU 수, 사용 가능한 RAM 용량, 임시 디스크 크기를 정의합니다. 오픈스택은 미리 정의된 Flavor를 제공하며, 사용자가 새로운 Flavor를 생성하거나 기존의 Flavor를 수정할 수도 있습니다. 이미지 저장소(Image store)에는 미리 정의된 여러 운영체제의 이미지가 저장되어 있으며, 컴퓨트 노드는 사용 가능한 vCPU, 메모리, 로컬 디스크 공간을 포함하고 있습니다. 볼륨 저장소(Volume store)의 cinder-volume 서비스는 데이터 저장 공간으로서 미리 정의된 여러 볼륨을 포함하고 있습니다.

2.2 인스턴스가 시작될 때

이미지로부터 인스턴스 생성
이미지로부터 인스턴스 생성

인스턴스를 시작하기 전에 사용자는 이미지와 Flavor, 그리고 다른 필요한 옵션을 선택합니다. 이 예에서 선택된 Flavor는 루트 볼륨(vda), 추가된 임시 스토리지(vdb), 가상 디스크(cinder-volume, vdc)를 제공합니다. 기본 이미지는 이미지 저장소에서 컴퓨트 노드의 로컬 디스크로 복사됩니다. vda는 인스턴스가 접근하는 첫 번째 디스크로, 이미지 크기가 네트워크 상에서 복사되는 데이터보다 더 작다면 인스턴스는 더 빨리 시작됩니다. vdb는 인스턴스와 함께 생성되는 빈 공간의 임시 디스크로, 인스턴스가 삭제될 때 함께 삭제됩니다. vdc는 iSCSI를 사용하여 cinder-volume에 연결됩니다. 컴퓨트 노드가 vCPU와 메모리 리소스를 제공하면, 인스턴스는 루트 볼륨(vda)에서 부팅을 시작합니다. 인스턴스는 실행되면서 디스크 상의 데이터를 변경합니다.

인스턴스 종료 후 이미지와 볼륨의 최종 상태
인스턴스 종료 후 이미지와 볼륨의 최종 상태

인스턴스가 삭제될 때, 영구 볼륨(persistent volume)을 제외한 나머지는 모두 원래 상태로 복구됩니다. 즉 임시 스토리지는 삭제되고, 메모리와 vCPU는 다른 인스턴스가 사용할 수 있도록 해제됩니다. 이 모든 과정이 완료되어도 Glance 서비스의 이미지는 변경되지 않은 상태로 남아있습니다.

이와 같이 Glance 서비스는 Nova 서비스와 연계하여 사용자가 인스턴스를 효율적으로 관리하고 사용할 수 있도록 돕습니다. Glance 이미지는 템플릿 역할을 하며, Nova 서비스는 이를 기반으로 인스턴스를 생성하고 관리합니다.

3. 이미지 생성

오픈스택 이미지 서비스인 Glance가 필요로 하는 이미지를 생성하는 방법에는 여러 가지가 있습니다. 첫 번째 방법은 virt-builder 명령어와 같은 명령줄(CLI)을 사용해 수동으로 이미지를 생성하는 것입니다. 두 번째 방법은 Virtual Machine Manager로 알려진 virt-manager GUI 프로그램을 사용하는 것이며, 세 번째 방법은 오픈소스 이미지 생성 도구를 사용하는 것입니다.

오픈스택에서 인스턴스를 생성하기 위해서는 인스턴스의 기반이 되는 이미지가 필요합니다. 예를 들어, Rocky Linux 운영체제에서 실행되는 특정 애플리케이션(예: SSH, httpd)이 설치되어 있는 이미지가 필요할 수 있습니다.

이 글에서는 명령줄(CLI)과 GUI를 이용해서 이미지를 만드는 방법에 대해 알아보겠습니다.

3.1 사전 작업

3.1.1 필수 조건

리눅스 환경: 이 가이드는 리눅스 운영체제에서 실행됩니다. Rocky Linux, Ubuntu, RHEL 등의 리눅스 배포판이 설치된 환경이 필요합니다. 여기서는 Ubuntu 22.04 기반의 노드에서 Rocky 9을 이용한 Glance 이미지를 생성하는 방법을 설명하겠습니다.

3.1.2 시스템 업데이트

먼저, 시스템을 최신 상태로 업데이트합니다.

apt update -y

3.1.3 필수 패키지 설치

이미지 생성과 커스터마이징에 필요한 패키지들을 설치합니다.

apt install libvirt libvirt-clients libvirt-daemon-system qemu-kvm \
virt-builder virt-manager
systemctl start libvirtd
systemctl enable libvirtd
  • libvirt: 시스템에서 libvirt 데몬을 실행하고 관리하는 데 필요한 패키지입니다. libvirt는 가상화 프레임워크로, 다양한 가상화 기술(KVM, QEMU 등)을 지원합니다.
  • libvirt-clients: libvirt 클라이언트 도구를 제공하여, 사용자나 관리자가 libvirt를 사용하여 가상 머신을 관리할 수 있게 합니다.
  • libvirt-daemon-system: 시스템에서 libvirt 데몬을 실행하고 관리하는 데 필요한 서비스 파일과 설정을 포함합니다.
  • qemu-kvm: KVM을 사용하여 가상화를 제공하는 QEMU 패키지입니다.
  • virt-builder: 가상 머신 이미지를 빠르고 쉽게 생성하고 커스터마이징할 수 있는 명령줄 도구입니다.
  • virt-manager: 가상 머신을 관리하기 위한 GUI 애플리케이션입니다. 이를 사용하면 가상 머신을 쉽게 생성, 구성, 관리할 수 있습니다.

3.2 CLI를 이용한 이미지 생성

virt-builder 명령줄(CLI) 도구를 사용하여 이미지 생성하는 과정에 대해 설명하겠습니다. virt-builder는 OS 설치 과정을 생략하고 빠르게 이미지를 생성할 수 있는 도구입니다. 이는 미리 준비된 OS 템플릿을 사용하기 때문입니다. 이 템플릿은 최소 설치된 상태로 제공되며, 필요에 따라 커스터마이징할 수 있습니다.

3.2.1 OS 템플릿 목록 확인

virt-builder --list 명령어로 사용 가능한 가상 머신 OS 템플릿 목록을 출력합니다. 이 목록에서 사용할 템플릿을 선택할 수 있습니다.

# 저장 디렉터리 생성 및 이동
mkdir -p /playcecloud/data/cloudimages
cd /playcecloud/data/cloudimages

# OS 템플릿 목록 확인
virt-builder --list

# 게스트 OS의 설치 노트 확인
virt-builder --notes centosstream-9

virt-builder에서 제공하는 템플릿 중 Rocky Linux 9와 가장 유사한 CentOS Stream 9 템플릿을 사용하여 이미지를 생성하겠습니다.

3.2.2 이미지 생성 및 커스터마이징 설정

virt-builder를 사용하여 CentOS Stream 9 기반의 가상 머신 이미지를 생성하고 커스터마이징합니다. virt-builder는 미리 준비된 OS 템플릿을 다운로드하여 사용합니다. 이 템플릿들은 최소 설치된 상태로 제공되며, 필요에 따라 커스터마이징할 수 있습니다. 이를 통해 사용자는 OS 설치 과정을 생략하고 이미지를 생성할 수 있습니다.

virt-builder centosstream-9 \
--size 20G \
--format qcow2 \
--output centosstream-9.qcow2 \
--root-password password:P@ssw0rd \
--install vim-enhanced,openssh-server,httpd,cloud-init \
--run-command 'sed -i "s/^#PermitRootLogin.*/PermitRootLogin yes/" /etc/ssh/sshd_config' \
--run-command 'sed -i "s/^#PasswordAuthentication.*/PasswordAuthentication yes/" /etc/ssh/sshd_config' \
--run-command 'sed -i "s/^disable_root:.*/disable_root: false/" /etc/cloud/cloud.cfg' \
--run-command 'sed -i "s/^ssh_pwauth:.*/ssh_pwauth: true/" /etc/cloud/cloud.cfg'

각 옵션의 의미는 다음과 같습니다.

  • –size 20G: 생성할 가상 머신 디스크 이미지의 크기를 20GB로 설정합니다.
  • –format qcow2: 디스크 이미지의 포맷을 QCOW2로 설정합니다.
  • –output centosstream-9.qcow2: 생성될 디스크 이미지 파일의 이름을 설정합니다.
  • –root-password password:P@ssw0rd: 루트 사용자 계정의 비밀번호를 P@ssw0rd로 설정합니다.
  • –install vim-enhanced,openssh-server,httpd,cloud-init: 가상 머신에 설치할 패키지 목록을 지정합니다. 여기서는 vim, ssh, httpd, cloud-init 패키지를 설치합니다.
  • –run-command ‘sed -i “s/^#PermitRootLogin.*/PermitRootLogin yes/” /etc/ssh/sshd_config’: SSH 설정 파일에서 PermitRootLogin 설정을 yes로 변경하여 Root 로그인을 허용합니다.
  • –run-command ‘sed -i “s/^#PasswordAuthentication.*/PasswordAuthentication yes/” /etc/ssh/sshd_config’: SSH 설정 파일에서 PasswordAuthentication 설정을 yes로 변경하여 Password 인증을 허용합니다.
  • –run-command ‘sed -i “s/^disable_root:.*/disable_root: false/” /etc/cloud/cloud.cfg’: cloud-init 설정 파일에서 disable_root 설정을 false로 변경하여 Root 계정을 활성화합니다.
  • –run-command ‘sed -i “s/^ssh_pwauth:.*/ssh_pwauth: true/” /etc/cloud/cloud.cfg’: cloud-init 설정 파일에서 ssh_pwauth 설정을 true로 변경하여 SSH Password 인증을 허용합니다.

virt-builder 명령어는 다양한 옵션을 제공하여 이미지를 생성할 수 있습니다. 각 옵션은 가상 머신 이미지를 생성하고 커스터마이징하는 데 사용됩니다. 다음은 일부 옵션에 대한 설명입니다.

 virt-builder os-version
    [-o|--output DISKIMAGE] [--size SIZE] [--format raw|qcow2]
    [--arch ARCHITECTURE] [--attach ISOFILE]
    [--append-line FILE:LINE] [--chmod PERMISSIONS:FILE]
    [--chown UID:GID:PATH] [--commands-from-file FILENAME]
    [--copy SOURCE:DEST] [--copy-in LOCALPATH:REMOTEDIR]
    [--delete PATH] [--edit FILE:EXPR] [--firstboot SCRIPT]
    [--firstboot-command 'CMD+ARGS'] [--firstboot-install PKG,PKG..]
    [--hostname HOSTNAME] [--inject-blnsvr METHOD]
    [--inject-qemu-ga METHOD] [--inject-virtio-win METHOD]
    [--install PKG,PKG..] [--link TARGET:LINK[:LINK..]] [--mkdir DIR]
    [--move SOURCE:DEST] [--password USER:SELECTOR]
    [--root-password SELECTOR] [--run SCRIPT]
    [--run-command 'CMD+ARGS'] [--scrub FILE] [--sm-attach SELECTOR]
    [--sm-register] [--sm-remove] [--sm-unregister]
    [--ssh-inject USER[:SELECTOR]] [--tar-in TARFILE:REMOTEDIR]
    [--timezone TIMEZONE] [--touch FILE] [--truncate FILE]
    [--truncate-recursive PATH] [--uninstall PKG,PKG..] [--update]
    [--upload FILE:DEST] [--write FILE:CONTENT] [--no-logfile]
    [--password-crypto md5|sha256|sha512] [--no-selinux-relabel]
    [--selinux-relabel] [--sm-credentials SELECTOR]
  • -o | –output DISKIMAGE: 생성할 디스크 이미지 파일의 이름을 지정합니다.
  • –size SIZE: 생성할 디스크 이미지의 크기를 지정합니다.
  • –format raw | qcow2: 디스크 이미지의 포맷을 지정합니다.
  • –arch ARCHITECTURE: 가상 머신의 아키텍처를 지정합니다. 기본값은 호스트 OS의 아키텍처와 동일합니다.
  • –edit FILE:EXPR: 파일의 내용을 편집합니다. 예를 들어 설정 파일에서 특정 설정을 변경할 때 사용합니다.
  • –firstboot SCRIPT: 가상 머신이 처음 부팅될 때 실행할 스크립트를 지정합니다.
  • –firstboot-command ‘CMD+ARGS’: 가상 머신이 처음 부팅될 때 실행할 명령을 지정합니다.
  • –firstboot-install PKG,PKG..: 가상 머신이 처음 부팅될 때 설치할 패키지를 지정합니다.
  • –hostname HOSTNAME: 가상 머신의 호스트네임을 지정합니다.
  • –install PKG,PKG..: 가상 머신 이미지에 설치할 패키지를 지정합니다.
  • –password USER:SELECTOR: 특정 사용자 계정의 패스워드를 설정합니다.
  • –root-password SELECTOR: 루트 계정의 패스워드를 설정합니다.
  • –run SCRIPT: 스크립트를 실행합니다.
  • –run-command ‘CMD+ARGS’: 명령을 실행합니다.
  • –timezone TIMEZONE: 가상 머신의 타임존을 설정합니다.
  • –update: 가상 머신 이미지의 모든 패키지를 업데이트합니다.

더 자세한 정보는 Virt-builder Manual에서 확인할 수 있습니다.

3.2.3 OpenStack에 이미지 업로드

이미지를 생성한 후에는 OpenStack에 업로드합니다. 이미지 이름은 CentOS-Stream-9-20240710로 설정합니다.

# 가상환경 활성화
source /path/to/venv/bin/activate

# OpenStack 클라이언트 환경 스크립트 실행
source admin-openrc.sh

# OpenStack 이미지 업로드
openstack image create "CentOS-Stream-9-20240710" \
--file /playcecloud/data/cloudimages/centosstream-9.qcow2 \
--disk-format qcow2 --container-format bare \
--public

OpenStack에 이미지가 업로드되었는지 확인합니다.

openstack image list
+--------------------------------------+-----------------------------------+--------+
| ID                                   | Name                              | Status |
+--------------------------------------+-----------------------------------+--------+
| 40d5e810-a17c-47cd-8e46-33e592fcfcc3 | CentOS-Stream-9-20240710          | active | 
+--------------------------------------+-----------------------------------+--------+

이렇게 하면, 별도의 virt-install 가상 머신 생성 과정을 거치지 않고 바로 OpenStack에 이미지를 업로드할 수 있습니다.

3.3 GUI를 이용한 이미지 생성

3.3.1 가상 머신 생성

Step 1. virt-manager를 실행하여 GUI 기반의 가상 머신 관리 도구를 엽니다.

virt-manager

Step 2. File > New Virtual Machine을 선택합니다.

New Virtual Machine

Step 3. Local install media (ISO image or CDROM)을 선택하고 Forward를 클릭합니다.

Step 4. 다운로드한 Rocky Linux ISO 이미지를 지정합니다. Automatically detect from the installation media / source가 체크되어 있는지 확인한 후 Forward를 클릭합니다.

Step 5. 가상 머신에 할당할 메모리와 CPU를 지정합니다.
여기서는 Memory를 4096MiB, CPUs를 2로 설정한 후 Forward를 클릭합니다.

Step 6. 가상 머신을 위한 Disk image를 생성합니다. 크기를 20GiB로 설정하고 Forward를 클릭합니다.

Step 7. 가상 머신의 이름을 입력하고 네트워크를 설정합니다. Customize configuration before install을 체크하고 Finish를 클릭합니다.

Step 8. Boot Options 섹션에서 SATA CDROM 1을 첫 번째 부팅 장치로 설정하고, VirtIO Disk 1을 두 번째 부팅 장치로 설정합니다. Apply를 클릭한 후 Begins Installation 버튼을 클릭하여 설치를 시작합니다.

3.3.2 Rocky 9 설치

Step 1. Install Rocky Linux 9.4를 선택하여 설치를 시작합니다.

Step 2. 설치 언어를 선택하고 Continue를 클릭합니다.

Step 3. 설치 요약 화면에서 필요한 설정을 완료합니다.

Step 4. 설치할 디스크를 선택하고 Done을 클릭합니다.

Step 5. 루트 계정의 비밀번호를 설정하고 Allow root SSH login with password를 체크한 후 Done을 클릭합니다.

Step 6. 모든 설정을 완료한 후 Begin Installation을 클릭하여 설치를 시작합니다.

Step 7. 설치가 완료될 때까지 기다린 후 Reboot System을 클릭합니다.

Step 8. 시스템 재부팅 후 초기 설정 화면이 나타납니다. Start Setup을 클릭하여 초기 설정을 완료합니다.

Step 9. 모든 설정이 완료된 후 데스크탑 환경이 나타납니다.

이렇게 virt-manager를 사용하여 Rocky 9이 성공적으로 설치되었습니다. 다음으로, OpenStack 이미지 서비스를 위해 Rocky 9을 설정하고 커스터마이징하는 과정을 단계별로 설명하겠습니다.

3.3.3 이미지 설정

설치된 Rocky 9 데스크탑 환경에서 터미널을 열고 Root 계정으로 로그인합니다.

ACPI 서비스 설치

ACPI 서비스를 설치하고 활성화합니다. 이 서비스는 하이퍼바이저가 인스턴스를 재부팅하거나 종료할 수 있도록 합니다.

dnf install acpid
systemctl enable acpid

cloud-init 패키지 설치

인스턴스가 메타데이터 서비스와 상호 작용하기 위해 cloud-init 패키지를 설치합니다.

dnf install cloud-init

cloud-utils-growpart 패키지 설치

파티션 크기를 조정할 수 있도록 cloud-utils-growpart 패키지를 설치합니다.

dnf install cloud-utils-growpart

zeroconf 경로 비활성화

인스턴스가 메타데이터 서비스에 접근할 수 있도록 기본 zeroconf 경로를 비활성화해야 합니다.

echo "NOZEROCONF=yes" >> /etc/sysconfig/network

3.3.4 커스터마이징 설정

vim, ssh, http 설치

필요한 패키지인 vim, openssh-server, httpd를 설치합니다.

# 설치된 패키지 확인
rpm -q vim-enhanced openssh-server httpd

# 패키지 설치
dnf install -y vim-enhanced openssh-server httpd

SSH 설정 – Root 로그인과 Password 로그인 허용

이 설정은 인스턴스를 생성한 후 Root 계정에 쉽게 접근할 수 있도록 합니다.

SSH 설정 파일을 수정하여 Root 로그인과 Password 로그인을 허용합니다.

vi /etc/ssh/sshd_config
# 다음 내용을 추가 또는 변경합니다.
PermitRootLogin yes
PasswordAuthentication yes

cloud-init 설정 파일을 수정하여 Root 로그인과 Password 인증을 허용합니다.

vi /etc/cloud/cloud.cfg
# 다음 내용을 추가 또는 변경합니다.
disable_root: false
ssh_pwauth: true

cloud-init을 설치하면 처음 부팅 시 cloud-init 설정이 적용되므로, SSH 설정과 cloud-init 설정을 모두 변경해줘야 합니다.

주의: Root 로그인을 허용하는 것은 보안상 권장되지 않으며, 잠재적인 보안 위협을 증가시킬 수 있습니다. 대신, 일반 사용자 계정을 사용하고 필요할 때 sudo 명령어를 사용하는 것이 더 안전한 접근 방법입니다. Root 로그인을 꼭 사용해야 하는 상황이 아니라면, 이 설정을 신중하게 고려해야 합니다.

3.3.5 인스턴스 종료 및 후속 작업

인스턴스 종료

설정을 완료한 후 인스턴스를 종료합니다.

poweroff

MAC 주소 정보 제거

virt-sysprep 유틸리티를 사용하여 MAC 주소 참조를 제거하고 가상 머신 이미지를 정리합니다.

virt-sysprep -d rocky9

libvirt 도메인 정의 해제

이미지를 이미지 서비스에 업로드할 준비가 되면, libvirt에서 도메인 정의를 해제하여 가상 머신 이미지를 관리하지 않도록 설정합니다.

virsh undefine rocky9

이제 이미지는 OpenStack 이미지 서비스인 Glance에 업로드할 준비가 되었습니다.

3.4 OpenStack 이미지 생성

커스텀 이미지를 OpenStack에 등록합니다. 이미지 이름은 Rocky-9-20240710로 설정합니다.

# 가상환경 활성화
source /path/to/venv/bin/activate

# OpenStack 클라이언트 환경 스크립트 실행
source admin-openrc.sh

# OpenStack 이미지 생성
openstack image create "Rocky-9-20240710" \
--file /playcecloud/data/cloudimages/Rocky-9.4-x86_64-dvd.iso \
--disk-format qcow2 --container-format bare \
--public
  • openstack image create: OpenStack 클라이언트를 사용하여 새로운 이미지를 생성하는 명령어입니다.
  • “Rocky-9-20240710”: 생성할 이미지의 이름입니다. 이 이름은 OpenStack 내에서 이미지를 식별하는 데 사용됩니다.
  • –file /playcecloud/data/cloudimages/Rocky-9.4-x86_64-dvd.iso: 생성할 이미지 파일의 경로를 지정합니다.
  • –disk-format qcow2: 디스크 이미지의 형식을 지정합니다. qcow2는 QEMU Copy On Write 버전 2 이미지 포맷으로, 성능과 유연성을 제공하며 디스크 공간을 효율적으로 사용할 수 있게 해줍니다.
  • –container-format bare: 컨테이너 형식을 지정합니다. bare는 이미지 파일이 직접적으로 사용된다는 것을 의미합니다.
  • –public: 이미지를 공개적으로 사용할 수 있도록 설정합니다. 이 옵션을 사용하면 프로젝트 내의 모든 사용자가 이 이미지를 사용할 수 있게 됩니다.

현재 오픈스택에 등록된 이미지들의 목록과 상태를 확인합니다. 여기서 생성한 이미지 Rocky-9-20240710의 상태를 확인할 수 있습니다. 상태가 active로 표시되면 이미지가 성공적으로 생성된 것입니다.

openstack image list
+--------------------------------------+-----------------------------------+--------+
| ID                                   | Name                              | Status |
+--------------------------------------+-----------------------------------+--------+
| 9a5fc332-7daa-4d15-b31c-5bda8c9ad856 | Rocky-9-20240710                  | active |
+--------------------------------------+-----------------------------------+--------+

openstack image create 명령어는 다양한 옵션을 제공하여 이미지를 생성할 수 있습니다. 다음은 기본 디폴트 옵션을 기준으로 한 설명입니다.

openstack image create
    [--id <id>]
    [--container-format <container-format>]
    [--disk-format <disk-format>]
    [--min-disk <disk-gb>]
    [--min-ram <ram-mb>]
    [--file <file> | --volume <volume>]
    [--force]
    [--progress]
    [--sign-key-path <sign-key-path>]
    [--sign-cert-id <sign-cert-id>]
    [--protected | --unprotected]
    [--public | --private | --community | --shared]
    [--property <key=value>]
    [--tag <tag>]
    [--project <project>]
    [--import]
    [--project-domain <project-domain>]
    <image-name>
  • –id <id>: 이미지의 고유 ID를 지정합니다.
  • –container-format <container-format>: 이미지 컨테이너 형식을 지정합니다. 지원되는 옵션은 ami, ari, aki, bare, docker, ova, ovf이며, 기본 형식은 bare입니다.
  • –disk-format <disk-format>: 이미지 디스크 형식을 지정합니다. 지원되는 옵션은 ami, ari, aki, vhd, vmdk, raw, qcow2, vhdx, vdi, iso, ploop이며, 기본 형식은 raw입니다.
  • –min-disk <disk-gb>: 이미지를 부팅하는 데 필요한 최소 디스크 크기(GB)를 지정합니다.
  • –min-ram <ram-mb>: 이미지를 부팅하는 데 필요한 최소 RAM 크기(MB)를 지정합니다.
  • –file <file> | –volume <volume>: 업로드할 이미지 파일 경로 또는 볼륨을 지정합니다.
  • –force: 볼륨이 사용 중일 때 이미지 생성을 강제 수행합니다. 이 옵션은 –volume과 함께 사용해야 합니다.
  • –progress: 이미지 업로드 진행 상황을 표시합니다.
  • –sign-key-path <sign-key-path>: 지정된 개인 키를 사용하여 이미지를 서명합니다. 이 옵션은 –sign-cert-id와 함께 사용해야 합니다.
  • –sign-cert-id <sign-cert-id>: 키 관리자에서 인증서를 참조하는 UUID입니다. 서명 검증에 사용되며 –sign-key-path와 함께 사용해야 합니다.
  • –protected | –unprotected: 이미지를 삭제할 수 없도록 보호된 상태로 설정하거나 해제합니다.
  • –public | –private | –community | –shared: 이미지의 가시성을 설정합니다.
  • –property <key=value>: 이미지에 속성을 설정합니다.
  • –tag <tag>: 이미지에 태그를 설정합니다.
  • –project <project>: 이미지의 소유할 프로젝트를 설정합니다. 프로젝트 이름이나 ID를 사용할 수 있습니다.
  • –import: 직접 업로드 대신 glance 이미지 가져오기 작업을 수행합니다.
  • –project-domain <project-domain>: 프로젝트가 속한 도메인을 지정합니다.
  • <image-name>: 생성할 이미지의 이름을 지정합니다.

더 자세한 정보는 OpenStack Image Create Command에서 확인할 수 있습니다.

3.5 이미지 사용 확인

오픈스택 대시보드 서비스 Horizon을 통해 GUI로 Glance 이미지를 관리할 수 있습니다. Rocky-9 이미지 생성을 확인하고 이를 사용해 인스턴스를 생성하고 정상적으로 동작하는지 확인합니다.

3.5.1 이미지 생성 확인

프로젝트 > Compute > 이미지를 클릭하면 Rocky-9으로 생성된 이미지를 확인할 수 있습니다.

3.5.2 인스턴스 생성

  • 프로젝트 > Compute > 인스턴스를 선택합니다.
  • 인스턴스 시작 버튼을 클릭합니다.
  • 세부 정보 탭에서 다음 정보를 입력합니다.
    • 인스턴스 이름: 원하는 이름을 입력합니다 (예: Rocky-9-Test-Instance).
  • 소스 탭에서:
    • 부팅 소스Image로 선택합니다.
    • 이미지에서 Rocky-9-20240625 이미지를 선택합니다.
  • Flavor 탭에서 원하는 Flavor를 선택합니다.
  • 네트워크 탭에서 인스턴스를 연결할 네트워크를 선택합니다.
  • 보안 그룹 탭에서 인스턴스에 적용할 보안 그룹을 선택합니다.
    • SSH 접속이 가능하도록 22번 포트를 개방합니다.
    • HTTP 접속이 가능하도록 80번 포트를 개방합니다.
  • Key Pair 탭에서 SSH 키 페어를 선택하거나 새 키 페어를 생성합니다.
  • 필요한 추가 설정을 완료한 후 인스턴스 시작 버튼을 클릭합니다.

3.5.3 인스턴스에 접속

  • 인스턴스가 생성되고 상태가 Active로 변경되면, 생성된 인스턴스의 IP 주소를 확인합니다.
  • SSH를 사용하여 인스턴스에 접속합니다.
ssh root@<instance-ip>

이미지 생성 시 Root 로그인이 가능하도록 설정했으므로 Root 패스워드를 입력하면 인스턴스에 접속할 수 있습니다.

맺음말

이 글을 통해 오픈스택 Glance 아키텍처와 Rocky 9 커스텀 이미지를 생성하는 방법을 살펴보았습니다. 오픈스택 환경에서 효율적으로 인스턴스를 관리하고 활용하기 위해 Glance 서비스는 중요한 역할을 합니다. 커스텀 이미지를 생성하고 이를 활용하여 인스턴스를 설정하는 과정은 초기 설정에 많은 시간을 절약하고 일관된 환경을 유지하는 데 도움이 됩니다. 이를 통해 더 나은 클라우드 인프라를 구축하고 관리할 수 있기를 바랍니다.

References

[1] Basic architecture, Basic architecture — glance 29.0.0.0b2.dev37 documentation

[2] Images and instances, OpenStack Docs: Images and instances

[3] CentOS Image Guide, Example: CentOS image — Virtual Machine Image Guide documentation

[4] Virt-builder Manual, virt-builder

[5] OpenStack Image Create Command, image — OpenStack Command Line Client 6.7.0.dev83 documentation

[6] 정철, 오픈스택 관리 바이블: 리눅스 기반의 클라우드 OS 완벽 정리, 에이콘출판, 2018.

관련 블로그 글 더보기

오픈소스컨설팅 Playce Cloud Team 정진이 입니다. 배우고 지식을 나누며 함께 성장하고 싶습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *