Nova

1
2970

Kiến trúc Nova

Nova là thành phần chính quản lý các VM trên cloud, đóng vai trò quan trọng trong việc cung cấp dịch vụ dạng IaaS.

Nova sẽ tương tác với Keystone để xác thực và Glance cho lưu trữ và image. Truy cập tới Glance được giới hạn theo project, user; ngoài ra cũng có thể đặt giới hạn quota theo project.

Nova bao gồm các thành phần sau:

  • Service ‘nova-api’: nhận và phản hồi các truy vấn API compute của người dùng
  • Service ‘nova-api-metadata’: phục vụ riêng cho các API về metadata
  • Service ‘nova-compute’: workder daemon để tạo/xóa VM thông qua hypervisor API
    • XenAPI cho XenServer/XCP
    • libvirt cho KVM/QEMU
    • VMwareAPI cho VMware
  • Service ‘nova-placement-api’: phụ trách quản lý tài nguyên (inventory usage)
  • Service ‘nova-scheduler’: nhận request từ queue và xác định cnode để chuyển tới xử lý
  • Module ‘nova-conductor’: hỗ trợ giao tiếp giữa dịch vụ nova-compute và nova-db
  • Daemon ‘nova-consoleauth’: xác thực token cho user đến qua console proxy (nova-novncproxy/nova-xvpvncproxy), cần cho console proxy hoạt động
  • Daemon ‘nova-novncproxy’: cung cấp proxy truy cập vào VM thông qua VNC connection, hỗ trợ browser novnc client
  • Daemon ‘nova-spicehtml5proxy’: cung cấp proxy truy cập vào VM thông qua SPICE connection, hỗ trợ browser HTML5
  • Daemon ‘nova-xvpvncproxy’: cung cấp proxy truy cập vào VM thông qua VNC connection, hỗ trợ OpenStack java client
  • Queue xử lý: RabbitMQ (hoặc một phần mềm AMQP tương tự), quản lý giao tiếp giữa các daemon
  • SQL database: có thể là DB backend bất kỳ mà SQLAlchemy hỗ trợ, lưu trữ dữ liệu bao gồm
    • Available instance types
    • Instances in use
    • Available networks
    • Projects

Chuẩn bị

Tạo database và phân quyền cho Compute service

CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
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';

Khởi tạo user cần cho nova

Xác thực vào ‘admin’ dùng openstack-client

$ source keystone-admin

Tạo user ‘nova’

$ openstack user create --domain default --password-prompt nova
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 8a7dbf5279404537b1c7b86c033620fe |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Gán role ‘admin’ cho user ‘nova’ trên project ‘service’

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

Tạo service ‘nova’

$ openstack service create --name nova --description "OpenStack Compute" compute
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 060d59eac51b4594815603d75a00aba2 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

Tạo endpoint cho nova-api

$ openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
 
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 3c1caa473bfe4390a11e7177894bcc7b          |
| interface    | public                                    |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1               |
+--------------+-------------------------------------------+
 
$ openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
 
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | e3c918de680746a586eac1f2d9bc10ab          |
| interface    | internal                                  |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1               |
+--------------+-------------------------------------------+
 
$ openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
 
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 38f7af91666a47cfb97b4dc790b94424          |
| interface    | admin                                     |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1               |
+--------------+-------------------------------------------+

Tạo user cho placement service

$ openstack user create --domain default --password-prompt placement
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | fa742015a6494a949f67629884fc7ec8 |
| name                | placement                        |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Gán role ‘admin’ cho user ‘placement’

$ openstack role add --project service --user placement admin

Tạo service ‘placement’

$ openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Placement API                    |
| enabled     | True                             |
| id          | 2d1a27022e6e4185b86adac4444c495f |
| name        | placement                        |
| type        | placement                        |
+-------------+----------------------------------+

Tạo endpoint cho placement-api

$ openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 2b1b2637908b4137a9c2e0470487cbc0 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 02bcda9a150a4bd7993ff4879df971ab |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 3d71177b9e0f406f98cbff198d74b182 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+

Cài đặt và cấu hình controller

Cài đặt packages

# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-placement-api

Cấu hình nova-api

/etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
my_ip = 10.0.0.11
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

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

[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/novsapi_compute,metadata

[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller

[api]
auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
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
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip

[glance]
api_servers = http://controller:9292

[oslo_concurrency]
lock_path = /var/lib/nova/tmp

[placement]
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:35357/v3
username = placement
password = PLACEMENT_PASS

Cấu hình httpd cho nova-api

/etc/httpd/conf.d/00-nova-placement-api.conf
<Directory /usr/bin>
   <IfVersion >= 2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
</Directory>

Start httpd

# systemctl restart httpd

Khởi tạo database

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

Đăng ký ‘cell0’

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

Tạo cell ‘cell1’

# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
109e1d4b-536a-40d0-83c6-5f121b82b650

Khởi tạo lại database

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

Kiểm tra ‘cell0’ và ‘cell1’ đã được đăng ký

# nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name  | UUID                                 |
+-------+--------------------------------------+
| cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |
| cell0 | 00000000-0000-0000-0000-000000000000 |
+-------+--------------------------------------+

Start dịch vụ

# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

Cài đặt và cấu hình cnode

Cài đặt packages

# yum install openstack-nova-compute

Cấu hình nova-api

/etc/nova/nova.conf
[DEFAULT]
enabled_apis = osapi_compute,metadata
transport_url = rabbit://openstack:RABBIT_PASS@controller
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver

[api]
auth_strategy = keystone

[keystone_authtoken]
auth_uri = http://controller:5000
auth_url = http://controller:35357
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
vncserver_listen = 0.0.0.0
vncserver_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]
os_region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:35357/v3
username = placement
password = PLACEMENT_PASS

[libvirt]
virt_type = qemu # nếu cpu support vmx/svm thì có thể dùng kvm

Start dịch vụ

# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service

Kiểm tra kết quả

Xác thực vào ‘admin’ dùng openstack-client

$ source keystone-admin

Kiểm tra cnode đã xuất hiện

$ openstack compute service list --service nova-compute
+----+-------+--------------+------+-------+---------+----------------------------+
| ID | Host  | Binary       | Zone | State | Status  | Updated At                 |
+----+-------+--------------+------+-------+---------+----------------------------+
| 1  | node1 | nova-compute | nova | up    | enabled | 2017-04-14T15:30:44.000000 |
+----+-------+--------------+------+-------+---------+----------------------------+

Tìm kiếm các cnode

# 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 compute nodes from cell 'cell1': ad5a5985-a719-4567-98d8-8d148aaae4bc
Found 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc
Checking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
Creating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3

Mỗi khi add cnode, cần chạy lệnh ‘nova-manage cell_v2 discover_hosts’ để cnode được đăng ký vào database. Quá trình này có thể cho chạy định kỳ với bằng cấu hình sau

/etc/nova/nova.conf
[scheduler]
discover_hosts_in_cells_interval = 300

1
Leave a Reply

avatar
1 Comment threads
0 Thread replies
7 Followers
 
Most reacted comment
Hottest comment thread
1 Comment authors
JACK Recent comment authors
  Subscribe  
newest oldest most voted
Notify of
JACK
Guest
JACK

thanks for share