1. 구축 목표
이번 작업의 최종 목표는 개인 Windows PC 위에 VMware Player를 설치하고, 그 안에 Rocky Linux 9.3 가상머신을 구성한 뒤 OpenStack을 설치하여 테스트용 가상화 서버 환경을 만드는 것이다.
최종적으로는 다음 구조를 목표로 한다.
└─ VMware Player
└─ Rocky Linux 9.3 VM
└─ Kolla-Ansible 기반 OpenStack
├─ Nova: 가상머신 생성
├─ Neutron: 가상 네트워크 구성
├─ Glance: 이미지 관리
├─ Keystone: 인증 관리
├─ Horizon: 웹 관리자 페이지
└─ Cinder: 블록 스토리지 볼륨 관리
1차 목표는 OpenStack 기반의 가상화 환경을 만드는 것이고, 이후에는 OpenStack 위에 Kubernetes 클러스터를 구성하여 가상머신과 컨테이너를 함께 관리하는 구조까지 확장하는 것이다.
즉 전체 방향은 다음과 같다.
Kubernetes = 컨테이너 / Pod / 서비스를 관리하는 오케스트레이션 플랫폼
2. 실습 환경
2.1 Host 환경
Virtualization Tool: VMware Workstation Player
OpenStack Node OS: Rocky Linux 9.3
OpenStack 설치 방식: Kolla-Ansible
구성 방식: All-in-One
2.2 네트워크 환경
현재 VMware에서 할당된 IP 대역은 다음과 같다.
Rocky Linux VM에는 NIC를 2개 구성했다.
- 관리망
- SSH 접속
- Horizon 접속
- OpenStack API 통신용
- IP: 192.168.111.128/24
- Gateway: 192.168.111.2
ens224
- OpenStack Provider Network 또는 VM 외부 통신용
- IP 설정하지 않음
- Neutron에서 사용할 인터페이스
확인 명령어:
ip route
실제 확인된 라우팅 정보:
192.168.111.0/24 dev ens160 proto kernel scope link src 192.168.111.128 metric 100
따라서 관리망 정보는 다음과 같이 확정했다.
Gateway: 192.168.111.2
OpenStack VIP: 192.168.111.130
Management NIC: ens160
Provider NIC: ens224
3. 디스크 구성
OpenStack에서 Cinder 블록 스토리지를 사용하기 위해 VMware에서 추가 디스크를 하나 더 연결했다.
Size: 50GB
Purpose: Cinder LVM backend
확인 명령어:
예시:
4. Cinder용 디스크 준비
중요한 점은 Cinder용 디스크는 일반 리눅스 파일시스템으로 마운트하지 않는다는 것이다.
일반 데이터 디스크라면 다음과 같은 흐름을 사용한다.
하지만 OpenStack Cinder LVM 백엔드로 사용할 경우에는 다음 흐름을 사용한다.
따라서 /dev/nvme0n2에는 mkfs.xfs를 하지 않는다.
4.1 LVM 패키지 설치
4.2 기존 서명 제거
4.3 Physical Volume 생성
결과:
4.4 Volume Group 생성
결과:
4.5 확인
vgs
lvs
lsblk -f
정상 상태는 다음과 같다.
VG 이름 → cinder-volumes
df -h에는 해당 디스크가 보이지 않는 것이 정상이다.
이 디스크는 호스트 OS에 마운트해서 쓰는 디스크가 아니라, Cinder가 VM 볼륨 생성을 위해 사용하는 원재료 디스크이기 때문이다.
5. Cinder 디스크 작업 중 발생한 이슈
이슈: mkfs.xfs 실행 시 오류 발생
Cinder용으로 pvcreate, vgcreate까지 완료한 후 실수로 다음 명령어를 실행했다.
오류:
mkfs.xfs: Use the -f option to force overwrite.
원인
이미 /dev/nvme0n2는 LVM Physical Volume으로 등록되어 있었기 때문에 LVM2_member로 인식된 것이다.
해결
이 상태는 정상이다.
mkfs.xfs -f를 실행하면 기존 LVM 구성이 삭제되므로 절대 실행하지 않는다.
정리하면:
Cinder용 디스크 = mount 하지 않음
Cinder용 디스크 = /etc/fstab 등록하지 않음
6. OS 기본 설정
6.1 hostname 설정
/etc/hosts 수정:
아래 내용 추가:
확인:
hostname -f
cat /etc/hosts
6.2 SELinux 설정
테스트 환경에서는 SELinux로 인해 Kolla-Ansible 작업이 막히는 경우가 있으므로 permissive로 설정했다.
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
확인:
정상 결과:
6.3 firewalld 중지
테스트용 All-in-One 환경에서는 방화벽 때문에 OpenStack 서비스 통신이 막힐 수 있으므로 firewalld를 중지했다.
확인:
정상 결과:
6.4 시간 동기화 설정
systemctl enable --now chronyd
확인:
chronyc tracking
7. 기본 패키지 설치
OpenStack 설치 전 필요한 패키지를 설치한다.
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으로 가상환경을 만들었다.
source /root/kolla-venv/bin/activate
pip install 'kolla-ansible==20.*'
하지만 다음 오류가 발생했다.
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을 별도로 설치하고, 해당 버전으로 가상환경을 다시 생성했다.
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.*'
확인:
pip --version
kolla-ansible --version
9. Kolla-Ansible 설치
Python 3.11 가상환경을 만든 후 Kolla-Ansible을 설치했다.
pip install -U pip
pip install 'kolla-ansible==20.*'
확인:
10. Kolla 설정 파일 준비
10.1 /etc/kolla 디렉터리 생성
chmod 755 /etc/kolla
10.2 기본 설정 파일 복사
10.3 All-in-One 인벤토리 복사
확인:
ls -l /root/all-in-one
11. Kolla-Ansible 의존성 설치
이 명령어는 Kolla-Ansible 실행에 필요한 Ansible Collection 및 관련 의존성을 설치한다.
12. OpenStack 패스워드 생성
이 명령어를 실행하면 /etc/kolla/passwords.yml 파일 안에 OpenStack 각 서비스의 패스워드가 자동 생성된다.
확인:
관리자 비밀번호 확인:
여기에 보이는 값은 해시처럼 길고 복잡해 보이지만, 실제 Horizon 로그인에 사용하는 관리자 비밀번호이다.
User: admin
Password: keystone_admin_password 값
13. globals.yml 설정
Kolla-Ansible의 핵심 설정 파일은 다음 위치에 있다.
백업:
수정:
사용한 핵심 설정은 다음과 같다.
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 오류 발생
명령어 실행:
오류:
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에서 ---는 문서 시작을 의미하는데, 파일 중간이나 하단에 또 들어가면 문서가 여러 개로 인식되어 오류가 발생한다.
해결
파일 중간 또는 하단에 추가된 ---를 삭제했다.
확인:
YAML 문법 확인:
import yaml
with open('/etc/kolla/globals.yml') as f:
yaml.safe_load(f)
print("globals.yml YAML OK")
PY
정상 결과:
설정 확인:
15. Kolla-Ansible 명령어 순서 이슈
이슈
처음에는 다음과 같이 실행했다.
오류:
원인
설치된 Kolla-Ansible CLI에서는 -i 옵션 위치를 명령어 뒤에 둬야 했다.
해결
다음 형식으로 실행한다.
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 실행
이 명령어는 OpenStack 배포 전 대상 서버에 필요한 기본 구성을 적용한다.
주요 작업은 다음과 같다.
- Docker 또는 컨테이너 런타임 준비
- 사용자 및 디렉터리 구성
- 커널 파라미터 설정
- Ansible 기반 배포 준비
정상 완료 기준:
localhost : ok=... changed=... failed=0
17. Prechecks 실행
이 명령어는 실제 배포 전에 환경 조건을 검사한다.
검사 항목 예시는 다음과 같다.
- 네트워크 인터페이스 존재 여부
- VIP 충돌 여부
- Docker 또는 Podman 상태
- Cinder Volume Group 존재 여부
- 필수 포트 사용 여부
- Ansible 실행 조건
정상 완료 기준:
localhost : ok=... changed=... failed=0
18. Deploy 실행
Prechecks가 성공하면 실제 OpenStack 배포를 진행한다.
이 단계에서 OpenStack 주요 서비스들이 컨테이너로 배포된다.
설치되는 대표 서비스는 다음과 같다.
| Keystone | 인증 서비스 |
| Glance | VM 이미지 관리 |
| Nova | VM 생성 및 Compute 관리 |
| Neutron | 네트워크 관리 |
| Horizon | 웹 관리 콘솔 |
| Cinder | 블록 스토리지 볼륨 관리 |
| MariaDB | OpenStack 서비스 DB |
| RabbitMQ | 서비스 간 메시지 큐 |
| Memcached | 인증 토큰 캐시 |
| HAProxy | API 프록시 및 VIP 처리 |
| Keepalived | VIP 관리 |
| Placement | Nova 리소스 배치 관리 |
정상 완료 기준:
localhost : ok=... changed=... failed=0
19. Post Deploy 실행
배포 완료 후 관리자 환경 파일을 생성한다.
생성되는 주요 파일:
이 파일은 OpenStack CLI 사용을 위한 환경변수 파일이다.
20. admin-openrc.sh 실행 이슈
이슈
다음처럼 직접 실행했다.
오류:
원인
admin-openrc.sh는 실행 파일이 아니라, 현재 쉘에 OpenStack 인증 환경변수를 불러오는 파일이다.
해결
다음처럼 source로 읽어야 한다.
또는:
확인:
21. OpenStack CLI 설치
OpenStack CLI가 없다면 가상환경 안에서 설치한다.
pip install python-openstackclient
확인:
관리자 환경변수 로드:
서비스 확인:
openstack endpoint list
openstack compute service list
openstack network agent list
openstack volume service list





22. PackageKit 이슈
이슈
설치 중 다음 오류가 발생했다.
원인
Rocky Linux GUI 환경에서 패키지 설치를 시도할 때 GNOME Software 또는 PackageKit 데몬이 중간에 종료된 것이다.
OpenStack 설치 중에는 GUI 패키지 관리자와 dnf가 동시에 동작하면 패키지 DB Lock 문제가 발생할 수 있다.
해결
OpenStack 설치 중에는 GUI 패키지 관리자를 사용하지 않고 터미널에서 dnf와 pip만 사용한다.
PackageKit 중지:
systemctl disable packagekit
남아 있는 프로세스 확인:
필요 시 종료:
RPM DB 정리:
dnf clean all
dnf makecache
정리하면:
터미널에서 dnf / pip로만 작업
PackageKit은 중지해두는 것이 안전
23. Horizon 관리자 페이지 접속
OpenStack 관리자 페이지는 Horizon이다.
접속 주소:
로그인 정보:
User: admin
Password: /etc/kolla/passwords.yml의 keystone_admin_password 값
비밀번호 확인:

값만 출력:
Horizon 접속이 안 될 경우 확인:
ip a | grep 192.168.111.130
curl -I http://192.168.111.130
systemctl is-active firewalld

24. OpenStack 설치 후 초기 구성
배포 후에는 다음 항목들을 구성해야 VM을 생성할 수 있다.
2. Flavor 생성
3. 네트워크 생성
4. 서브넷 생성
5. 보안그룹 설정
6. 키페어 생성
7. VM 생성
25. 테스트 이미지 등록 예시
가벼운 테스트용 Linux 이미지로 CirrOS를 사용할 수 있다.
curl -L -o cirros.qcow2 \
https://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img
이미지 등록:
--file /root/cirros.qcow2 \
--disk-format qcow2 \
--container-format bare \
--public
확인:
26. Flavor 생성
--id 1 \
--ram 512 \
--disk 1 \
--vcpus 1
확인:
27. Provider Network 생성
현재 구성에서 ens224를 OpenStack VM 외부 네트워크용으로 사용한다.
--share \
--external \
--provider-physical-network physnet1 \
--provider-network-type flat
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 subnet list
28. 보안그룹 설정
Ping 허용:
--protocol icmp
SSH 허용:
--protocol tcp \
--dst-port 22
Windows RDP 허용:
--protocol tcp \
--dst-port 3389
확인:
29. Windows VM 구성 방향
OpenStack 위에 Windows VM을 만들려면 일반 Linux VM보다 준비가 더 필요하다.
필요한 파일:
2. VirtIO Driver ISO
Windows ISO는 Horizon UI에서 업로드할 수 있다.
→ Project 또는 Admin
→ Compute
→ Images
→ Create Image
입력 예시:
Image Source: Image File
Format: ISO
Visibility: Public
File: Windows Server ISO 선택
Windows용 Flavor 예시:
vCPU: 4
RAM: 8192MB
Disk: 80GB
CLI로 만들 경우:
--ram 8192 \
--disk 80 \
--vcpus 4
Windows 설치 후 RDP 접속을 위해 3389 포트를 허용해야 한다.
--protocol tcp \
--dst-port 3389
30. Horizon UI에서 가능한 작업
Horizon UI로 가능한 작업은 다음과 같다.
- Flavor 생성
- 네트워크 확인
- 보안그룹 설정
- 인스턴스 생성
- 콘솔 접속
- Windows 설치 화면 접근
하지만 다음 작업은 CLI가 더 편하거나 필요할 수 있다.
- VirtIO ISO 추가 연결
- 부팅 순서 세부 제어
- 디스크 버스 설정
예를 들어 Windows 설치를 쉽게 하기 위해 SATA/e1000 속성을 줄 수 있다.
--property hw_disk_bus=sata \
--property hw_cdrom_bus=sata \
--property hw_vif_model=e1000
31. VMware Player 중첩 가상화 주의사항
이번 환경은 다음과 같은 중첩 가상화 구조이다.
└─ VMware Player
└─ Rocky Linux 9.3
└─ OpenStack
└─ VM
즉 VM 안에서 다시 VM을 생성하는 구조이다.
따라서 성능은 실제 물리 서버에 설치한 OpenStack보다 낮을 수 있다.
현재는 안정적인 설치를 위해 다음 설정을 사용했다.
만약 VMware에서 Nested Virtualization이 정상적으로 활성화되어 있고 Rocky에서 /dev/kvm이 보이면 다음과 같이 KVM으로 변경할 수 있다.
확인:
egrep -c '(vmx|svm)' /proc/cpuinfo
KVM 사용 가능 시:
32. 전체 설치 명령어 요약
아래는 전체 흐름을 요약한 명령어이다.
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. 이번 실습에서 배운 핵심 포인트
이번 실습에서 가장 중요했던 점은 다음과 같다.
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의 핵심 구조는 다음과 같다.
Glance = 이미지
Nova = 가상머신
Neutron = 네트워크
Cinder = 볼륨
Horizon = 웹 콘솔
RabbitMQ = 메시지 큐
MariaDB = 데이터베이스
HAProxy = API 프록시
Keepalived = VIP 관리
이번 환경은 학습용 All-in-One 구조이지만, 이 구조를 이해하면 이후에는 Controller Node, Compute Node, Storage Node를 분리한 실제 운영형 OpenStack 구조로 확장할 수 있다.
다음 단계는 다음과 같다.
2. Windows Server VM 생성
3. Provider Network와 Floating IP 검증
4. Cinder 볼륨 생성 및 VM 연결 테스트
5. OpenStack VM 위에 Kubernetes Master/Worker 구성
6. OpenStack + Kubernetes 통합 구조 실습
이렇게 진행하면 최종적으로 VM 기반 가상화와 컨테이너 기반 서비스를 함께 운영하는 개인 클라우드 실습 환경을 만들 수 있다.
'시스템 엔지니어 일상 > LINUX' 카테고리의 다른 글
| Redhat Enterprise Linux 10 설치(Develop) (2) | 2025.08.29 |
|---|---|
| Redhat Enterprise Linux Developer(RHEL) ISO 무료 다운로드 (0) | 2025.08.26 |
| Redhat Enterprise Linux 8 디스크 증설 후 Filesystem 생성 하기 (0) | 2023.02.05 |
| Redhat Enterprise Linux 8 nmcli를 통한 bonding 구성 (0) | 2023.02.05 |
| Redhat Enterprise Linux 8 세션 유지 시간 (keep alive time) 설정 (0) | 2023.02.05 |