본문 바로가기

Cloud/Openstack

openstack 최신 yoga버전 수동 설치 - Nova

Nova - Controller Node 설치

Database 생성

1. 데이터베이스 액세스 클라이언트를 사용하여 root사용자로 데이터베이스 서버에 연결합니다.

# mysql

2. nova데이터베이스 생성 :

MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

3. nova데이터베이스에 액세스 권한 부여 :

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
 IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
 IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
 IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
 IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
 IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
 IDENTIFIED BY 'NOVA_DBPASS';

4. admin관리자 전용 CLI 명령을 사용하기 위해 아래 명령어 실행합니다.

# . admin-openrc

5. 사용자 생성

# openstack user create --domain default --password-prompt nova

6. 프로젝트에 사용자를 admin 역할로 추가합니다.

# openstack role add --project service --user nova admin

7. nova service를 추가해줍니다.

# openstack service create --name nova \
 --description "OpenStack Compute" compute

8. nova API 서비스 엔드포인트를 생성합니다.

# openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1
# openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1
# openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1


구성 요소 설치 및 구성

1. 패키지 설치 :

# apt install nova-api nova-conductor nova-novncproxy nova-scheduler

2. /etc/nova/nova.conf 파일을 아래와 같이 수정해줍니다.

[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
my_ip = 10.0.2.4

[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

[vnc]
enabled = true
# ...
server_listen = $my_ip
server_proxyclient_address = $my_ip

[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
 

3. nova-api database를 채워줍니다.

# su -s /bin/sh -c "nova-manage api_db sync" nova

4. cell0데이터베이스 등록 :

# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

5. cell1셀 만들기 :

# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

6. nova 데이터베이스를 채웁니다.

# su -s /bin/sh -c "nova-manage db sync" nova

7. nova cell0 및 cell1이 올바르게 등록되었는지 확인합니다.

# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
+-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
|  Name |                 UUID                 |                   Transport URL                    |                     Database Connection                      | Disabled |
+-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
| cell0 | 00000000-0000-0000-0000-000000000000 |                       none:/                       | mysql+pymysql://nova:****@controller/nova_cell0?charset=utf8 |  False   |
| cell1 | f690f4fd-2bc5-4f15-8145-db561a7b9d3d | rabbit://openstack:****@controller:5672/nova_cell1 | mysql+pymysql://nova:****@controller/nova_cell1?charset=utf8 |  False   |
+-------+--------------------------------------+----------------------------------------------------+--------------------------------------------------------------+----------+
 

설치완료

  • 컴퓨팅 서비스를 다시 시작합니다.
systemctl restart nova-api
systemctl restart nova-scheduler
systemctl restart nova-conductor
systemctl restart nova-novncproxy
 
 

Nova - Compute Node 설치

이 서비스는 인스턴스 또는 가상 머신(VM)을 배포하기 위해 여러 하이퍼바이저를 지원합니다. 단순성을 위해 이 구성은 가상 머신에 대한 하드웨어 가속을 지원하는 컴퓨팅 노드에서 커널 기반 VM(KVM) 확장과 함께 QEMU(Quick EMUlator) 하이퍼바이저를 사용합니다. 레거시 하드웨어에서 이 구성은 일반 QEMU 하이퍼바이저를 사용합니다.

여기선 컨트롤러 노드와 컴퓨트노드를 합쳐서 구축할 예정이라 아래 섹션에서 중복된 옵션이 있을 수 있습니다. 중복되는것은 무시하고 새로 추가되는 옵션만 넣으면 됩니다.

구성 요소 설치 및 구성

1. 패키지 설치 :

# apt install nova-compute

2. /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

[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


설치완료

1. 컴퓨팅 노드가 가상 머신에 대한 하드웨어 가속을 지원하는지 확인합니다.

$ egrep -c '(vmx|svm)' /proc/cpuinfo

이 명령이 one or greater을 반환하면 컴퓨팅 노드는 일반적으로 추가 구성이 필요하지 않은 하드웨어 가속을 지원합니다.

이 명령이 zero를 반환하는 경우 컴퓨팅 노드는 하드웨어 가속을 지원하지 않으며 libvirt KVM 대신 QEMU를 사용하도록 구성해야 합니다.

  • /etc/nova/nova-compute.conf파일의 [libvirt] 섹션을 다음과 같이 수정합니다 .
[libvirt]
# ...
virt_type = qemu
  • 컴퓨팅 서비스를 다시 시작합니다.
systemctl restart nova-compute


cell database에 컴퓨팅 노드 추가(controller node에서 실행)

1. 관리자 자격 증명을 소싱하여 관리자 전용 CLI 명령을 활성화한 다음 데이터베이스에 컴퓨팅 호스트가 있는지 확인합니다.

# . admin-openrc
# openstack compute service list --service nova-compute
+--------------------------------------+--------------+-----------------------+------+---------+-------+----------------------------+
| ID 								   | 	Binary    | Host  				  | Zone | Status  | State | Updated At 				|
+--------------------------------------+--------------+-----------------------+------+---------+-------+----------------------------+
| 8b5bd797-318a-4aa9-ab29-c41dedbc2cd8 | nova-compute | localhost.localdomain | nova | enabled | up    | 2022-05-10T06:18:27.000000 |
+--------------------------------------+--------------+-----------------------+------+---------+-------+----------------------------+

2. 컴퓨팅 호스트 검색:

# 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': 906187b0-de1c-4676-a868-330a735d29a5
Checking host mapping for compute host 'localhost.localdomain': 783025d7-8aba-4fa6-9af3-d07dd01169a9
Creating host mapping for compute host 'localhost.localdomain': 783025d7-8aba-4fa6-9af3-d07dd01169a9
Found 1 unmapped computes in cell: 906187b0-de1c-4676-a868-330a735d29a5
 
  • 추가사항
    새 compute 노드를 추가할 때는 컨트롤러 노드에서 nova-management cell_v2 discover_hosts를 실행하여 새 compute 노드를 등록해야 합니다. 또는 /etc/nova/nova.conf에서 적절한 간격을 설정할 수 있습니다.
[scheduler]
discover_hosts_in_cells_interval  =  300