클라우드/OpenStack

Nova 설치 & Keystone 연동

mini'scloud 2025. 7. 28. 00:02
  • 이번에는 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 파일로 저장됨)