GPU 서버를 OpenStack에 통합하기 위해 새 Nova Compute 노드를 설정하고, 호스트네임·시간 동기화·OVS 네트워크(DVR)·Nova 및 Neutron 서비스·Ceph RBD 연동·GPU PCI Passthrough를 포함한 주요 구성 요소들을 단계별로 안내한다. 설치 후 서비스 시작, 노드 등록, 검증 절차와 주의사항을 제시한다.
연구실에 있던 GPU 서버들을 이제 OpenStack으로 통합하기 시작했다. 이번에 새로운 Compute 노드를 확장하면서, 그동안 정리하지 못했던 Nova Compute 노드 설치 방법을 처음부터 끝까지 서술하려 한다. 매번 기억에 의존하다가 삽질하는 건 이제 그만
📌
이 글에서 다루는 내용
hostname 및 NTP 시간 동기화 설정
OVS 네트워크 구성 (DVR 모드)
Nova Compute 설치 및 nova.conf 상세 설정
Neutron OVS Agent, L3 Agent, ML2 설정
Ceph RBD 연동 (libvirt secret 포함)
PCI Passthrough (GPU) 설정
서비스 시작 및 노드 등록 검증
OpenStack Nova Compute 노드 통합 구조
🖥️ hostname 설정
OpenStack에서는 내부 통신을 IP로도 하지만, 주로 /etc/hosts에 기록된 호스트네임으로 통신하는 경우가 많다. RabbitMQ, Keystone, Placement 등 거의 모든 서비스가 호스트네임 기반으로 동작하기 때문에, 노드를 추가하기 전에 이 설정을 먼저 해야 한다.
호스트네임 변경
bash
# 호스트네임 설정 (새 컴퓨트 노드에서 실행)
sudo hostnamectl set-hostname dms-compute5
# 적용 확인
hostname
/etc/hosts 수정
컨트롤러와 기존 컴퓨트 노드들, 그리고 새로 추가할 노드의 정보를 모든 노드의 /etc/hosts에 추가한다.
dvr_snat: DVR + SNAT 기능을 모두 수행한다. 컨트롤러/네트워크 노드에서 사용하거나, 우리처럼 모든 노드가 SNAT도 처리하는 구조에서 사용
dvr: DVR만 수행하고 SNAT는 네트워크 노드에 위임. 순수 컴퓨트 전용 노드에 적합
legacy: 기존 중앙 집중식 라우팅. DVR 미사용
ml2_conf.ini
/etc/neutron/plugins/ml2/ml2_conf.ini 파일을 수정한다.
bash
sudo vi /etc/neutron/plugins/ml2/ml2_conf.ini
bash
[DEFAULT]
[ml2]
type_drivers = flat,vlan
# 우리는 tenant 는 vlan, provider 는 flat 을 사용
tenant_network_types = vlan
mechanism_drivers = openvswitch
extension_drivers = port_security
[ml2_type_flat]
flat_networks = provider,vpn
# flat network 에 provider 와 vpn 을 사용
[ml2_type_geneve]
[ml2_type_gre]
[ml2_type_vlan]
network_vlan_ranges = tenant:100:4000
[ml2_type_vxlan]
[ovn]
[ovn_nb_global]
[ovs]
bridge_mappings = provider:br-provider,vpn:br-vpn,tenant:br-tenant
# 위 네트워크 장치들을 설정할때 ovs 실제 이름과 openstack 에서 인식할 이름을 매핑
[ovs_driver]
[securitygroup]
[sriov_driver]
openvswitch_agent.ini
/etc/neutron/plugins/ml2/openvswitch_agent.ini 파일을 수정한다.
bash
sudo vi /etc/neutron/plugins/ml2/openvswitch_agent.ini
bash
[DEFAULT]
enable_distributed_routing = True
[agent]
l2_population = true
enable_distributed_routing = true
[dhcp]
[metadata]
[network_log]
[ovs]
bridge_mappings = provider:br-provider,vpn:br-vpn,tenant:br-tenant
# 위 네트워크 장치들을 설정할때 ovs 실제 이름과 openstack 에서 인식할 이름을 매핑
[securitygroup]
firewall_driver = openvswitch
enable_security_group = true
plugins/ml2/openvswitch_agent.ini
📝
Neutron 설정 파일 정리
파일
역할
neutron.conf
Neutron 전역 설정 (인증, MQ, DB 연결)
l3_agent.ini
L3 라우팅 에이전트 설정 (DVR 모드)
ml2_conf.ini
ML2 플러그인 설정 (네트워크 타입, 드라이버)
openvswitch_agent.ini
OVS 에이전트 설정 (브릿지 매핑, 보안 그룹)
💾 Ceph 연결
위 파일들을 다 반영했으면 이제 Ceph를 연결해야 한다. Nova가 VM 이미지와 ephemeral 디스크를 Ceph RBD에 저장하려면, 컴퓨트 노드에서 Ceph 클러스터에 접근할 수 있어야 한다.
Ceph 클러스터 구성 자체는 별도 페이지에서 정리했으니 아래 링크를 참고하고, 여기서는 Nova 컴퓨트 노드에서 Ceph를 연결하는 방법만 다룬다.
Ceph 클러스터의 설정 파일과 키링을 컴퓨트 노드로 복사한다. 기존에 동작하는 컴퓨트 노드에서 가져오는 것이 가장 확실하다.
bash
# Ceph 클러스터 설정 파일 복사 (Ceph 노드 또는 기존 컴퓨트에서)
scp /etc/ceph/ceph.conf dms-compute5:/etc/ceph/
scp /etc/ceph/ceph.client.nova.keyring dms-compute5:/etc/ceph/
scp /etc/ceph/ceph.client.cinder.keyring dms-compute5:/etc/ceph/
💡
필요한 파일 목록
/etc/ceph/ceph.conf: Ceph 클러스터 설정 (MON 주소 등)
/etc/ceph/ceph.client.nova.keyring: Nova가 Ceph에 인증할 때 사용하는 키
/etc/ceph/ceph.client.cinder.keyring: Cinder 볼륨 접근용 키
키링 권한 설정
bash
# nova 사용자가 읽을 수 있도록 권한 설정
sudo chown ceph:nova /etc/ceph/ceph.client.nova.keyring
sudo chmod 640 /etc/ceph/ceph.client.nova.keyring
sudo chown ceph:cinder /etc/ceph/ceph.client.cinder.keyring
sudo chmod 640 /etc/ceph/ceph.client.cinder.keyring
libvirt Secret 등록
Nova(libvirt)가 Ceph RBD에 접근하려면 libvirt secret을 등록해야 한다. 이 시크릿은 libvirt가 RBD 볼륨을 마운트할 때 인증 정보로 사용된다.
또는 기존 컴퓨트 노드에서 virsh secret-get-value <uuid> 명령으로 현재 등록된 키 값을 확인할 수도 있다.
Ceph 연결 확인
bash
# Ceph 클러스터 상태 확인
sudo ceph -s --id nova
# RBD 풀 접근 확인
sudo rbd ls -p vms --id nova
정상이면 Ceph 클러스터 상태와 RBD 이미지 목록이 출력된다. 여기서 에러 나면 키링부터 다시 확인하자
🚀 서비스 시작 및 노드 등록
모든 설정이 완료되었으면 서비스를 시작하고, 컨트롤러에서 새 노드를 인식시켜야 한다.
컴퓨트 노드에서 서비스 시작
bash
# Nova Compute 서비스 시작
sudo systemctl restart nova-compute
sudo systemctl enable nova-compute
# Neutron OVS Agent 시작
sudo systemctl restart neutron-openvswitch-agent
sudo systemctl enable neutron-openvswitch-agent
# Neutron L3 Agent 시작
sudo systemctl restart neutron-l3-agent
sudo systemctl enable neutron-l3-agent
# libvirtd 재시작 (Ceph secret 반영)
sudo systemctl restart libvirtd
컨트롤러에서 새 노드 발견
Nova는 주기적으로 새 컴퓨트 노드를 자동 발견하지만(기본 300초 간격), 즉시 등록하려면 컨트롤러에서 직접 실행한다.
bash
# 컨트롤러에서 실행
sudo nova-manage cell_v2 discover_hosts --verbose
📝
cell_v2 discover_hosts란?
OpenStack Nova는 Cells v2 아키텍처를 사용하여 대규모 환경에서 컴퓨트 노드들을 관리한다. 새로운 컴퓨트 노드가 추가되면, 해당 노드를 cell에 매핑하는 과정이 필요한데 이게 바로 discover_hosts다. 이 과정을 거쳐야 스케줄러가 새 노드에 인스턴스를 배치할 수 있다.
nova.conf의 [scheduler] discover_hosts_in_cells_interval = 300 옵션을 설정하면 5분마다 자동으로 수행되지만, 노드 추가 직후에는 수동 실행이 빠르다.
등록 확인
bash
# Nova 서비스 목록 확인
openstack compute service list
# 예상 출력 (새 노드가 보여야 함)
+----+----------------+----------------+----------+---------+-------+
| ID | Binary | Host | Zone | Status | State |
+----+----------------+----------------+----------+---------+-------+
| 1 | nova-scheduler | dms-controller | internal | enabled | up |
| 2 | nova-conductor | dms-controller | internal | enabled | up |
| 6 | nova-compute | dms-compute1 | nova | enabled | up |
| 7 | nova-compute | dms-compute2 | nova | enabled | up |
| .. | nova-compute | dms-compute5 | nova | enabled | up | ← 새 노드!
+----+----------------+----------------+----------+---------+-------+
bash
# Neutron Agent 목록 확인
openstack network agent list
# Hypervisor 목록 확인 (리소스 할당 상태)
openstack hypervisor list
openstack hypervisor show dms-compute5
⚠️
State가 down으로 나온다면?
컴퓨트 노드에서 nova-compute 서비스가 실행 중인지 확인: systemctl status nova-compute
로그 확인: tail -f /var/log/nova/nova-compute.log
RabbitMQ 연결 확인: transport_url의 호스트네임/IP와 비밀번호가 정확한지 확인
방화벽 확인: AMQP 포트(5672)가 열려있는지 확인
GPU Passthrough 확인
PCI Passthrough를 설정했다면, 새 노드의 GPU가 정상 인식되는지도 확인한다.
bash
# PCI 디바이스 목록 확인
openstack resource provider list
openstack resource provider inventory list <provider_uuid>
✅ 핵심 정리
✅ hostname + /etc/hosts: 모든 노드에 동일하게 설정. OpenStack 내부 통신의 기본
✅ Chrony 시간 동기화: 컨트롤러를 NTP 소스로 지정. 토큰 만료 방지
✅ OVS 네트워크: provider(flat) + tenant(vlan) 구조. DVR 모드로 라우팅 분산
✅ Nova Compute: KVM 지원 확인 후 설치. nova.conf에서 인증, Ceph, PCI 설정
✅ Neutron Agent: OVS Agent + L3 Agent(DVR). 4개 설정 파일 모두 반영 필수
✅ Ceph RBD 연동: ceph-common 설치 → 설정/키링 복사 → libvirt secret 등록
✅ GPU Passthrough: passthrough_whitelist에 실제 디바이스 정보 기록. 컨트롤러에도 동일한 alias 필요
✅ 노드 등록: nova-manage cell_v2 discover_hosts로 즉시 등록. openstack compute service list로 확인
⚠️ 주의사항
⚠️ 비밀번호 일관성: CHANGEPASSWORD 부분은 반드시 컨트롤러 Keystone 설정과 동일해야 한다. 하나라도 틀리면 인증 실패
⚠️ UUID 동기화: rbd_secret_uuid는 모든 컴퓨트 노드에서 동일해야 한다. 라이브 마이그레이션 시 UUID가 다르면 실패
⚠️ PCI 디바이스 확인: passthrough_whitelist의 vendor_id/product_id는 반드시 lspci -nn으로 현재 노드의 실제 값을 확인하고 기록해야 한다
⚠️ OVS 브릿지 순서: OVS 브릿지가 먼저 생성되어 있어야 Neutron Agent가 정상 시작된다. 서비스 시작 전 ovs-vsctl show로 확인하자
⚠️ HTTP vs HTTPS: OpenStack Install Guide 기본은 HTTPS지만, SSL 미적용 환경에서는 모든 URL을 http://로 변경해야 한다
⚠️ 로그 확인 습관: 문제 발생 시 /var/log/nova/nova-compute.log와 /var/log/neutron/*.log를 가장 먼저 확인하자