OpenStack Ussuri : Nova

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 |
+----+----------------+------------+----------+---------+-------+----------------------------+

 

RSS Feed
마지막 수정일자