Thursday, November 21, 2024

[Openstack] Phần 5: Nova Service

-

1. Tổng quan.

Compute service (Nova) trong OpenStack là một phần mềm quản lý các tài nguyên máy chủ và máy ảo. Nó cho phép người dùng triển khai và quản lý các máy ảo trên hạ tầng cloud của mình. Nova sử dụng mô hình phân tán và gồm nhiều thành phần như compute, network, storage, scheduler,… để cung cấp tính năng triển khai máy ảo. Khi một yêu cầu triển khai máy ảo được gửi đến, Nova sẽ sử dụng các thông tin về yêu cầu đó để quyết định nơi triển khai máy ảo. Các thành phần của Nova sẽ cùng hoạt động để tạo máy ảo, cấp phát tài nguyên và lưu trữ thông tin về máy ảo. Compute service trong OpenStack có thể được triển khai trên nhiều máy chủ, có thể được cấu hình để tương tác với các hạ tầng máy chủ khác nhau, tùy thuộc vào nhu cầu sử dụng.

Các thành phần chính trong Nova bao gồm:

  • API server: là thành phần đầu tiên mà các yêu cầu của người dùng được gửi đến. Nó chịu trách nhiệm về xử lý yêu cầu API và định tuyến chúng đến các service khác nhau trong hệ thống.
  • Scheduler: là thành phần quản lý việc đưa ra quyết định về việc chọn máy chủ phù hợp để tạo và chạy các instance. Scheduler dựa trên nhiều tiêu chí như tài nguyên có sẵn, tính khả dụng và độ ưu tiên để quyết định chọn máy chủ phù hợp.
  • Compute: là thành phần thực thi tạo và quản lý các instance. Nó có trách nhiệm tạo, khởi động, dừng và xóa các instance trên các máy chủ ảo.
  • Image service: cung cấp các hình ảnh máy ảo, chúng có thể được sử dụng để tạo các instance. Image service lưu trữ các hình ảnh này và cung cấp chúng cho các instance khi cần thiết.
  • Network: là thành phần quản lý mạng trong OpenStack. Nó cung cấp các dịch vụ mạng như DHCP, DNS và routing, và cho phép các instance truy cập mạng bên ngoài.
  • Database: là thành phần lưu trữ dữ liệu của hệ thống Nova. Nó lưu trữ thông tin về các instance, các máy chủ ảo, các yêu cầu và trạng thái của chúng.

Các thành phần này cùng hoạt động để cung cấp các tính năng của Nova, cho phép người dùng tạo và quản lý các máy ảo trên hạ tầng điện toán đám mây của mình.

2. Triển khai Nova service trên controller node.

2.1. Cấu hình tạo CSDL.

Để triển khai Nova, đầu tiên bạn hãy khởi tạo các Database sau.

sudo mysql -u root -pHoanghd164 -e "CREATE DATABASE nova_api;"
sudo mysql -u root -pHoanghd164 -e "CREATE DATABASE nova;"
sudo mysql -u root -pHoanghd164 -e "CREATE DATABASE nova_cell0;"

Gán quyền cho các database đã khởi tạo ở bước trên.

sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';"
sudo mysql -u root -pHoanghd164 -e "GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';"

Lệnh dưới dùng để thực thi một câu lệnh SQL bằng cách kết nối đến cơ sở dữ liệu MySQL thông qua tài khoản root với mật khẩu Hoanghd164. Câu lệnh SQL được thực thi là “FLUSH PRIVILEGES;”, nó được sử dụng để làm mới danh sách các quyền người dùng và đảm bảo rằng các thay đổi được áp dụng ngay lập tức mà không cần phải khởi động lại MySQL. Điều này thường được sử dụng sau khi đã thay đổi quyền người dùng hoặc tạo mới người dùng mới trên cơ sở dữ liệu MySQL.

sudo mysql -u root -pHoanghd164 -e "FLUSH PRIVILEGES;"

2.2. Tạo một user cho dịch vụ Nova.

Đầu tiên, sử dụng lệnh “. admin-openrc” để kích hoạt môi trường của OpenStack admin.

. admin-openrc

Các lệnh tiếp theo sẽ được sử dụng để tạo một user, service và endpoint cho dịch vụ OpenStack Compute (Nova) trên controller node.

2.3. Tạo một user tên nova” với mật khẩu NOVA_PASS.

shell> openstack user create --domain default nova --password "NOVA_PASS"

+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 8a7dbf5279404537b1c7b86c033620fe |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

Gán quyền admin cho user nova trong project service.

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

2.4. Tạo một dịch vụ cho Nova.

Tạo một service với tên nova và mô tả là OpenStack Compute.

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

+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 060d59eac51b4594815603d75a00aba2 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

2.5. Tạo endpoint cho dịch vụ Nova.

  • openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1: tạo một endpoint public cho dịch vụ compute với địa chỉ trên controller node là “http://controller:8774/v2.1“.
  • openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1: tạo một endpoint internal cho dịch vụ compute với địa chỉ trên controller node là “http://controller:8774/v2.1“.
  • openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1: tạo một endpoint admin cho dịch vụ compute với địa chỉ trên controller node là “http://controller:8774/v2.1“.
shell> 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               |
+--------------+-------------------------------------------+

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

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

Những lệnh này cho phép các thành phần khác của OpenStack (ví dụ như Horizon) có thể truy cập vào dịch vụ Nova và sử dụng chúng để tạo và quản lý các máy ảo trên hệ thống OpenStack.

2.7. Triển khai Nova service trên Controller Node.

Trước khi vào cấu hình bạn hãy lưu ý rằng tập tin cấu hình mặc định của các bản phân phối khác nhau có thể khác nhau và bạn có thể cần thêm các phần và tùy chọn này thay vì sửa đổi các phần và tùy chọn hiện có. Bên cạnh đó, dấu ba chấm (…) trong các đoạn cấu hình chỉ ra các tùy chọn cấu hình mặc định có thể có và bạn nên giữ lại chúng.

Cài đặt các thành phần phục vụ cho Nova.

Đầu tiên hãy cài các gói phụ thuộc liên quan đến Nova như sau:

sudo apt install nova-api nova-conductor nova-novncproxy nova-scheduler -y

Cấu hình Database.

Trong file /etc/nova/nova.conf chúng ta hãy config như sau:

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

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

Cả hai phần đều sử dụng MySQL làm cơ sở dữ liệu và được cấu hình để truy cập cơ sở dữ liệu Nova thông qua tài khoản và mật khẩu của người dùng Nova. Trong cả hai phần, connection được sử dụng để chỉ định địa chỉ và thông tin xác thực để kết nối đến cơ sở dữ liệu.

Phần [api_database] được sử dụng để lưu trữ dữ liệu của API Nova, bao gồm các thông tin về phiên bản API và quản lý phiên làm việc của người dùng. Nó sử dụng cơ sở dữ liệu riêng biệt để lưu trữ những thông tin này.

Phần [database] được sử dụng để lưu trữ thông tin về các ứng dụng và trạng thái của các máy ảo được tạo bởi Nova. Nó sử dụng cùng một cơ sở dữ liệu với các thành phần khác của OpenStack, bao gồm cả Keystone và Glance.

Thiết lập các thông số mặc định cho các dịch vụ.

Trong file cấu hình của OpenStack, có phần thiết lập các thông số mặc định cho các dịch vụ. Phần cấu hình [DEFAULT] là một phần trong file cấu hình này. Trong phần cấu hình này, có hai thông số được thiết lập:

  • my_ip: là địa chỉ IP của máy chủ hiện tại, được sử dụng để liên kết các dịch vụ với nhau thông qua giao thức mạng. Trong một môi trường OpenStack, mỗi máy chủ thường có nhiều interface cho các mục đích khác nhau. Interface quản lý thường được sử dụng để quản lý và điều khiển hệ thống. Địa chỉ IP của interface này được sử dụng để giao tiếp giữa các dịch vụ OpenStack. Ví dụ, nếu bạn có một máy chủ với interface quản lý có địa chỉ IP là 192.168.13.201, bạn sẽ thay MANAGEMENT_INTERFACE_IP_ADDRESS bằng 192.168.13.201 trong tệp cấu hình nova.conf.
  • transport_url: là địa chỉ của RabbitMQ message broker, được sử dụng để truyền message giữa các dịch vụ của OpenStack. Thông số này bao gồm thông tin đăng nhập và địa chỉ của message broker. Trong ví dụ này, RabbitMQ sử dụng địa chỉ controller trên cổng 5672 và đăng nhập với tên người dùng openstack và mật khẩu RABBIT_PASS.
[DEFAULT]
# ...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/

Thiết lập cho Keystone Authentication.

Trong file cấu hình dưới, chúng ta có các thiết lập cho Keystone authentication middleware được sử dụng bởi OpenStack Nova API service. Cụ thể:

  • auth_strategy: Xác định chiến lược xác thực được sử dụng. Trong trường hợp này, chúng ta sử dụng Keystone.
  • www_authenticate_uriauth_url: Xác định URL của keystone endpoint để xác thực. Trong trường hợp này, địa chỉ URL là http://controller:5000/.
  • memcached_servers: Xác định danh sách các memcached servers được sử dụng để lưu trữ token của user.
  • auth_type: Xác định phương thức xác thực được sử dụng. Trong trường hợp này, chúng ta sử dụng phương thức xác thực dựa trên mật khẩu (password).
  • project_domain_name, user_domain_name, project_name, usernamepassword: Xác định thông tin đăng nhập được sử dụng bởi Nova API service để xác thực với Keystone. Chúng ta sử dụng project name là service, domain name mặc định và tên người dùng và mật khẩu tương ứng là novaNOVA_PASS.
[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

Thiết lập VNC.

[vnc] là một phần của cấu hình các tùy chọn liên quan đến VNC (Virtual Network Computing), một giao thức để điều khiển và hiển thị desktop từ xa. Cụ thể:

  • enabled: Xác định liệu VNC có được kích hoạt hay không. Nếu được đặt thành true, người dùng có thể sử dụng giao thức VNC để truy cập vào máy ảo.
  • server_listen: Xác định địa chỉ IP mà VNC server sẽ lắng nghe trên. Nếu được đặt thành $my_ip, địa chỉ IP cục bộ được đặt trong my_ip sẽ được sử dụng.
  • server_proxyclient_address: Xác định địa chỉ IP của proxy để chuyển tiếp các yêu cầu VNC đến. Nếu được đặt thành $my_ip, địa chỉ IP cục bộ được đặt trong my_ip sẽ được sử dụng.

Vì vậy, khi các giá trị được đặt thành $my_ip, Nova sử dụng địa chỉ IP cục bộ được đặt trong tùy chọn my_ip để cấu hình VNC. Nếu bạn đặt my_ip thành địa chỉ IP công khai của máy chủ Nova, các kết nối VNC có thể được thực hiện từ xa đến máy ảo.

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

glance: Địa chỉ IP và cổng dịch vụ Glance API Server. Nova sử dụng Glance để lấy các image để tạo máy ảo.

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

oslo_concurrency: Đường dẫn đến thư mục lock file. Nova sử dụng thư viện oslo để đồng bộ hoá và tránh tình trạng resource contention.

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

Cấu hình các thông tin cấu hình liên quan đến Placement API.

placement: Các thông tin cấu hình liên quan đến Placement API, bao gồm:

  • region_name: Tên khu vực.
  • project_domain_name: Tên miền domain cho project.
  • project_name: Tên project sử dụng để xác thực với Keystone.
  • auth_type: Loại xác thực sử dụng để truy cập keystone.
  • user_domain_name: Tên miền domain cho user.
  • Fauth_url: Địa chỉ Keystone Service Endpoint.
  • username: Tên user được sử dụng để xác thực với Keystone.
  • password: Mật khẩu user được sử dụng để xác thực với Keystone.
[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

Đồng bộ CSDL của API DB.

Lệnh su -s /bin/sh -c "nova-manage api_db sync" nova được sử dụng để đồng bộ hóa cơ sở dữ liệu API cho các dịch vụ OpenStack Compute. Cụ thể, lệnh này thực hiện việc tạo ra các bảng và chỉ mục trong cơ sở dữ liệu API của Nova, được sử dụng để lưu trữ thông tin về các API mà Nova hỗ trợ. Khi chạy lệnh này, Nova sẽ tự động tạo ra các bảng và chỉ mục cần thiết trong cơ sở dữ liệu API để đảm bảo hoạt động chính xác của dịch vụ Nova.

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

Nếu bạn nhận được thông báo Modules with known eventlet monkey patching issues were imported prior to eventlet monkey patching: urllib3. This warning can usually be ignored if t he caller is only importing and not executing nova code. thì đây không phải là một lỗi, mà chỉ là một cảnh báo. Cảnh báo này liên quan đến việc sử dụng thư viện eventlet trong Python, một thư viện giúp xử lý đồng thời bằng cách sử dụng coroutines.

Cụ thể, cảnh báo này nói rằng một số module đã được import trước khi eventlet thực hiện monkey patching. Monkey patching là một kỹ thuật cho phép thay đổi hoặc mở rộng hành vi của mã nguồn mà không cần sửa đổi mã nguồn gốc.

Trong trường hợp này, eventlet cảnh báo rằng module urllib3 đã được import trước khi nó có thể thực hiện monkey patching. Tuy nhiên, như cảnh báo đã nói, điều này thường có thể được bỏ qua nếu bạn chỉ import module mà không thực thi mã nova.

Nếu bạn không gặp bất kỳ vấn đề nào khác khi chạy mã của mình, bạn có thể an tâm bỏ qua cảnh báo này.

Khái niệm Cell trong OpenStack Nova.

Trong OpenStack Nova, một cell là một đơn vị quản lý cho một nhóm các máy chủ vật lý. Mỗi máy chủ vật lý này có thể chạy nhiều máy ảo.

  • Cell gốc (cell0): Đây là một cell đặc biệt không chứa máy chủ vật lý hoặc máy ảo. Thay vào đó, nó chứa thông tin về tất cả các cell khác trong hệ thống và được sử dụng để điều phối các hoạt động giữa chúng.
  • Cell thông thường (như cell1): Đây là các cell chứa máy chủ vật lý và máy ảo. Chúng được quản lý thông qua cell gốc.

Ví dụ về việc sử dụng hai loại cell này trong một môi trường cung cấp dịch vụ có thể là một nhà cung cấp dịch vụ cloud. Nhà cung cấp này có thể có hàng trăm máy chủ vật lý và họ muốn phân chia chúng thành các nhóm nhỏ để quản lý dễ dàng hơn.

Họ có thể tạo ra nhiều cell, mỗi cell chứa một nhóm các máy chủ vật lý. Mỗi cell này sẽ chạy các máy ảo của khách hàng. Cell gốc sẽ quản lý tất cả các cell này, giúp nhà cung cấp dịch vụ có cái nhìn tổng quan về hệ thống và điều phối các hoạt động giữa các cell.

Khởi tạo và thiết lập cell gốc.

Trong OpenStack, cell là một khái niệm được sử dụng để mô tả một phần của hạ tầng cloud. Mỗi cell bao gồm một tập hợp các dịch vụ Nova (dịch vụ quản lý máy ảo trong OpenStack) và một tập hợp các máy chủ vật lý. Các cell giúp phân chia hạ tầng cloud thành các phần nhỏ hơn, giúp quản lý và mở rộng hệ thống dễ dàng hơn.

Cell gốc (cell0) là một cell đặc biệt trong hệ thống OpenStack Nova. Nó không chứa bất kỳ máy chủ vật lý hoặc máy ảo nào, nhưng thay vào đó, nó chứa thông tin về tất cả các cell khác trong hệ thống. Cell gốc được sử dụng để điều phối các hoạt động giữa các cell khác.

Nova Cells v2 là một cách để mở rộng hạ tầng OpenStack bằng cách phân chia nó thành các phần nhỏ hơn, mỗi phần được gọi là một cell. Mỗi cell có thể được quản lý một cách độc lập và có thể chứa một số lượng lớn máy ảo.

Lệnh su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova được sử dụng trong OpenStack Nova để khởi tạo hoặc cập nhật cell gốc (cell0).

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

Trong đó:

  • su -s /bin/sh -c: Chạy một lệnh với shell /bin/sh dưới quyền của một người dùng khác. Trong trường hợp này, người dùng là nova.
  • "nova-manage cell_v2 map_cell0": Đây là lệnh được thực thi, nova-manage là công cụ quản lý cho OpenStack Nova và cell_v2 map_cell0 là lệnh để khởi tạo hoặc cập nhật cell gốc.

Tạo một cell mới trong hệ thống Nova.

Khi một yêu cầu tạo máy ảo được gửi tới Nova API, Nova Controller sẽ tìm kiếm trong cell mà máy ảo đó thuộc về. Nếu cell này không có khả năng đáp ứng yêu cầu, Nova Controller sẽ tìm kiếm trong các cell khác cho đến khi tìm thấy một cell có khả năng đáp ứng yêu cầu.

Với lệnh nova-manage cell_v2 create_cell, chúng ta sẽ tạo ra một cell mới với tên cell1. Tham số --verbose được sử dụng để hiển thị chi tiết quá trình tạo cell. Sau khi tạo cell mới, chúng ta sẽ tiếp tục đăng ký các compute node với cell này.

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

Như vậy bạn cần phân biết rõ hai lệnh trên có tác dụng khác nhau như sau:

  • Lệnh su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova được sử dụng để khởi tạo hoặc cập nhật cell gốc (cell0). Cell gốc là một cell đặc biệt chứa thông tin về tất cả các cell khác trong hệ thống.
  • Lệnh su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova được sử dụng để tạo một cell mới, trong trường hợp này là cell có tên là cell1. Cell này không phải là cell gốc.

Vì vậy, bạn có thể xác định lệnh nào đang tạo cell gốc dựa trên phần map_cell0 hoặc create_cell trong lệnh. Nếu là map_cell0, lệnh đang khởi tạo hoặc cập nhật cell gốc. Nếu là create_cell, lệnh đang tạo một cell mới.

Đồng bộ hóa cơ sở dữ liệu của Nova.

Lệnh su -s /bin/sh -c "nova-manage db sync" nova được sử dụng để đồng bộ hóa cơ sở dữ liệu của Nova.

Khi bạn cài đặt và cấu hình OpenStack Nova, bạn cần tạo và cấu hình cơ sở dữ liệu cho nó. Cơ sở dữ liệu này sẽ chứa các thông tin liên quan đến máy chủ ảo như instance, flavor, image, metadata, scheduler, quota, iternal logs và nhiều hơn nữa.

Sau khi tạo và cấu hình cơ sở dữ liệu cho Nova, bạn phải đồng bộ hóa nó bằng lệnh nova-manage db sync. Lệnh này sẽ tạo ra các bảng cơ sở dữ liệu bị thiếu và đảm bảo cấu trúc cơ sở dữ liệu của Nova được đồng bộ và phù hợp với phiên bản hiện tại của Nova.

Vì vậy, lệnh su -s /bin/sh -c "nova-manage db sync" nova sẽ thực hiện đồng bộ hóa cơ sở dữ liệu của Nova bằng cách chạy lệnh nova-manage db sync với quyền của người dùng nova.

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

Xác minh lại các cell đã được khởi tạo trong hệ thống.

Lệnh nova-manage cell_v2 list_cells được sử dụng để liệt kê các cell hiện có trong hệ thống Nova. Khi thực thi lệnh này thì nó sẽ hiển thị danh sách các cell hiện có trong hệ thống Nova.

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

Khởi động lại các dịch vụ liên quan đến Nova.

Các lệnh này được sử dụng để khởi động lại các dịch vụ Nova trên controller node trong OpenStack.

  • service nova-api restart: Khởi động lại dịch vụ API của Nova, nơi mà các yêu cầu API được gửi đến và xử lý.
  • service nova-consoleauth restart: Khởi động lại dịch vụ Nova ConsoleAuth, cung cấp xác thực cho phiên đăng nhập vào console.
  • service nova-scheduler restart: Khởi động lại dịch vụ Nova Scheduler, nơi mà quyết định xem instance OpenStack sẽ được khởi động trên compute node nào.
  • service nova-conductor restart: Khởi động lại dịch vụ Nova Conductor, nơi thực hiện nhiệm vụ quản lý các instance trên compute nodes.
  • service nova-novncproxy restart: Khởi động lại dịch vụ Nova NoVNC Proxy, cung cấp khả năng truy cập vào console cho người dùng thông qua web.
service nova-api restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart

Bạn có thể xác nhận lại trạng thái các dịch vụ của Nova.

service nova-api status | grep active
service nova-scheduler status | grep active
service nova-conductor status | grep active
service nova-novncproxy status | grep active

2.8. Triển khai Nova service trên compute node (áp dụng cho Compute Node).

Cài đặt nova-compute trên compute node.

sudo apt install nova-compute -y 

Sau khi cài đặt xong, trong file /etc/nova/nova.conf  chỉnh sửa các thành phần sau:

Trong file cấu hình của OpenStack, có phần thiết lập các thông số mặc định cho các dịch vụ. Phần cấu hình [DEFAULT] là một phần trong file cấu hình này.

Trong phần cấu hình này, có hai thông số được thiết lập:

  • my_ip: là địa chỉ IP của máy chủ hiện tại, được sử dụng để liên kết các dịch vụ với nhau thông qua giao thức mạng.
  • transport_url: là địa chỉ của RabbitMQ message broker, được sử dụng để truyền thông điệp giữa các dịch vụ của OpenStack. Thông số này bao gồm thông tin đăng nhập và địa chỉ của message broker. Trong ví dụ này, RabbitMQ sử dụng địa chỉ controller trên cổng 5672, và đăng nhập với tên người dùng openstack và mật khẩu RABBIT_PASS.
[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

Trong file cấu hình dưới, chúng ta có các thiết lập cho Keystone authentication middleware được sử dụng bởi OpenStack Nova API service. Cụ thể:

  • auth_strategy: Xác định chiến lược xác thực được sử dụng. Trong trường hợp này, chúng ta sử dụng Keystone.
  • www_authenticate_uriauth_url: Xác định URL của keystone endpoint để xác thực. Trong trường hợp này, địa chỉ URL là http://controller:5000/.
  • memcached_servers: Xác định danh sách các memcached servers được sử dụng để lưu trữ token của user.
  • auth_type: Xác định phương thức xác thực được sử dụng. Trong trường hợp này, chúng ta sử dụng phương thức xác thực dựa trên mật khẩu (password).
  • project_domain_name, user_domain_name, project_name, usernamepassword: Xác định thông tin đăng nhập được sử dụng bởi Nova API service để xác thực với Keystone. Chúng ta sử dụng project name là service, domain name mặc định và tên người dùng và mật khẩu tương ứng là novaNOVA_PASS.
[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

Trong file cấu hình Nova của OpenStack, đoạn mã này được sử dụng để cấu hình tính năng VNC. Các tùy chọn bao gồm:

  • enabled: Xác định tính năng VNC có được kích hoạt hay không.
  • server_listen: Địa chỉ IP mà máy chủ VNC sẽ lắng nghe kết nối từ máy khách. Giá trị 0.0.0.0 được sử dụng để lắng nghe tất cả các địa chỉ IP trên máy chủ.
  • server_proxyclient_address: Địa chỉ IP của máy khách mà máy chủ VNC sử dụng để kết nối đến. Giá trị $my_ip được sử dụng để sử dụng địa chỉ IP của máy chủ Nova.
  • novncproxy_base_url: Địa chỉ URL cho proxy của NoVNC. Khi người dùng truy cập vào giao diện VNC, proxy sẽ được sử dụng để kết nối tới VNC server.
[vnc]
# ...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

glance: Địa chỉ IP và cổng dịch vụ Glance API Server. Nova sử dụng Glance để lấy các image để tạo máy ảo.

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

oslo_concurrency: Đường dẫn đến thư mục lock file. Nova sử dụng thư viện oslo để đồng bộ hoá và tránh tình trạng resource contention.

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

placement: Các thông tin cấu hình liên quan đến Placement API, bao gồm:

  • region_name: Tên khu vực.
  • project_domain_name: Tên miền domain cho project.
  • project_name: Tên project sử dụng để xác thực với Keystone.
  • auth_type: Loại xác thực sử dụng để truy cập keystone.
  • user_domain_name: Tên miền domain cho user.
  • Fauth_url: Địa chỉ Keystone Service Endpoint.
  • username: Tên user được sử dụng để xác thực với Keystone.
  • password: Mật khẩu user được sử dụng để xác thực với Keystone.
[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

Lệnh egrep -c '(vmx|svm)' /proc/cpuinfo trong node compute OpenStack sẽ đếm số lượng CPU hỗ trợ ảo hóa phần cứng bằng công nghệ Intel VT-x (vmx) hoặc AMD-V (svm) thông qua file /proc/cpuinfo. Kết quả sẽ là một số nguyên, thể hiện số lượng CPU trên node compute hỗ trợ ảo hóa phần cứng.

shell> egrep -c '(vmx|svm)' /proc/cpuinfo
16

Nếu câu lệnh “egrep -c ‘(vmx|svm)’ /proc/cpuinfo” trả về giá trị là 1 trở lên thì compute node của bạn hỗ trợ phần cứng ảo hóa và không cần cấu hình thêm gì. Nếu giá trị trả về là 0, điều đó có nghĩa là compute node của bạn không hỗ trợ phần cứng ảo hóa và bạn phải cấu hình libvirt sử dụng QEMU thay vì KVM. Để làm điều này, bạn phải chỉnh sửa phần [libvirt] trong file /etc/nova/nova-compute.conf như sau:

[libvirt]
# ...
virt_type = qemu

Bằng cách này, bạn sẽ đảm bảo rằng compute node của bạn sẽ sử dụng QEMU để tạo ra các máy ảo thay vì sử dụng KVM và sau đó khởi động lại dịch vụ nova-compute.

service nova-compute restart

Note: Để khắc phục sự cố khi dịch vụ nova-compute không khởi động được. Lỗi “AMQP server on controller:5672 is unreachable” xuất hiện trong file nhật ký của nova-compute (/var/log/nova/nova-compute.log) và thông báo lỗi này cho biết rằng firewall trên nút điều khiển đang ngăn chặn truy cập vào cổng 5672. Do đó, cần cấu hình firewall trên nút điều khiển để mở cổng 5672, sau đó khởi động lại dịch vụ nova-compute trên nút tính toán. Việc mở cổng này cho phép nova-compute và AMQP server trao đổi thông tin được qua giao thức AMQP.

Kiếm tra lại trạng thái nova-compute.

service nova-compute status | grep active

Thêm compute node vào cell database trên Controller node.

Lệnh openstack compute service list --service nova-compute được sử dụng để liệt kê các dịch vụ Nova Compute đang chạy trên các compute node của hạ tầng OpenStack. Cụ thể, lệnh này sẽ hiển thị danh sách các compute node, trạng thái của chúng (chạy hay không chạy), và ID của service được sử dụng để quản lý compute node đó. Lệnh . admin-openrc được sử dụng để đặt biến môi trường trong phiên làm việc hiện tại với các thông tin xác thực của người dùng admin trong OpenStack.

shell> . admin-openrc
shell> 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 |
+----+-------+--------------+------+-------+---------+----------------------------+

Hoặc sử dụng openstack compute service list mà không có them số --service nova-compute.

shell> . admin-openrc
shell> openstack compute service list

+----+--------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |
+----+--------------------+------------+----------+---------+-------+----------------------------+
|  1 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
|  2 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |
|  3 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |
+----+--------------------+------------+----------+---------+-------+----------------------------+

Lưu ý rằng trong OpenStack, một máy chủ có thể đóng cả hai vai trò là controller và compute node. Tuy nhiên, điều này không phổ biến trong môi trường sản xuất vì nó có thể tạo ra các vấn đề về hiệu suất và bảo mật.

Ví dụ.

shell> openstack compute service list --service nova-compute                                                                                                                                                                                                                                                                                                                              
+--------------------------------------+--------------+------------------------+------+---------+-------+----------------------------+
| ID                                   | Binary       | Host                   | Zone | Status  | State | Updated At                 |
+--------------------------------------+--------------+------------------------+------+---------+-------+----------------------------+
| d4729a1b-4f6a-4a1a-9718-dae5c5fee2eb | nova-compute | opt-controller1-13-201 | nova | enabled | up    | 2024-02-26T15:08:57.000000 |
| ce790fce-a7e9-4247-975a-ab774038e33d | nova-compute | opt-compute1-13-202    | nova | enabled | up    | 2024-02-26T15:08:51.000000 |
+--------------------------------------+--------------+------------------------+------+---------+-------+----------------------------+

Nếu bạn không muốn máy chủ controller của mình hoạt động như một compute node, bạn cần tắt dịch vụ nova-compute trên máy chủ đó. Bạn có thể làm điều này bằng cách sử dụng lệnh sau:

sudo systemctl stop nova-compute
sudo systemctl disable nova-compute

Sau đó, bạn cần xóa dịch vụ nova-compute từ danh sách dịch vụ OpenStack bằng cách sử dụng lệnh openstack:

openstack compute service delete <id>

Trong đó, <id> là ID của dịch vụ nova-compute trên máy chủ controller, bạn có thể tìm thấy ID này trong đầu ra của lệnh openstack compute service list --service nova-compute.

Lưu ý rằng bạn nên thực hiện các thao tác này khi không có máy ảo nào đang chạy trên máy chủ controller.

Đưa các máy chủ mới được thêm vào vào cell database.

Như trước đó đã phân tích, Cell database của Nova được sử dụng để quản lý các máy chủ compute trong một môi trường phân tán và lệnh này sẽ phát hiện các máy chủ mới được thêm vào và đưa chúng vào cell database.

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

Tự động xác nhận Compute Node đã được thêm thành công.

Để thêm các node compute mới vào hệ thống OpenStack, bạn phải chạy lệnh nova-manage cell_v2 discover_hosts trên node controller để đăng ký các node compute mới đó. Ngoài ra, bạn có thể thiết lập một khoảng thời gian phù hợp trong file cấu hình /etc/nova/nova.conf bằng cách sử dụng tùy chọn discover_hosts_in_cells_interval trong phần [scheduler]. Khi thiết lập giá trị cho tùy chọn này, OpenStack sẽ định kỳ thực hiện việc tìm kiếm và đăng ký các node compute mới trong hệ thống. Trong ví dụ trên, giá trị được thiết lập là 300 giây (5 phút).

[scheduler]
discover_hosts_in_cells_interval = 300

Xác định danh sách các dịch vụ hiện có trong hệ thống.

Lệnh openstack catalog list được sử dụng để hiển thị danh sách các dịch vụ được đăng ký trong Catalog của OpenStack. Catalog là một dịch vụ trong OpenStack, chứa thông tin về các dịch vụ khác trong hệ thống OpenStack, bao gồm các dịch vụ như Keystone, Nova, Neutron, Glance, Swift, Cinder, và Heat.

Khi chạy lệnh openstack catalog list, bạn sẽ nhận được danh sách các dịch vụ hiện có trong Catalog của OpenStack, bao gồm tên dịch vụ, ID dịch vụ và endpoint cho mỗi dịch vụ. Các endpoint này sẽ cho biết địa chỉ URL để truy cập vào dịch vụ đó.

Lệnh này thường được sử dụng để xác định danh sách các dịch vụ hiện có trong hệ thống và đảm bảo rằng các dịch vụ này được đăng ký đúng cách trong Catalog của OpenStack.

shell> openstack catalog list

+-----------+-----------+-----------------------------------------+
| Name      | Type      | Endpoints                               |
+-----------+-----------+-----------------------------------------+
| keystone  | identity  | RegionOne                               |
|           |           |   public: http://controller:5000/v3/    |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:5000/v3/  |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:5000/v3/     |
|           |           |                                         |
| glance    | image     | RegionOne                               |
|           |           |   admin: http://controller:9292         |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9292        |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:9292      |
|           |           |                                         |
| nova      | compute   | RegionOne                               |
|           |           |   admin: http://controller:8774/v2.1    |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8774/v2.1 |
|           |           | RegionOne                               |
|           |           |   public: http://controller:8774/v2.1   |
|           |           |                                         |
| placement | placement | RegionOne                               |
|           |           |   public: http://controller:8778        |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8778         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8778      |
|           |           |                                         |
+-----------+-----------+-----------------------------------------+

Lệnh “openstack image list” được sử dụng để liệt kê tất cả các image đang có sẵn trong OpenStack. Các image này có thể được sử dụng để tạo ra các máy ảo trong OpenStack.

shell> openstack image list

+--------------------------------------+-------------+-------------+
| ID                                   | Name        | Status      |
+--------------------------------------+-------------+-------------+
| 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros      | active      |
+--------------------------------------+-------------+-------------+

Lệnh “nova-status upgrade check”, nó được sử dụng để kiểm tra trạng thái của việc nâng cấp của các thành phần của Nova. Các thành phần này bao gồm database, message queue, hypervisor và các thành phần liên quan khác. Câu lệnh này sẽ kiểm tra các phiên bản hiện tại của các thành phần này và so sánh với phiên bản được yêu cầu cho mỗi phiên bản Nova. Nếu có bất kỳ lỗi nào trong việc nâng cấp, câu lệnh này sẽ cung cấp thông tin chi tiết để giúp sửa chữa vấn đề đó.

shell> nova-status upgrade check

+--------------------------------------------------------------------+
| Upgrade Check Results                                              |
+--------------------------------------------------------------------+
| Check: Cells v2                                                    |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Placement API                                               |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Cinder API                                                  |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Policy Scope-based Defaults                                 |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Policy File JSON to YAML Migration                          |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+
| Check: Older than N-1 computes                                     |
| Result: Success                                                    |
| Details: None                                                      |
+--------------------------------------------------------------------+

Phần tiếp theo, chúng ta sẽ cài đặt và cấu hình Neutron service.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories