컴퓨트 노드에 nova-compute 를 설치하고 libvirt/KVM 으로 인스턴스를 띄울 수 있게 한다. 컨트롤러 노드 설치를 먼저 끝낸다. 컴퓨트 노드는 데이터베이스에 직접 붙지 않으므로 [database] 절은 쓰지 않는다. NOVA_PASS · PLACEMENT_PASS · RABBIT_PASS 는 미리 정한 값으로, MANAGEMENT_INTERFACE_IP_ADDRESS 는 컴퓨트 노드 관리용 IP(예: 10.0.0.31)로 바꾼다.
Ubuntu 24.04
apt install nova-compute
CentOS Stream 9 · RHEL 9
dnf install openstack-nova-compute
/etc/nova/nova.conf 의 다음 절에 값을 넣는다.
[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
[api]
auth_strategy = keystone
[keystone_authtoken]
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS
[service_user]
send_service_user_token = true
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
[glance]
api_servers = http://controller:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = PLACEMENT_PASS
novncproxy_base_url 의 controller 는 브라우저가 접근할 수 있는 주소여야 한다. 이름을 풀 수 없는 클라이언트가 있으면 컨트롤러의 관리용 IP 로 적는다.
CPU 가 하드웨어 가상화를 지원하는지 확인한다.
egrep -c '(vmx|svm)' /proc/cpuinfo
결과가 0 이면 KVM 을 쓸 수 없으므로 QEMU 에뮬레이션으로 바꾼다. Ubuntu 는 /etc/nova/nova-compute.conf, RHEL 계열은 /etc/nova/nova.conf 의 [libvirt] 절이다.
[libvirt]
virt_type = qemu
Ubuntu 24.04
systemctl restart nova-compute
CentOS Stream 9 · RHEL 9
systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service
nova-compute 가 뜨지 않으면 /var/log/nova/nova-compute.log 를 본다. AMQP server on controller:5672 is unreachable 이면 컨트롤러의 방화벽에서 5672/tcp 가 막힌 것이다.
RHEL 계열에서 firewalld 를 쓰면 VNC 포트 범위를 연다.
firewall-cmd --permanent --add-port=5900-5999/tcp
firewall-cmd --reload
컨트롤러 노드에서 수행한다. 아래 출력은 2022년 테스트 때의 것이다.
. admin-openrc
openstack compute service list --service nova-compute
+----+--------------+----------+------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+--------------+----------+------+---------+-------+----------------------------+
| 7 | nova-compute | compute1 | nova | enabled | up | 2022-08-04T04:21:25.000000 |
+----+--------------+----------+------+---------+-------+----------------------------+
컴퓨트 호스트를 cell 에 등록한다.
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting computes from cell 'cell1': 3ebc73d4-8da6-40fa-8967-d5c526912114
Found 0 unmapped computes in cell: 3ebc73d4-8da6-40fa-8967-d5c526912114
컴퓨트 노드를 자주 추가한다면 컨트롤러 nova.conf 의 [scheduler] 절에 discover_hosts_in_cells_interval = 300 을 두어 자동으로 검색하게 한다.
컨트롤러 노드에서 실행한다.
. admin-openrc
openstack compute service list
openstack catalog list
openstack image list
nova-status upgrade check
nova-compute 가 up 으로 보이고 upgrade check 항목이 모두 Success 면 Neutron 설치로 넘어간다.
CentOS Stream 8 · Victoria 의 nova.conf 에는 다음 항목이 더 있었다. 현행 릴리스에서는 제거됐거나 기본값이 돼 넣지 않는다.
[DEFAULT]
enabled_apis = osapi_compute,metadata
use_neutron = true
firewall_driver = nova.virt.firewall.NoopFirewallDriver