OpenStack Ussuri : Nova
OpenStack Ussuri : Nova
----------------------- -----------------------
| [ Controller Node ] | | [ Compute Node ] |
| | | Libvirt |
| MariaDB RabbitMQ | | Nova-compute |
| Memcached Keystone | | Open vSwitch |
| httpd nova | | L2 Agent |
| Nova-API | -----------------------
-----------------------
OpenStack Ussuri : Nova
- Nova는 OpenStack에서 인스턴스를 생성하는 서비스입니다.
- Nova에 대한 자세한 설명은 Nova를 참조해주세요.
Nova, ceilometer service 및 User 생성
$ controller ~(keystone)> openstack user create --domain default --project service --password qwer1234 nova
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| default_project_id | 7c10c02365be496fb47f12bfd40fe4a7 |
| domain_id | default |
| enabled | True |
| id | f26027517d5e4b5b984b5db8d42398c8 |
| name | nova |
| options | {} |
| qwer1234_expires_at | None |
+---------------------+----------------------------------+
$ controller ~(keystone)> openstack user create --domain default --project service --password qwer1234 placement
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| default_project_id | 7c10c02365be496fb47f12bfd40fe4a7 |
| domain_id | default |
| enabled | True |
| id | 2394500b4512456f9d9d5066a5ecb1f7 |
| name | placement |
| options | {} |
| qwer1234_expires_at | None |
+---------------------+----------------------------------+
$ controller ~(keystone)> openstack role add --project service --user nova admin
$ controller ~(keystone)> openstack role add --project service --user placement admin
$ controller ~(keystone)> openstack service create --name nova --description "OpenStack Compute service" compute
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Compute service |
| enabled | True |
| id | 28d495eca718439f9dc6ce395e0720dc |
| name | nova |
| type | compute |
+-------------+----------------------------------+
$ controller ~(keystone)> openstack service create --name placement --description "OpenStack Compute Placement service" placement
+-------------+-------------------------------------+
| Field | Value |
+-------------+-------------------------------------+
| description | OpenStack Compute Placement service |
| enabled | True |
| id | 8515d3d046834de9b71b2938aae89898 |
| name | placement |
| type | placement |
+-------------+-------------------------------------+
$ controller ~(keystone)> openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s
--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | f13ca97a20eb46a3a1c1dfab546a00cc |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 28d495eca718439f9dc6ce395e0720dc |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
$ controller ~(keystone)> openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 1bc41c829f2f47e7962cba46f0da8ddc |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 28d495eca718439f9dc6ce395e0720dc |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
$ controller ~(keystone)> openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------+
| Field | Value |
+--------------+-------------------------------------------+
| enabled | True |
| id | 8022a415f22c400c92989320a2be3133 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 28d495eca718439f9dc6ce395e0720dc |
| service_name | nova |
| service_type | compute |
| url | http://controller:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------+
$ controller ~(keystone)> openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 5e988f2be72242f0b3923e27e9db009c |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8515d3d046834de9b71b2938aae89898 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
$ controller ~(keystone)> openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | a68cf8b6eeb043c2aa1ec95d7711cb50 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8515d3d046834de9b71b2938aae89898 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
$ controller ~(keystone)> openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 63e47fcbfd7841dd95bb4d9d9a910ab5 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8515d3d046834de9b71b2938aae89898 |
| service_name | placement |
| service_type | placement |
| url | http://controller:8778 |
+--------------+----------------------------------+
Nova 유저의 DB를 생성합니다.
$ controller> mysql -u root -p
$ MariaDB> create database nova;
$ MariaDB> grant all privileges on nova.* to nova@'localhost' identified by 'qwer1234';
$ MariaDB> grant all privileges on nova.* to nova@'%' identified by 'qwer1234';
$ MariaDB> create database nova_api;
$ MariaDB> grant all privileges on nova_api.* to nova@'localhost' identified by 'qwer1234';
$ MariaDB> grant all privileges on nova_api.* to nova@'%' identified by 'qwer1234';
$ MariaDB> create database nova_cell0;
$ MariaDB> grant all privileges on nova_cell0.* to nova@'localhost' identified by 'qwer1234';
$ MariaDB> grant all privileges on nova_cell0.* to nova@'%' identified by 'qwer1234';
$ MariaDB> create database placement;
$ MariaDB> grant all privileges on placement.* to placement@'localhost' identified by 'qwer1234';
$ MariaDB> grant all privileges on placement.* to placement@'%' identified by 'qwer1234';
$ MariaDB> flush privileges;
$ MariaDB> exit;
Nova 설치
$ controller> dnf --enablerepo=centos-openstack-ussuri,powertools,epel -y install openstack-nova openstack-placement-api
# nova 및 관련 모듈을 설치합니다.
$ controller> vi /etc/nova/nova.conf
[DEFAULT]
my_ip = 10.10.10.10
# my_ip는 반드시 IP로 적어주세요 !
state_path = /var/lib/nova
enabled_apis = osapi_compute,metadata
log_dir = /var/log/nova
transport_url = rabbit://openstack:qwer1234@controller
[api]
auth_strategy = keystone
[glance]
api_servers = http://controller:9292
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
[oslo_concurrency]
lock_path = $state_path/tmp
[api_database]
connection = mysql+pymysql://nova:qwer1234@controller/nova_api
[database]
connection = mysql+pymysql://nova:qwer1234@controller/nova
[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 = qwer1234
[placement]
auth_url = http://controller:5000
os_region_name = RegionOne
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = placement
password = qwer1234
[wsgi]
api_paste_config = /etc/nova/api-paste.ini
$ controller> vi /etc/placement/placement.conf
[DEFAULT]
debug = false
[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 = placement
password = qwer1234
[placement_database]
connection = mysql+pymysql://placement:qwer1234@controller/placement
$ controller> vi /etc/httpd/conf.d/00-placement-api.conf
<Directory /usr/bin>
Require all granted
</Directory>
# 15번 줄에 추가시킵니다.
$ controller> su -s /bin/bash placement -c "placement-manage db sync"
$ controller> su -s /bin/bash nova -c "nova-manage api_db sync"
$ controller> su -s /bin/bash nova -c "nova-manage cell_v2 map_cell0"
$ controller> su -s /bin/bash nova -c "nova-manage db sync"
$ controller> su -s /bin/bash nova -c "nova-manage cell_v2 create_cell --name cell1"
# nova DB에 임포트 시킵니다.
$ controller> semanage port -a -t http_port_t -p tcp 8778
$ controller> firewall-cmd --add-port={6080/tcp,6081/tcp,6082/tcp,8774/tcp,8775/tcp,8778/tcp} --permanent
$ controller> firewall-cmd --reload
$ controller> systemctl restart httpd
$ controller> chown placement. /var/log/placement/placement-api.log
$ controller> for service in api conductor scheduler novncproxy; do
systemctl enable --now openstack-nova-$service
done
# Selinux 및 방화벽을 설정합니다.
$ controller ~(keystone)> openstack compute service list
+----+----------------+------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+----------------+------------+----------+---------+-------+----------------------------+
| 4 | nova-conductor | controller | internal | enabled | up | 2020-08-06T12:10:34.000000 |
| 5 | nova-scheduler | controller | internal | enabled | up | 2020-08-06T12:10:38.000000 |
+----+----------------+------------+----------+---------+-------+----------------------------+
Conpute node Nova 설치
nova 설차
- Nova 서비스를 설치하기 전에 가상화를 위한 KVM + QEMU를 설치합니다.
- 이를 위해서는 Inter VT나 AMD-V가 필요합니다. ( CPU )
$ lsmod | grep kvm
kvm_amd 110592 0
ccp 98304 1 kvm_amd
kvm 786432 1 kvm_amd
irqbypass 16384 1 kvm
$ compute> dnf --enablerepo=centos-openstack-ussuri,powertools,epel -y install qemu-kvm libvirt virt-install libguestfs-tools
# KVM 관련 모듈을 설치합니다.
$ compute> systemctl enable --now libvirtd
# libvirtd 서비스를 등록 및 시작합니다.
$ compute> nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
# br0의 가상 브릿지를 추가합니다.
$ compute> nmcli connection modify br0 ipv4.addresses 10.10.10.30/24 ipv4.method manual
# 가상 브리지의 IP를 추가합니다. ( compute node ip )
$ compute> nmcli connection modify br0 ipv4.gateway 10.10.10.10
# 가상 브리지의 GATEWAY를 등록합니다.
$ compute> nmcli connection modify br0 ipv4.dns 8.8.8.8
# 가상 브릿지의 DNS를 등록합니다.
$ compute> nmcli connection del ens34
# 본래의 네트워크 인터페이스를 삭제합니다.
$ compute> nmcli connection add type bridge-slave autoconnect yes con-name ens34 ifname ens34 master br0
# 삭제한 네트워크 인터페이스 대신 브릿지를 매핑시키고 네트워크를 재시작 시킵니다.
# 제 compute node의 내부대역 IP는 10.10.10.30/24 ens34입니다 햇갈리지 마세요 !
$ compute> init 6
$ compute> ipfconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.10.10.30 netmask 255.255.255.0 broadcast 10.10.10.255
inet6 fe80::6765:fe91:a94b:5529 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:80:33:15 txqueuelen 1000 (Ethernet)
RX packets 465 bytes 56335 (55.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 348 bytes 66663 (65.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens34: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:80:33:15 txqueuelen 1000 (Ethernet)
RX packets 471 bytes 63205 (61.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 450 bytes 75797 (74.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# 재시작후 네트워크 인터페이스를 확인하면 위와 같이 생성된 것을 확인할 수 있습니다.
$ compute> dnf --enablerepo=centos-openstack-ussuri,powertools,epel -y install openstack-nova-compute
# nova 및 관련 모듈을 설치합니다.
$ controller> scp /etc/nova/nova.conf compute:/etc/nova/nova.conf
# nova의 기본설정파일을 복사합니다.
$ compute> vi /etc/nova/nova.conf
[default]
my_ip = 10.10.10.30
# my_ip는 반드시 IP로 적어주세요 !
[libvirt]
virt_type = qemu
[vnc]
enabled = True
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
# nova관련 설정을 추가합니다.
$ compute> firewall-cmd --add-port=5900-5999/tcp --permanent
$ compute> firewall-cmd --reload
$ compute> systemctl enable --now libvirtd
$ compute> systemctl enable --now openstack-nova-compute
Nova 설치 확인
$ controller> su -s /bin/bash nova -c "nova-manage cell_v2 discover_hosts"
# DB에 compute의 대한 설정을 업데이트 합니다.
$ controller> nova-manage cell_v2 discover_hosts --verbose
# compute 노드가 검색이 안되었을 시 추가적으로 검색합니다.
$ controller ~(keystone)> openstack compute service list
+----+----------------+------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+----+----------------+------------+----------+---------+-------+----------------------------+
| 4 | nova-conductor | controller | internal | enabled | up | 2020-08-06T21:40:34.000000 |
| 5 | nova-scheduler | controller | internal | enabled | up | 2020-08-06T21:40:37.000000 |
| 8 | nova-compute | compute | nova | enabled | up | 2020-08-06T21:40:36.000000 |
+----+----------------+------------+----------+---------+-------+----------------------------+
마지막 수정일자