시스템 엔지니어 일상/LINUX

Rocky Linux 9.3 기반 OpenStack 설치 하기

IT재테크 2026. 4. 27. 14:38

1. 구축 목표

이번 작업의 최종 목표는 개인 Windows PC 위에 VMware Player를 설치하고, 그 안에 Rocky Linux 9.3 가상머신을 구성한 뒤 OpenStack을 설치하여 테스트용 가상화 서버 환경을 만드는 것이다.

최종적으로는 다음 구조를 목표로 한다.

Windows PC
└─ VMware Player
└─ Rocky Linux 9.3 VM
└─ Kolla-Ansible 기반 OpenStack
├─ Nova: 가상머신 생성
├─ Neutron: 가상 네트워크 구성
├─ Glance: 이미지 관리
├─ Keystone: 인증 관리
├─ Horizon: 웹 관리자 페이지
└─ Cinder: 블록 스토리지 볼륨 관리
 

1차 목표는 OpenStack 기반의 가상화 환경을 만드는 것이고, 이후에는 OpenStack 위에 Kubernetes 클러스터를 구성하여 가상머신과 컨테이너를 함께 관리하는 구조까지 확장하는 것이다.

즉 전체 방향은 다음과 같다.

OpenStack = VM / 네트워크 / 볼륨을 관리하는 IaaS 플랫폼
Kubernetes = 컨테이너 / Pod / 서비스를 관리하는 오케스트레이션 플랫폼
 

 

2. 실습 환경

2.1 Host 환경

Host OS: Windows
Virtualization Tool: VMware Workstation Player
OpenStack Node OS: Rocky Linux 9.3
OpenStack 설치 방식: Kolla-Ansible
구성 방식: All-in-One
 

2.2 네트워크 환경

현재 VMware에서 할당된 IP 대역은 다음과 같다.

192.168.111.0/24
 

Rocky Linux VM에는 NIC를 2개 구성했다.

ens160
- 관리망
- SSH 접속
- Horizon 접속
- OpenStack API 통신용
- IP: 192.168.111.128/24
- Gateway: 192.168.111.2

ens224
- OpenStack Provider Network 또는 VM 외부 통신용
- IP 설정하지 않음
- Neutron에서 사용할 인터페이스
 

확인 명령어:

 
ip a
ip route
 

실제 확인된 라우팅 정보:

default via 192.168.111.2 dev ens160 proto static metric 100
192.168.111.0/24 dev ens160 proto kernel scope link src 192.168.111.128 metric 100
 

따라서 관리망 정보는 다음과 같이 확정했다.

OpenStack Host IP: 192.168.111.128
Gateway: 192.168.111.2
OpenStack VIP: 192.168.111.130
Management NIC: ens160
Provider NIC: ens224
 

 

3. 디스크 구성

OpenStack에서 Cinder 블록 스토리지를 사용하기 위해 VMware에서 추가 디스크를 하나 더 연결했다.

/dev/nvme0n2
Size: 50GB
Purpose: Cinder LVM backend
 

확인 명령어:

 
lsblk
 

예시:

nvme0n2 259:3 0 50G 0 disk
 

 

4. Cinder용 디스크 준비

중요한 점은 Cinder용 디스크는 일반 리눅스 파일시스템으로 마운트하지 않는다는 것이다.

일반 데이터 디스크라면 다음과 같은 흐름을 사용한다.

디스크 → mkfs.xfs → mount → /etc/fstab 등록
 

하지만 OpenStack Cinder LVM 백엔드로 사용할 경우에는 다음 흐름을 사용한다.

디스크 → LVM Physical Volume → Volume Group → Cinder가 Logical Volume 자동 생성
 

따라서 /dev/nvme0n2에는 mkfs.xfs를 하지 않는다.

4.1 LVM 패키지 설치

 
dnf install -y lvm2
 

4.2 기존 서명 제거

 
wipefs -a /dev/nvme0n2
 

4.3 Physical Volume 생성

 
pvcreate /dev/nvme0n2
 

결과:

Physical volume "/dev/nvme0n2" successfully created.
 

4.4 Volume Group 생성

 
vgcreate cinder-volumes /dev/nvme0n2
 

결과:

Volume group "cinder-volumes" successfully created
 

4.5 확인

 
pvs
vgs
lvs
lsblk -f
 

정상 상태는 다음과 같다.

/dev/nvme0n2 → LVM2_member
VG 이름 → cinder-volumes
 

df -h에는 해당 디스크가 보이지 않는 것이 정상이다.
이 디스크는 호스트 OS에 마운트해서 쓰는 디스크가 아니라, Cinder가 VM 볼륨 생성을 위해 사용하는 원재료 디스크이기 때문이다.


5. Cinder 디스크 작업 중 발생한 이슈

이슈: mkfs.xfs 실행 시 오류 발생

Cinder용으로 pvcreate, vgcreate까지 완료한 후 실수로 다음 명령어를 실행했다.

 
mkfs.xfs /dev/nvme0n2
 

오류:

mkfs.xfs: /dev/nvme0n2 appears to contain an existing filesystem (LVM2_member).
mkfs.xfs: Use the -f option to force overwrite.
 

원인

이미 /dev/nvme0n2는 LVM Physical Volume으로 등록되어 있었기 때문에 LVM2_member로 인식된 것이다.

해결

이 상태는 정상이다.
mkfs.xfs -f를 실행하면 기존 LVM 구성이 삭제되므로 절대 실행하지 않는다.

정리하면:

Cinder용 디스크 = mkfs 하지 않음
Cinder용 디스크 = mount 하지 않음
Cinder용 디스크 = /etc/fstab 등록하지 않음
 

 

6. OS 기본 설정

6.1 hostname 설정

 
hostnamectl set-hostname openstack1
 

/etc/hosts 수정:

 
vi /etc/hosts
 

아래 내용 추가:

192.168.111.128 openstack1
 

확인:

 
hostname
hostname -f
cat /etc/hosts
 

 

6.2 SELinux 설정

테스트 환경에서는 SELinux로 인해 Kolla-Ansible 작업이 막히는 경우가 있으므로 permissive로 설정했다.

 
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
 

확인:

 
getenforce
 

정상 결과:

Permissive
 

6.3 firewalld 중지

테스트용 All-in-One 환경에서는 방화벽 때문에 OpenStack 서비스 통신이 막힐 수 있으므로 firewalld를 중지했다.

 
systemctl disable --now firewalld
 

확인:

 
systemctl is-active firewalld
 

정상 결과:

inactive
 

6.4 시간 동기화 설정

 
dnf install -y chrony
systemctl enable --now chronyd
 

확인:

 
timedatectl
chronyc tracking
 

 

7. 기본 패키지 설치

OpenStack 설치 전 필요한 패키지를 설치한다.

 
dnf install -y epel-release

dnf install -y \
python3 \
python3-devel \
python3-pip \
gcc \
git \
vim \
curl \
wget \
net-tools \
bind-utils \
lvm2 \
openssl-devel \
libffi-devel \
rsync
 

주요 패키지 역할

패키지역할
python3 Python 실행 환경
python3-devel Python 모듈 빌드 시 필요한 헤더 파일
python3-pip Python 패키지 설치 도구
gcc Python 패키지 컴파일 시 필요
git 소스코드 또는 패키지 다운로드
vim 설정 파일 편집
curl, wget 파일 다운로드 및 API 확인
net-tools 네트워크 확인 도구
bind-utils DNS 확인 도구
lvm2 Cinder LVM 백엔드 구성
openssl-devel SSL 관련 Python 모듈 빌드에 필요
libffi-devel 암호화/인증 관련 Python 모듈 빌드에 필요
rsync 파일 동기화 작업에 사용

 

8. Python 버전 이슈

이슈: kolla-ansible==20.* 설치 실패

초기에는 Rocky Linux 9.3 기본 Python으로 가상환경을 만들었다.

 
python3 -m venv /root/kolla-venv
source /root/kolla-venv/bin/activate
pip install 'kolla-ansible==20.*'
 

하지만 다음 오류가 발생했다.

ERROR: Ignored the following versions that require a different python version:
20.0.0 Requires-Python >=3.10
20.1.0 Requires-Python >=3.10
20.2.0 Requires-Python >=3.10
20.3.0 Requires-Python >=3.10
 

원인

Rocky Linux 9.3의 기본 Python은 3.9 계열이다.
하지만 Kolla-Ansible 20.x는 Python 3.10 이상을 요구한다.

해결

Python 3.11을 별도로 설치하고, 해당 버전으로 가상환경을 다시 생성했다.

 
deactivate 2>/dev/null

dnf install -y python3.11 python3.11-devel python3.11-pip python3-libselinux

rm -rf /root/kolla-venv

python3.11 -m venv /root/kolla-venv
source /root/kolla-venv/bin/activate

pip install -U pip
pip install 'kolla-ansible==20.*'
 

확인:

 
python --version
pip --version
kolla-ansible --version
 

 

9. Kolla-Ansible 설치

Python 3.11 가상환경을 만든 후 Kolla-Ansible을 설치했다.

 
source /root/kolla-venv/bin/activate
pip install -U pip
pip install 'kolla-ansible==20.*'
 

확인:

 
kolla-ansible --version
 

10. Kolla 설정 파일 준비

10.1 /etc/kolla 디렉터리 생성

 
mkdir -p /etc/kolla
chmod 755 /etc/kolla
 

10.2 기본 설정 파일 복사

 
cp -r /root/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
 

10.3 All-in-One 인벤토리 복사

 
cp /root/kolla-venv/share/kolla-ansible/ansible/inventory/all-in-one /root/all-in-one
 

확인:

 
ls -l /etc/kolla
ls -l /root/all-in-one
 

 

11. Kolla-Ansible 의존성 설치

 
kolla-ansible install-deps
 

이 명령어는 Kolla-Ansible 실행에 필요한 Ansible Collection 및 관련 의존성을 설치한다.


12. OpenStack 패스워드 생성

 
kolla-genpwd
 

이 명령어를 실행하면 /etc/kolla/passwords.yml 파일 안에 OpenStack 각 서비스의 패스워드가 자동 생성된다.

확인:

 
ls -l /etc/kolla/passwords.yml
 

관리자 비밀번호 확인:

 
grep keystone_admin_password /etc/kolla/passwords.yml
 

여기에 보이는 값은 해시처럼 길고 복잡해 보이지만, 실제 Horizon 로그인에 사용하는 관리자 비밀번호이다.

Domain: Default
User: admin
Password: keystone_admin_password 값
 

13. globals.yml 설정

Kolla-Ansible의 핵심 설정 파일은 다음 위치에 있다.

/etc/kolla/globals.yml
 

백업:

 
cp /etc/kolla/globals.yml /etc/kolla/globals.yml.bak
 

수정:

 
vi /etc/kolla/globals.yml
 

사용한 핵심 설정은 다음과 같다.

 
workaround_ansible_issue_8743: yes

kolla_base_distro: "rocky"
kolla_install_type: "binary"
openstack_release: "2025.1"

network_interface: "ens160"
neutron_external_interface: "ens224"

kolla_internal_vip_address: "192.168.111.130"

enable_haproxy: "yes"
enable_horizon: "yes"

enable_cinder: "yes"
enable_cinder_backend_lvm: "yes"
cinder_volume_group: "cinder-volumes"

enable_neutron_provider_networks: "yes"

nova_compute_virt_type: "qemu"
 

주요 설정 의미

설정의미
kolla_base_distro: "rocky" OpenStack 컨테이너 이미지의 기반 배포판을 Rocky로 설정
kolla_install_type: "binary" 패키지 기반 설치 방식 사용
openstack_release: "2025.1" 사용할 OpenStack 릴리즈
network_interface: "ens160" OpenStack API, 관리 트래픽용 인터페이스
neutron_external_interface: "ens224" VM 외부 네트워크 또는 Provider Network용 인터페이스
kolla_internal_vip_address Horizon/API 접근에 사용할 VIP
enable_haproxy HAProxy 사용
enable_horizon OpenStack 웹 콘솔 Horizon 활성화
enable_cinder Cinder 블록 스토리지 활성화
enable_cinder_backend_lvm Cinder LVM 백엔드 사용
cinder_volume_group Cinder가 사용할 LVM Volume Group 이름
enable_neutron_provider_networks Provider Network 사용
nova_compute_virt_type: "qemu" VMware 내부 중첩 가상화 환경에서 우선 QEMU로 VM 실행

 

14. globals.yml 문법 오류 이슈

이슈: bootstrap 실행 시 YAML 오류 발생

명령어 실행:

 
kolla-ansible bootstrap-servers -i /root/all-in-one
 

오류:

Syntax Error while loading YAML.
but found another document.
expected a single document in the stream

The error appears to be in '/etc/kolla/globals.yml': line 878

#etcd_remove_deleted_members: "no"
---
^ here
 

원인

globals.yml 파일 하단에 설정을 추가하면서 --- 문서 시작 표시를 한 번 더 추가했다.
YAML에서 ---는 문서 시작을 의미하는데, 파일 중간이나 하단에 또 들어가면 문서가 여러 개로 인식되어 오류가 발생한다.

해결

파일 중간 또는 하단에 추가된 ---를 삭제했다.

확인:

 
nl -ba /etc/kolla/globals.yml | sed -n '860,890p'
 

YAML 문법 확인:

 
python - <<'PY'
import yaml
with open('/etc/kolla/globals.yml') as f:
yaml.safe_load(f)
print("globals.yml YAML OK")
PY
 

정상 결과:

globals.yml YAML OK
 

설정 확인:

 
grep -Ev '^\s*#|^\s*$' /etc/kolla/globals.yml
 

 

15. Kolla-Ansible 명령어 순서 이슈

이슈

처음에는 다음과 같이 실행했다.

 
kolla-ansible -i /root/all-in-one bootstrap-servers
 

오류:

kolla-ansible: '-i /root/all-in-one bootstrap-servers' is not a kolla-ansible command.
 

원인

설치된 Kolla-Ansible CLI에서는 -i 옵션 위치를 명령어 뒤에 둬야 했다.

해결

다음 형식으로 실행한다.

 
kolla-ansible bootstrap-servers -i /root/all-in-one
kolla-ansible prechecks -i /root/all-in-one
kolla-ansible deploy -i /root/all-in-one
kolla-ansible post-deploy -i /root/all-in-one
 

 

16. Bootstrap 실행

 
kolla-ansible bootstrap-servers -i /root/all-in-one
 

이 명령어는 OpenStack 배포 전 대상 서버에 필요한 기본 구성을 적용한다.

주요 작업은 다음과 같다.

- 필수 패키지 설치
- Docker 또는 컨테이너 런타임 준비
- 사용자 및 디렉터리 구성
- 커널 파라미터 설정
- Ansible 기반 배포 준비
 

정상 완료 기준:

PLAY RECAP
localhost : ok=... changed=... failed=0
 

 

17. Prechecks 실행

 
kolla-ansible prechecks -i /root/all-in-one
 

이 명령어는 실제 배포 전에 환경 조건을 검사한다.

검사 항목 예시는 다음과 같다.

- OS 배포판 지원 여부
- 네트워크 인터페이스 존재 여부
- VIP 충돌 여부
- Docker 또는 Podman 상태
- Cinder Volume Group 존재 여부
- 필수 포트 사용 여부
- Ansible 실행 조건
 

정상 완료 기준:

PLAY RECAP
localhost : ok=... changed=... failed=0
 

 


18. Deploy 실행

Prechecks가 성공하면 실제 OpenStack 배포를 진행한다.

 
kolla-ansible deploy -i /root/all-in-one
 

이 단계에서 OpenStack 주요 서비스들이 컨테이너로 배포된다.

설치되는 대표 서비스는 다음과 같다.

서비스역할
Keystone 인증 서비스
Glance VM 이미지 관리
Nova VM 생성 및 Compute 관리
Neutron 네트워크 관리
Horizon 웹 관리 콘솔
Cinder 블록 스토리지 볼륨 관리
MariaDB OpenStack 서비스 DB
RabbitMQ 서비스 간 메시지 큐
Memcached 인증 토큰 캐시
HAProxy API 프록시 및 VIP 처리
Keepalived VIP 관리
Placement Nova 리소스 배치 관리

정상 완료 기준:

PLAY RECAP
localhost : ok=... changed=... failed=0
 

 

19. Post Deploy 실행

배포 완료 후 관리자 환경 파일을 생성한다.

 
kolla-ansible post-deploy -i /root/all-in-one
 

생성되는 주요 파일:

/etc/kolla/admin-openrc.sh
 

이 파일은 OpenStack CLI 사용을 위한 환경변수 파일이다.


20. admin-openrc.sh 실행 이슈

이슈

다음처럼 직접 실행했다.

 
/etc/kolla/admin-openrc.sh
 

오류:

-bash: /etc/kolla/admin-openrc.sh: 허가 거부
 

원인

admin-openrc.sh는 실행 파일이 아니라, 현재 쉘에 OpenStack 인증 환경변수를 불러오는 파일이다.

해결

다음처럼 source로 읽어야 한다.

 
source /etc/kolla/admin-openrc.sh
 

또는:

 
. /etc/kolla/admin-openrc.sh
 

확인:

 
env | grep OS_
 

21. OpenStack CLI 설치

OpenStack CLI가 없다면 가상환경 안에서 설치한다.

 
source /root/kolla-venv/bin/activate
pip install python-openstackclient
 

확인:

 
openstack --version
 

관리자 환경변수 로드:

 
source /etc/kolla/admin-openrc.sh
 

서비스 확인:

 
openstack service list
openstack endpoint list
openstack compute service list
openstack network agent list
openstack volume service list
 
21_1. openstack  service  list 확인
21_2. openstack endpoint list
21_3. openstack compute service list

 

21_4. openstack network agent list

 

21_5. openstack volume service list

22. PackageKit 이슈

이슈

설치 중 다음 오류가 발생했다.

패키지 설치에 실패했습니다: PackageKit daemon disappeared
 

원인

Rocky Linux GUI 환경에서 패키지 설치를 시도할 때 GNOME Software 또는 PackageKit 데몬이 중간에 종료된 것이다.
OpenStack 설치 중에는 GUI 패키지 관리자와 dnf가 동시에 동작하면 패키지 DB Lock 문제가 발생할 수 있다.

해결

OpenStack 설치 중에는 GUI 패키지 관리자를 사용하지 않고 터미널에서 dnf와 pip만 사용한다.

PackageKit 중지:

 
systemctl stop packagekit
systemctl disable packagekit
 

남아 있는 프로세스 확인:

 
ps -ef | egrep 'packagekit|gnome-software|dnf|yum|rpm'
 

필요 시 종료:

 
pkill -f packagekit
 

RPM DB 정리:

 
rpm --rebuilddb
dnf clean all
dnf makecache
 

정리하면:

OpenStack 설치 중에는 GUI 패키지 관리자 사용 금지
터미널에서 dnf / pip로만 작업
PackageKit은 중지해두는 것이 안전
 

 

23. Horizon 관리자 페이지 접속

OpenStack 관리자 페이지는 Horizon이다.

접속 주소:

http://192.168.111.130
 

로그인 정보:

Domain: Default
User: admin
Password: /etc/kolla/passwords.yml의 keystone_admin_password 값
 

비밀번호 확인:

 
grep keystone_admin_password /etc/kolla/passwords.yml
 
다음과 같이 암호화된 내용 그대로 넣으면 됩니다
 

값만 출력:

 
awk '/^keystone_admin_password:/ {print $2}' /etc/kolla/passwords.yml
 

Horizon 접속이 안 될 경우 확인:

 
docker ps | grep horizon
ip a | grep 192.168.111.130
curl -I http://192.168.111.130
systemctl is-active firewalld
 
23. 관리자 페이지 접속 화면
 

 

24. OpenStack 설치 후 초기 구성

배포 후에는 다음 항목들을 구성해야 VM을 생성할 수 있다.

1. 이미지 등록
2. Flavor 생성
3. 네트워크 생성
4. 서브넷 생성
5. 보안그룹 설정
6. 키페어 생성
7. VM 생성

 

25. 테스트 이미지 등록 예시

가벼운 테스트용 Linux 이미지로 CirrOS를 사용할 수 있다.

이미지 등록:

 
openstack image create "cirros" \
--file /root/cirros.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public
 

확인:

 
openstack image list
 

 

26. Flavor 생성

 
openstack flavor create m1.tiny \
--id 1 \
--ram 512 \
--disk 1 \
--vcpus 1
 

확인:

 
openstack flavor list
 

 

27. Provider Network 생성

현재 구성에서 ens224를 OpenStack VM 외부 네트워크용으로 사용한다.

 
openstack network create public1 \
--share \
--external \
--provider-physical-network physnet1 \
--provider-network-type flat
 

Subnet 생성:

 
openstack subnet create public1-subnet \
--network public1 \
--subnet-range 192.168.111.0/24 \
--allocation-pool start=192.168.111.200,end=192.168.111.220 \
--gateway 192.168.111.2 \
--dns-nameserver 8.8.8.8 \
--no-dhcp
 

확인:

 
openstack network list
openstack subnet list
 

 

28. 보안그룹 설정

Ping 허용:

 
openstack security group rule create default \
--protocol icmp
 

SSH 허용:

 
openstack security group rule create default \
--protocol tcp \
--dst-port 22
 

Windows RDP 허용:

 
openstack security group rule create default \
--protocol tcp \
--dst-port 3389
 

확인:

 
openstack security group rule list default
 

 

29. Windows VM 구성 방향

OpenStack 위에 Windows VM을 만들려면 일반 Linux VM보다 준비가 더 필요하다.

필요한 파일:

1. Windows Server ISO
2. VirtIO Driver ISO
 

Windows ISO는 Horizon UI에서 업로드할 수 있다.

Horizon
→ Project 또는 Admin
→ Compute
→ Images
→ Create Image
 

입력 예시:

Image Name: Windows-Server-2022-ISO
Image Source: Image File
Format: ISO
Visibility: Public
File: Windows Server ISO 선택
 

Windows용 Flavor 예시:

Name: win.medium
vCPU: 4
RAM: 8192MB
Disk: 80GB
 

CLI로 만들 경우:

 
openstack flavor create win.medium \
--ram 8192 \
--disk 80 \
--vcpus 4
 

Windows 설치 후 RDP 접속을 위해 3389 포트를 허용해야 한다.

 
openstack security group rule create default \
--protocol tcp \
--dst-port 3389
 

 

30. Horizon UI에서 가능한 작업

Horizon UI로 가능한 작업은 다음과 같다.

- 이미지 업로드
- Flavor 생성
- 네트워크 확인
- 보안그룹 설정
- 인스턴스 생성
- 콘솔 접속
- Windows 설치 화면 접근
 

하지만 다음 작업은 CLI가 더 편하거나 필요할 수 있다.

- Windows 이미지 속성 설정
- VirtIO ISO 추가 연결
- 부팅 순서 세부 제어
- 디스크 버스 설정
 

예를 들어 Windows 설치를 쉽게 하기 위해 SATA/e1000 속성을 줄 수 있다.

 
openstack image set "Windows-Server-2022-ISO" \
--property hw_disk_bus=sata \
--property hw_cdrom_bus=sata \
--property hw_vif_model=e1000
 

 

31. VMware Player 중첩 가상화 주의사항

이번 환경은 다음과 같은 중첩 가상화 구조이다.

Windows PC
└─ VMware Player
└─ Rocky Linux 9.3
└─ OpenStack
└─ VM
 

즉 VM 안에서 다시 VM을 생성하는 구조이다.

따라서 성능은 실제 물리 서버에 설치한 OpenStack보다 낮을 수 있다.

현재는 안정적인 설치를 위해 다음 설정을 사용했다.

 
nova_compute_virt_type: "qemu"
 

만약 VMware에서 Nested Virtualization이 정상적으로 활성화되어 있고 Rocky에서 /dev/kvm이 보이면 다음과 같이 KVM으로 변경할 수 있다.

확인:

 
ls -l /dev/kvm
egrep -c '(vmx|svm)' /proc/cpuinfo
 

KVM 사용 가능 시:

 
nova_compute_virt_type: "kvm"
 

 

32. 전체 설치 명령어 요약

아래는 전체 흐름을 요약한 명령어이다.

 
# 1. 기본 패키지
dnf install -y epel-release

dnf install -y \
python3 \
python3-devel \
python3-pip \
gcc \
git \
vim \
curl \
wget \
net-tools \
bind-utils \
lvm2 \
openssl-devel \
libffi-devel \
rsync \
chrony

# 2. 시간 동기화
systemctl enable --now chronyd

# 3. SELinux / firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
systemctl disable --now firewalld

# 4. hostname
hostnamectl set-hostname openstack1

# 5. Cinder 디스크
wipefs -a /dev/nvme0n2
pvcreate /dev/nvme0n2
vgcreate cinder-volumes /dev/nvme0n2

# 6. Python 3.11 설치
dnf install -y python3.11 python3.11-devel python3.11-pip python3-libselinux

# 7. Kolla venv
python3.11 -m venv /root/kolla-venv
source /root/kolla-venv/bin/activate

pip install -U pip
pip install 'kolla-ansible==20.*'

# 8. Kolla 설정 복사
mkdir -p /etc/kolla
chmod 755 /etc/kolla

cp -r /root/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/
cp /root/kolla-venv/share/kolla-ansible/ansible/inventory/all-in-one /root/all-in-one

# 9. 의존성 설치 및 패스워드 생성
kolla-ansible install-deps
kolla-genpwd

# 10. 설정 확인 후 배포
kolla-ansible bootstrap-servers -i /root/all-in-one
kolla-ansible prechecks -i /root/all-in-one
kolla-ansible deploy -i /root/all-in-one
kolla-ansible post-deploy -i /root/all-in-one

# 11. OpenStack CLI
pip install python-openstackclient
source /etc/kolla/admin-openrc.sh

openstack service list
 

 

33. 이번 실습에서 배운 핵심 포인트

이번 실습에서 가장 중요했던 점은 다음과 같다.

1. OpenStack 설치 전 OS 지원 여부 확인이 중요하다.
2. Rocky Linux 9.3에서는 최신 Kolla-Ansible 설치를 위해 Python 3.11이 필요할 수 있다.
3. Cinder용 디스크는 파일시스템을 만들거나 마운트하지 않는다.
4. Cinder LVM 백엔드는 cinder-volumes VG를 사용한다.
5. OpenStack 설치 중에는 GUI 패키지 관리자보다 dnf/pip를 사용하는 것이 안전하다.
6. PackageKit은 설치 중 충돌을 만들 수 있으므로 중지하는 것이 좋다.
7. globals.yml은 YAML 문법이므로 중복된 --- 문서 시작 표시를 넣으면 안 된다.
8. admin-openrc.sh는 실행하는 파일이 아니라 source로 불러오는 파일이다.
9. Horizon 관리자 페이지는 VIP 주소로 접속한다.
10. Windows VM은 ISO, VirtIO 드라이버, RDP 보안그룹 설정이 추가로 필요하다.
 

 

34. 최종 정리

이번 작업은 단순히 OpenStack을 설치하는 것이 아니라, 실제 클라우드 인프라가 어떤 구성요소로 이루어지는지 이해하는 과정이었다.

OpenStack의 핵심 구조는 다음과 같다.

Keystone = 인증
Glance = 이미지
Nova = 가상머신
Neutron = 네트워크
Cinder = 볼륨
Horizon = 웹 콘솔
RabbitMQ = 메시지 큐
MariaDB = 데이터베이스
HAProxy = API 프록시
Keepalived = VIP 관리
 

이번 환경은 학습용 All-in-One 구조이지만, 이 구조를 이해하면 이후에는 Controller Node, Compute Node, Storage Node를 분리한 실제 운영형 OpenStack 구조로 확장할 수 있다.

다음 단계는 다음과 같다.

1. CirrOS 테스트 VM 생성
2. Windows Server VM 생성
3. Provider Network와 Floating IP 검증
4. Cinder 볼륨 생성 및 VM 연결 테스트
5. OpenStack VM 위에 Kubernetes Master/Worker 구성
6. OpenStack + Kubernetes 통합 구조 실습
 

이렇게 진행하면 최종적으로 VM 기반 가상화와 컨테이너 기반 서비스를 함께 운영하는 개인 클라우드 실습 환경을 만들 수 있다.