- 이번에는 Nova를 구축해볼 것이다
필수 패키지 설치
sudo apt update
sudo apt install nova-api nova-conductor nova-scheduler nova-novncproxy placement-api python3-novaclient
Nova용 데이터베이스 생성 및 권한 부여
-- 데이터베이스 생성
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
CREATE DATABASE placement;
-- nova 사용자 생성 및 권한 부여
CREATE USER 'nova'@'localhost' IDENTIFIED BY 'openstack';
CREATE USER 'nova'@'%' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%';
-- placement 사용자 생성 및 권한 부여
CREATE USER 'placement'@'localhost' IDENTIFIED BY 'placementpass';
CREATE USER 'placement'@'%' IDENTIFIED BY 'placementpass';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%';
FLUSH PRIVILEGES;
EXIT;
- 앞에서 설치하고 권한을 부여했던거라 앞에서 했으면 패스해도됨

/etc/nova/nova.conf 구성 (INI 형식)
- controller ip가 172.16.0.254이니깐 이걸 바탕으로 아래 내용을 추가할거임
[DEFAULT]
log_dir = /var/log/nova
state_path = /var/lib/nova
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:guest@controller
//RABBIT_PASS 자리에 rabbit 비밀번호 써야할 거임
//지금은 guest 계정으로 접속하기 때문에 로컬에서만 접속될거임
[api]
auth_strategy = keystone
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://172.16.0.254:6080/vnc_auto.html
[glance]
api_servers = http://172.16.0.254:9292
[oslo_concurrency]
lock_path = $state_path/tmp
[api_database]
connection = mysql+pymysql://nova:openstack@controller/nova_api
[database]
connection = mysql+pymysql://nova:openstack@controller/nova
[keystone_authtoken]
www_authenticate_uri = https://172.16.0.254:5000/v3
auth_url = https://172.16.0.254:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = nova
[placement]
auth_url = http://172.16.0.254:5000
os_region_name = RegionOne
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = placementpass
[service_user]
send_service_user_token = true
auth_url = http://controller:5000/v3
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = nova # 실제 nova 유저 비밀번호로 변경

- rabbitmq는 guest에서만 접속을 하고 있는 것을 알 수 있음
- 그래서 추후에 외부에서 접속하기 위해서는 사용자를 따로 만들어줘야 함
이후 재시작
sudo systemctl restart nova-api nova-conductor nova-scheduler
데이터베이스 초기화
sudo su -s /bin/sh -c "nova-manage api_db sync" nova
sudo su -s /bin/sh -c "nova-manage db sync" nova
sudo su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
sudo su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1" nova
sudo su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

서비스 활성화 및 시작
sudo systemctl restart nova-api nova-conductor nova-scheduler nova-novncproxy
sudo systemctl enable nova-api nova-conductor nova-scheduler nova-novncproxy
컴퓨트 노드 추가했을때 (선택)
# 컴퓨트 노드에서 실행
sudo apt install nova-compute
sudo systemctl restart nova-compute
# 컨트롤러에서 호스트 발견
sudo su -s /bin/sh -c "nova-manage cell_v2 discover_hosts" nova
openstack compute service list
서비스 상태를 확인할 수 있음
Nova 서비스
서비스 관리 방식
- systemd(sudo systemctl start, sudo systemctl stop) 및 /lib/systemd/system/ 유닛 파일 사용
주요 Nova 및 관련 서비스 목록
- nova-api
- nova-scheduler
- nova-conductor
- nova-novncproxy
- nova-compute(컴퓨트 노드에서)
- libvirtd(가상화 데몬, 컴퓨트 노드에서)
- glance-api(이미지 서비스)
- (nova-network, nova-objectstore, nova-cert 등은 최신 버전에서 사용하지 않음)
- 네트워크, 오브젝트 스토리지, 인증 관련 기능은 각각 Neutron, Swift/Glance, 별도 인증 시스템(Keystone 등)으로 완전히 대체되었음
- 문서나 예전 가이드에서 나온 흔적만 남아 있을 뿐, 현재 구축/운영 시에는 신경쓸 필요가 없는 옛 컴포넌트
서비스 시작/정지 방법
컨트롤러 노드에서 Nova 서비스 관리
# 서비스 시작
sudo systemctl start nova-api nova-scheduler nova-conductor nova-novncproxy
# 서비스 정지
sudo systemctl stop nova-api nova-scheduler nova-conductor nova-novncproxy
# 서비스 자동 시작(부팅 시)
sudo systemctl enable nova-api nova-scheduler nova-conductor nova-novncproxy
- nova-conductor, nova-novncproxy 등은 컨트롤러에서만 관리함
컴퓨트 노드에서 Nova 서비스 관리
# nova-compute 서비스 시작/정지/자동시작
sudo systemctl start nova-compute
sudo systemctl stop nova-compute
sudo systemctl enable nova-compute
# libvirtd(가상화 데몬) 시작/정지/자동시작
sudo systemctl start libvirtd
sudo systemctl stop libvirtd
sudo systemctl enable libvirtd
- 최신 환경에서는 libvirt-bin 대신 libvirtd 서비스를 이용함
Glance(이미지 서비스) 관리
sudo systemctl start glance-api
sudo systemctl stop glance-api
sudo systemctl enable glance-api
모든 Nova 서비스 일괄 관리 (컨트롤러 기준)
# 모든 Nova 서비스 시작
sudo systemctl start 'nova-*'
# 모든 Nova 서비스 정지
sudo systemctl stop 'nova-*'
- 개별 서비스명을 나열해서 관리해도 괜찮음
서비스 상태 확인
sudo systemctl status nova-api
sudo systemctl status nova-compute
sudo systemctl status libvirtd
- 최신 Ubuntu에서는 모든 OpenStack 서비스는 systemctl로 관리하며, 필요에 따라 enable로 부팅 시 자동 시작을 설정함
Openstack Nova 서비스의 동작 원리
Nova는 다양한 컴포넌트로 구성된 분산 아키텍처임
컴포넌트들은 각자 역할을 수행하며, 서로 메시지 큐 (RabbitMQ 등..)와 공유 데이터베이스를 통해 통신을 함
주요 Nova 서비스의 역할

동작 흐름
- API 서버 (nova-api)
- 사용자가 REST API (또는 오픈스택 CLI, 대시보드 등)으로 요청을 보냄
- nova-api는 keystone으로 권한 확인 후, 요청을 처리 함
- 메시지 큐(RabbitMQ 등..)와 RPC
- nova-api는 내부적으로 oslo.messaging 라이브러리를 통해 메시지 큐로 명령을 전달함
- 인스턴스 생성 요청은 nova-scheduler로 전달됨
- nova-scheduler
- nova-scheduler는 어떤 컴퓨트 노드에 VM을 배치할지 결정함
- 결정된 노드에 메시지 큐를 통해 작업을 전달함
- nova-compute
- nova-compute는 실제 하이퍼바이저(KVM/QEMU 등..)를 제어해 VM을 생성/삭제 관리함
- VM 상태 변화 등은 conductor를 통해 데이터베이스에 기록됨
- nova-conductor
- nova-compute가 직접 DB에 접근하지 않고, conductor를 통해 DB작업을 수행함
- 공유 데이터베이스
- Nova의 모든 서비스는 논리적으로 공유된 SQL 데이터베이스를 사용해 인스턴스, 상태, 할당 정보 등을 관리함
- 기타 서비스와의 연동
- Nova는 glance, Neutron, keystonem placement(자원 추적)등과 연동해 전체 클라우드 인프라를 완성함
시스템 구조 특징
- 수평 확장성
- 서비스는 여러 서버에 분산 배치 가능함
- nova-compute는 컴퓨트 노드마다 실행됨
- 메시지 기반 통신
- 셀 구조
- 대규모 환경에서는 nova를 여러 셀로 분할해 확장성과 장애 격리성을 강화할 수 있음
Openstack CLI 설치
sudo apt update
sudo apt install python3-openstackclient
Keystone 및 Nova 상태확인하기
systemctl status apache2
systemctl status nova-api
/etc/nova/nova.conf 파일 확인하기

- password 계속 틀려서 오류가 났었음..
- 503server error로 인증 머시기 안된다고...
키페어 생성 및 관리
openstack keypair create openstack > openstack.pem
chmod 600 openstack.pem
생성하고 cat openstack.pem 을 통해서 pem키를 확인할 수 있음
정리하자면)
OpenStack CLI: python-openstackclient란?
- python-openstackclient는 OpenStack(클라우드 시스템)의 거의 모든 기능을 명령줄 하나로 통합 관리할 수 있게 해주는 공식 도구
- 서버에 python3-openstackclient만 설치하면, 컴퓨트(가상머신), 스토리지, 네트워크, 이미지 등 모든 리소스를 openstack이라는 커맨드 하나로 컨트롤할 수 있음
- 예전 방식(예: novaclient, euca2ools 등)은 더 이상 쓰지 않고, 최신 오픈스택에서는 이 툴만 있으면 됨
admin-openrc.sh이란?
- OpenStack CLI는 인증 정보(누가, 어떤 프로젝트, 어떤 사용자, 암호 등)가 필요함
- 이 정보를 매번 입력하지 않고, 환경설정 파일(주로 admin-openrc.sh)에 미리 저장해서 사용
- 명령어를 쓸때마다 source ~/admin-openrc.sh 명령어를 불러와서 써주면 됨
- source를 한 후에는, 터미널에 입력하는 모든 openstack ... 명령에서 인증값을 자동으로 가져다씀
키페어 생성과 관리
- 키페어: 인스턴스(가상머신) SSH 접속 시 비밀번호 대신 사용하는 공개키/개인키 쌍
- 공개키: 클라우드에 등록되어 VM에 저장
- 개인키: 본인만 소유 (개인키는 openstack.pem 파일로 저장됨)
'클라우드 > OpenStack' 카테고리의 다른 글
| 오픈스택 클러스터링 & 인프라 서비스와 배포 (0) | 2025.07.30 |
|---|---|
| 오픈스택 아키텍처 (0) | 2025.07.30 |
| Neutron 네트워크(2) - 아키텍처, 구현 (0) | 2025.07.22 |
| Neutron 네트워크 (1) (0) | 2025.07.22 |
| Neutron 이해를 위한 기초 네트워크 (0) | 2025.07.20 |