1. 程式人生 > >快速入門Openstack,無腦多節點部署Mitaka(5)--Nova部署

快速入門Openstack,無腦多節點部署Mitaka(5)--Nova部署

什麼是Nova?

簡介

Nova是openstack中用來提供高可擴充套件、按需、自服務的計算資源服務的一個專案。Nova是openstack最老牌的專案,最初剛釋出的時候集成了很多的功能,既包括計算,也包括網路和儲存。後來隨著openstack的發展壯大,相應的功能被拆分成單獨的專案,使得相應功能及開發可以更加細緻和深入。最初的nova-network現在被neutron專案取代,最初的nova-volume從nova中分離出來,變成了cinder專案。分離之後,Nova的功能相對單一,結構也更加清楚,更容易理解。
Nova是一個虛擬機器的管理程式,為虛擬機器的管理和維護提供了一套高度抽象的API,允許使用者通過API來管理自己的虛擬機器。Nova與系統虛擬化關係不大,Nova是通過呼叫各種虛擬化方案提供的介面來管理虛擬機器的,因此,Nova能夠支援多種不同的虛擬化方案。目前,Nova支援的虛擬化方案包括:
Libvirt + KVM/Qemu;
Libvirt + LXC;
Libvirt + Xen;
Windows Hyper-V;
VMware;
最近openstack社群正在積極的拓展Nova的功能,Nova不僅可以用來管理虛擬機器,也可以用來管理物理伺服器(Ironic)及用來管理容器(Magnum)。

架構

簡版:
這裡寫圖片描述

nova services 簡介

nova-api
nova-api是整個nova各項服務的對外介面,通過HTTP協議對外提供服務,openstack中的其他專案也是通過nova-api提供的介面與其進行互動的。nova-api有三套介面,其中一套是相容AWS EC2的介面,另一套是openstack自己開發的介面,最後一套則是給虛擬機器提供metadata服務,不直接對外服務。nova-api主要的任務就是接收使用者通過HTTP協議傳送過來的請求,對請求進行驗證並處理使用者的請求,最後將請求的結果傳送給使用者。但是很多時候,nova-api給使用者返回操作結果的時候,使用者的請求可能還沒有全部完成,以建立虛擬機器為例,nova-api收到一個建立一臺虛擬機器的請求後,nova-api首先會對請求進行驗證,檢查請求中的image和flavor是否存在,如果沒有問題,那麼nova-api會在資料庫中記錄虛擬機器的基本資訊,並通過RPC給計算節點發送一個建立虛擬機器的請求,接著,nova-api就會將虛擬機器相關的資訊傳送使用者,請求的響應過程結束。nova-api並不會等到虛擬機器建立完成才返回,而是將虛擬機器建立相關的主要工作交給了nova-compute服務。nova-api在執行的過程中需要連線到資料庫,因為nova-api需要更新虛擬機器的資訊。此外,nova-api還要能夠訪問訊息佇列伺服器,因為nova-api和nova-compute直接是通過RPC進行通訊的。
nova-conductor
conductor服務是在G版進入到nova的,主要的目的是代替nova-compute去訪問資料庫,這樣做主要是基於安全的考慮。在公有云的環境下,nova-compute是部署最為廣泛的一個服務,執行在hypervisor上的惡意虛擬機器可能可以拿到hypervisor的控制權,從而直接對資料中心的資料庫進行修改。為了防止這種情況發生,一種簡單的做法就是讓儘可能少的人有直接操作資料庫的許可權。通過nova-conductor來訪問資料庫,不僅可以提高nova的可擴充套件性,還能提高資料庫訪問的效能。除了代替nova-compute訪問資料庫,nova-conductor還被用來執行一些需要較長時間才能完成的操作,如虛擬機器的遷移。
從結構上來說,nova-conductor非常簡單,就是不斷的從訊息伺服器獲取RPC請求,然後將其轉化為資料庫的操作,獲取到操作結果之後通過訊息伺服器返回資料庫操作的結果。
nova-scheduler
scheduler是nova中的排程服務,決定了如何放置新建立的虛擬機器。與conductor服務類似,從結構上來說,scheduler相對比較簡單,從具體的實現上來說,scheduler是非常複雜的。scheduler的具體實現方法可以請參考[[grizzly-nova-scheduler]],雖然Havana版中scheduler有些變化,但是總體上沒太大的差別。
scheduler為了儘可能好的利用叢集資源,需要跟蹤每個hypervisor的狀態和可用的資源。nova-compute會定期的通過訊息佇列和資料庫更新其自身的狀態和可用資源,scheduler也可以通過RPC獲取hypervisor的狀態和可用資源。因此,scheduler需要直接訪問資料庫和訊息佇列伺服器。
nova-cert
nova-cert是nova提供的一個證書服務,能夠對使用者的公鑰進行簽名,並返回簽名後的x509格式的證書。從實現上來說,cert可能是nova中最簡單的一個服務。主要包括兩部分,一部分是整合在nova-api中的HTTP介面,另一部分就是cert-manager。nova-api收到簽名請求之後,會通過訊息佇列將請求轉發給cert-manager,cert-manager對公鑰進行簽名,並通過訊息佇列返回簽名後的證書。因此,cert服務只需要連線到訊息佇列伺服器即可。
nova-cell
cell服務主要是用來提高openstack叢集的可擴充套件性,cell服務主要負責在不同cell之間的進行資訊的同步和虛擬機器的排程。在啟用了cell的情況下,一個region可以劃分為多個cell,每個cell可以使用不同的資料庫和訊息佇列伺服器。建立虛擬機器時,該請求首先會發送給cell,cell再將該請求轉發給某個cell中的scheduler,scheduler再選擇某臺具體的宿主機,並啟動虛擬機器。cell服務需要訪問資料庫和訊息佇列伺服器。
nova-consoleauth
consoleauth的功能相對比較簡單,是給vnc代理伺服器提供token驗證服務。當用戶在horizon中想通過vnc連線到虛擬機器時,會給vnc代理伺服器傳送一個請求,代理伺服器除了需要通過nova-compute獲取虛擬機器的vnc連線資訊外,還需要通過對url中的token進行驗證。token驗證的任務就需要呼叫consoleauth。consoleauth會記錄url中的token資訊,並返回連線虛擬機器vnc所需要的資訊。為了獲取連線虛擬機器vnc相關的資訊,consoleauth需要通過RPC呼叫nova-compute獲取。因此,consoleauth服務只需要連線到訊息佇列伺服器即可。
nova-objectstore
objectstore是nova提供的一個仿s3的物件儲存介面。不過nova中的實現相對來說非常簡單,只能講上傳的檔案儲存在本地,也不保證上傳檔案的高可用,只是一個簡單的基於HTTP協議的檔案儲存服務,與nova的其他服務都沒有什麼關聯。
nova-novncproxy
novncproxy是nova中實現的一個vnc代理服務,它能在瀏覽器和虛擬機器的vnc server之間建立一條雙向的socket通道,使得使用者可以直接在瀏覽器中通過vnc登陸虛擬機器,對虛擬機器進行管理和操作。novncproxy在執行的過程中需要接收從使用者瀏覽器過來的請求,並通過RPC呼叫consoleauth對token進行驗證。如果驗證可以通過,那麼它會在瀏覽器和虛擬機器vnc之間建立一個雙向的連線。因此,novncproxy在工作的過程中需要能夠訪問訊息佇列伺服器。此外,novncproxy通常使用KVM的虛擬化方案時使用。
nova-spicehtml5proxy
spicehtml5proxy在實現原理和工作流程上與novncproxy是一模一樣,他們的差別只是體現在通訊協議上。一個是使用vnc協議,另外一個則是採用的spice協議。其主要原因是,vnc在虛擬桌面環境中表現的並不是很好,而spice協議則能夠較好的滿足虛擬桌面的需求。
nova-xvpvncproxy
xvpvncproxy在實現原理和工作流程上與novncproxy是一模一樣,它們都是採用vnc協議。不同的是,xvpvncproxy主要用在xen虛擬化平臺中,而novncproxy則主要用在KVM虛擬化平臺。
nova-console
console代理服務與vnc代理服務類似,用來連線到虛擬機器的console介面。目前,只有xen和VMware虛擬化平臺實現了console代理服務。
nova-compute
compute是nova專案中最複雜的任務,和眾多服務都有關聯,需要處理虛擬機器相關的所有操作,包括虛擬機器的建立、刪除、啟動、停止、遷移等。compute內部實現非常複雜,需要對多種虛擬化技術進行封裝,為虛擬機器準備磁碟和網路資源,還有很多週期性的任務需要處理。但是其資料流卻相對簡單,只是不斷的從訊息佇列獲取請求,處理請求,返回響應結果。nova-compute在執行的過程中,需要連線到訊息佇列伺服器和虛擬化服務的管理介面(如:libvirtd)。
nova-network
nova-network是nova中整合的網路管理元件,它能夠將一臺普通的伺服器轉化為虛擬機器的閘道器。nova-network實現的網路模型非常簡單,卻非常實用,尤其是nova-network支援HA模式,它使得每個計算節點都能充當虛擬機器的閘道器。這樣不僅可以解決閘道器高可用的問題,同時也可以提高虛擬機器訪問外部網路的效能,消除了單點故障和效能瓶頸。nova-network的資料流也相對簡單,不斷的處理和響應來自訊息佇列的請求,此外,在處理訊息佇列的請求中,需要將一些網路相關的配置和引數寫入到資料庫中。因此,nova-network也需要能夠直接訪問資料庫。

資料流

結合前面的分析,可以得出nova中各個服務的資料流如下圖所示。
這裡寫圖片描述

敲黑板,上面這些都是重點。
注意,現在開始都會是多節點安裝!

Nova-controller節點部署

前期準備

在安裝每個服務之前,我們都必須先建立該服務的資料庫、服務證書和API Endpoints。因為資料庫這些都是安裝在controller節點上,所以接下來的操作都是在controller節點上執行。
1.建立兩個資料庫,並給nova使用者設定許可權和密碼。123456是我的密碼
command:

mysql -u root -p123456
CREATE DATABASE
nova_api;
CREATE DATABASE nova; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \ IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \ IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \ IDENTIFIED BY '123456'; GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \ IDENTIFIED BY '123456'; exit

OutPut:

[[email protected] ~]# mysql -u root -p123456
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.1.12-MariaDB MariaDB Server

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE nova_api;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE DATABASE nova;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
    ->   IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
    ->   IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
    ->   IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye
[[email protected] ~]# 

2.在openstack中建立nova使用者,並新增為service project的管理員

[[email protected] ~]# source ~/admin-openrc
[[email protected] ~]# openstack user create --domain default \
>   --password-prompt nova
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | 098b1a4d36d241ed87e979ec86d32722 |
| enabled   | True                             |
| id        | 387f268a791446efb1cd43c28e61b11b |
| name      | nova                             |
+-----------+----------------------------------+
[[email protected] ~]# openstack role add --project service --user nova admin

3.建立nova服務實體

[[email protected] ~]# openstack service create --name nova \
>   --description "OpenStack Compute" compute
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 04fdd2d0e3804d0690ca3c22e7f29e0f |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

4.建立Compute service的API Endpoints

[[email protected] ~]# openstack endpoint create --region RegionOne \
>   compute public http://controller.example.com:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------------------+
| Field        | Value                                                 |
+--------------+-------------------------------------------------------+
| enabled      | True                                                  |
| id           | 8e7a3cd7c9a64d5e95acaa31040169a1                      |
| interface    | public                                                |
| region       | RegionOne                                             |
| region_id    | RegionOne                                             |
| service_id   | 04fdd2d0e3804d0690ca3c22e7f29e0f                      |
| service_name | nova                                                  |
| service_type | compute                                               |
| url          | http://controller.example.com:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------------------+
[[email protected] ~]# openstack endpoint create --region RegionOne \
>   compute internal http://controller.example.com:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------------------+
| Field        | Value                                                 |
+--------------+-------------------------------------------------------+
| enabled      | True                                                  |
| id           | 0ca9476104584562a6448805d32a3e31                      |
| interface    | internal                                              |
| region       | RegionOne                                             |
| region_id    | RegionOne                                             |
| service_id   | 04fdd2d0e3804d0690ca3c22e7f29e0f                      |
| service_name | nova                                                  |
| service_type | compute                                               |
| url          | http://controller.example.com:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------------------+
[[email protected] ~]# openstack endpoint create --region RegionOne \
>   compute admin http://controller.example.com:8774/v2.1/%\(tenant_id\)s
+--------------+-------------------------------------------------------+
| Field        | Value                                                 |
+--------------+-------------------------------------------------------+
| enabled      | True                                                  |
| id           | 46532b836e6447d6a264445e6d969597                      |
| interface    | admin                                                 |
| region       | RegionOne                                             |
| region_id    | RegionOne                                             |
| service_id   | 04fdd2d0e3804d0690ca3c22e7f29e0f                      |
| service_name | nova                                                  |
| service_type | compute                                               |
| url          | http://controller.example.com:8774/v2.1/%(tenant_id)s |
+--------------+-------------------------------------------------------+
[[email protected] ~]# 

安裝

1.install the packages

yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy \
  openstack-nova-scheduler -y

2.編輯/etc/nova/nova.conf
cp -p /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf

[DEFAULT]
...
enabled_apis = osapi_compute,metadata
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.0.17
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
...
connection = mysql+pymysql://nova:123456@controller.example.com/nova_api
[database]
...
connection = mysql+pymysql://nova:123456@controller.example.com/nova
[oslo_messaging_rabbit]
...
rabbit_host = controller.example.com
rabbit_userid = openstack
rabbit_password = henry
[keystone_authtoken]
...
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456
[vnc]
...
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[glance]
...
api_servers = http://controller.example.com:9292
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp

3.總覽

[[email protected] ~]# cat /etc/nova/nova.conf | grep -v ^# | grep -v ^$
[DEFAULT]
enabled_apis = osapi_compute,metadata   #配置啟用只允許compute和metadataAPIs 
rpc_backend = rabbit    #啟用RabbitMQ訊息佇列作為rpc連線訪問
auth_strategy = keystone    #啟用Identity service認證服務
my_ip = 192.168.0.17    #Controller節點上的管理網路介面IP
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
connection = mysql+pymysql://nova:123456@controller.example.com/nova_api    #連線nova_api資料庫,123456是我的密碼
[barbican]
[cache]
[cells]
[cinder]
[conductor]
[cors]
[cors.subdomain]
[database]
connection = mysql+pymysql://nova:123456@controller.example.com/nova    #連線nova資料庫,123456是我的密碼
[ephemeral_storage_encryption]
[glance]
api_servers = http://controller.example.com:9292    #映象服務的提供者,我是裝在controller節點上
[guestfs]
[hyperv]
[image_file_url]
[ironic]
[keymgr]
[keystone_authtoken]
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456   #123456是我openstack中nova使用者的密碼
[libvirt]
[matchmaker_redis]
[metrics]
[neutron]
[osapi_v21]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
rabbit_host = controller.example.com    #rabbitMQ服務的提供者,我也是安裝在controller節點上的
rabbit_userid = openstack   #這是我的rabbitMQ服務中的賬號
rabbit_password = henry #henry是我rabbitMQ服務中openstack賬號的密碼
[oslo_middleware]
[oslo_policy]
[rdp]
[serial_console]
[spice]
[ssl]
[trusted_computing]
[upgrade_levels]
[vmware]
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[workarounds]
[xenserver]
[[email protected] ~]# 

4.同步資料庫

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

發現一個錯誤,它提示我訪問不到controller中的資料庫,我之前的程式碼是這麼寫的
這裡寫圖片描述
沒錯,正確的地址應該是controller.example.com
錯誤資訊描述:

[[email protected] ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
error: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'controller' ([Errno -2] Name or service not known)")

但是下面這種棄用提示是可以忽略的:

[root@controller ~]# su -s /bin/sh -c "nova-manage api_db sync" nova
[root@controller ~]# su -s /bin/sh -c "nova-manage db sync" nova
/usr/lib/python2.7/site-packages/pymysql/cursors.py:146: Warning: Duplicate index 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on the table 'nova.block_device_mapping'. This is deprecated and will be disallowed in a future release.
  result = self._query(query)
/usr/lib/python2.7/site-packages/pymysql/cursors.py:146: Warning: Duplicate index 'uniq_instances0uuid' defined on the table 'nova.instances'. This is deprecated and will be disallowed in a future release.
  result = self._query(query)
[root@controller ~]# 

5.啟動服務,並設定為開機自啟

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

上面部分是針對controller節點的。
按照我們之前的網路拓補圖,下面的部署是要在compute節點執行的。

Nova-compute部署

安裝

1.Install the packages:

yum install openstack-nova-compute -y 

2.編輯/etc/nova/nova.conf
cp -p /etc/nova/nova.conf /etc/nova/nova.conf.bak
vim /etc/nova/nova.conf

[DEFAULT]
...
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.0.18    
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[oslo_messaging_rabbit]
...
rabbit_host = controller.example.com
rabbit_userid = openstack
rabbit_password = henry
[keystone_authtoken]
...
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456
[vnc]
...
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller.example.com:6080/vnc_auto.html
[glance]
...
api_servers = http://controller.example.com:9292
[oslo_concurrency]
...
lock_path = /var/lib/nova/tmp
[libvirt]
...
virt_type = qemu

總覽:

[[email protected] ~]# cat /etc/nova/nova.conf | grep -v ^# | grep -v ^$
[DEFAULT]
rpc_backend = rabbit
auth_strategy = keystone
my_ip = 192.168.0.18    #compute節點的管理網路的IP,得跟controller節點的管理網路保持在同一條網路上。
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[api_database]
[barbican]
[cache]
[cells]
[cinder]
[conductor]
[cors]
[cors.subdomain]
[database]
[ephemeral_storage_encryption]
[glance]
api_servers = http://controller.example.com:9292
[guestfs]
[hyperv]
[image_file_url]
[ironic]
[keymgr]
[keystone_authtoken]
auth_uri = http://controller.example.com:5000
auth_url = http://controller.example.com:35357
memcached_servers = controller.example.com:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = 123456   #nova使用者的密碼
[libvirt]
virt_type = qemu    #在命令列執行egrep -c '(vmx|svm)' /proc/cpuinfo這條命令,如果返回值不是0,說明你的機器支援kvm,就沒必要再用qemu,因此這行可以註釋掉或者刪除
[matchmaker_redis]
[metrics]
[neutron]
[osapi_v21]
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
rabbit_host = controller.example.com
rabbit_userid = openstack   #rabbitMQ賬戶
rabbit_password = henry #rabbitMQ密碼
[oslo_middleware]
[oslo_policy]
[rdp]
[serial_console]
[spice]
[ssl]
[trusted_computing]
[upgrade_levels]
[vmware]
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller.example.com:6080/vnc_auto.html
[workarounds]
[xenserver]
[[email protected] ~]# 

3.啟動服務,並設定為開機自啟

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

驗證

請在controller節點上進行驗證

[[email protected] ~]# source ~/admin-openrc
[[email protected] ~]# openstack compute service list
+----+----------------+----------------+----------+---------+-------+------------------+
| Id | Binary         | Host           | Zone     | Status  | State | Updated At       |
+----+----------------+----------------+----------+---------+-------+------------------+
|  1 | nova-scheduler | controller.exa | internal | enabled | up    | 2016-08-04T07:29 |
|    |                | mple.com       |          |         |       | :26.000000       |
|  2 | nova-          | controller.exa | internal | enabled | up    | 2016-08-04T07:29 |
|    | consoleauth    | mple.com       |          |         |       | :27.000000       |
|  3 | nova-conductor | controller.exa | internal | enabled | up    | 2016-08-04T07:29 |
|    |                | mple.com       |          |         |       | :27.000000       |
|  7 | nova-compute   | compute.exampl | nova     | enabled | up    | 2016-08-04T07:29 |
|    |                | e.com          |          |         |       | :25.000000       |
+----+----------------+----------------+----------+---------+-------+------------------+

**額,看到上面四個服務已經啟用,則說明nova的部署已經完成
謝謝觀看**

相關推薦

快速入門Openstack節點部署Mitaka1--前期環境搭建準備

序言 openstack是什麼?官方的解釋:OpenStack is a cloud operating system that controls large pools of compute, storage, and networking reso

快速入門Openstack節點部署Mitaka5--Nova部署

什麼是Nova? 簡介 Nova是openstack中用來提供高可擴充套件、按需、自服務的計算資源服務的一個專案。Nova是openstack最老牌的專案,最初剛釋出的時候集成了很多的功能,既包括計算,也包括網路和儲存。後來隨著openstack

快速入門Openstack節點部署Mitaka7--cinder部署

什麼是Cinder? 1.簡介 Cinder從Openstack的Folsom版本(2012年9月釋出)開始出現,用以替代Nova-Volume服務,Cinder為Openstack提供了管理卷(volunme)的基礎設施。 Cinder是受請求得到、

『中級篇』docker-swarm創建一個節點集群43

fine containe 創建 lock tis -cp -a lang virt >原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!>原文鏈接地址:『中級篇』docker-swarm創建一個多節點集群(43) docker Swarm是Docker

C++快速入門---傳值、傳值和傳引用6

C++快速入門---傳值、傳值和傳引用(6)     傳值 #include <iostream> void changeAge(int age, int newAge); // 如果想要實現計劃功能,需要怎麼改? main() { int a

GAN應用之資料生成監督深度學習新方法3

3.1 從GAN到Conditional GAN GAN的生成式模型可以擬合真實分佈,所以它可以用於偽造資料。DCGAN是第一個用全卷積網路做資料生成的,下面是它的基本結構和生成的資料。 輸入100維的噪聲,輸出64*64的影象,從mnist的訓練結果來看,

Linux真小白入門教程第八集——Bash Shell命令學習5

不管是執行簡單的Linux桌上型電腦或者是大型的Linux伺服器,都需要進行系統磁碟的檢測,以下幾個命令可以幫助你管理儲存媒體 Linux檔案系統將所有的磁碟都併入一個虛擬目錄下,在使用新的儲存媒體之前,需要把它放到虛擬目錄下,這項工作被稱為掛載(插U盤),現如今的大部分Linux發行版都支

執行緒學習5:synchronized 的基礎使用

2018年10月03日 目錄 前言 前言 java中已經有了內建鎖:synchronized,synchronized的特點是使用簡單,一切交給JVM去處理,不需要顯示釋放; j

Java執行緒程式設計-5-使用Lock物件實現同步以及執行緒間通訊

前幾篇: 在《Java多執行緒程式設計-(4)-執行緒間通訊機制的介紹與使用》已經學習了,可以使用方法wait/notify 結合同步關鍵字syn

C#.net同步非同步SOCKET通訊和執行緒總結5tcp傳送和接受的程式碼

基於TCP協議的傳送和接收端 TCP協議的接收端 using System.Net.Sockets ; //使用到TcpListen類 using System.Threading ; //使用到執行緒 using System.IO ; //使用到StreamReader類 int port = 800

如何快速入門python這篇文章幫你指明方向零基礎的福音

一個 交流群 企業 小項目 調用 不錯 數據類型 數據 入門 這是曾經在悟空問答回答的一個問題,後來效果還不錯,所以發出來,裏面結合了當年的學習經驗和一些行業老師的建議,希望幫助更多有興趣的人。(第三點福利) Python語言這幾年大火,在世界編程語言排行中Python也位

Go語言實現區塊鏈與加密貨幣-Part3交易優化單機模擬節點通訊

交易(二) 在這個系列文章的一開始,我們就提到了,區塊鏈是一個分散式資料庫。不過在之前的文章中,我們選擇性地跳過了“分散式”這個部分,而是將注意力都放到了“資料庫”部分。到目前為止,我們幾乎已經實現了一個區塊鏈資料庫的所有元素。今天,我們將會分析之前跳過的一些機制。而在本篇文章中,我們將

某高校計算機程式設計教授教你如何快速入門python一文帶你進入程式設計

如何快速入門Python 學習任何一門語言都是從入門(1年左右),通過不間斷練習達到熟練水準(3到5年),少數人最終能精通語言,成為執牛耳者,他們是金字塔的最頂層。雖然萬事開頭難,但好的開始是成功的一半,今天這篇文章就來談談如何開始入門 Python。只要方向對了,就不怕路遠。 設定目標

mongodb 中的 map reduce 的快速入門例子簡單操作和理解。

先看下mongodb官方給出的例子的圖。 個人理解的解釋: 這個圖,有四列資料。 第一列:原始資料。通常對應的mongodb裡面的一個表collection。 第二列:經過某些條件過濾過的資料,這個圖裡面就是按{"status":"A"}過濾資料。這個過濾的條件對應上面程式

快速入門CSS知識重點內容小結

盒子模型 把html頁面的元素看作一個矩形的盒子,相當於一個承裝內容的容器。每個矩形都由四個部分組成:填充層(內容) ,內邊框(padding) ,邊框(border) ,外邊框(margin)組成。 box-sizing取值: content-box(預設值)----wei

為了快速入門threejs學學threejs三大元件。

<!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">    &nb

React + Webpack入口打包配置基礎配置快速打包優化打包速度

1. 安裝編譯外掛 編譯 jsx、es6、scss 等資源 ● 使用 bael 和 babel-loader 編譯 jsx、es6 ● 安裝外掛: babel-preset-es2015 用於解析 es6 ● 安裝外掛:babel-preset-react 用於

aelf開發進展更新:經濟系統適配升級改進已完成側鏈節點調試正按計劃推進

mark blog 測試 watermark 多節點 進行 細節 ffffff 影響 截至目前,經濟系統適配改進之後的共識模塊開發已完成,瀏覽器插件第二版已按計劃完成更新,經濟系統回歸已完成80%。以下是詳細開發進展。 上周開發進展 ? Release-v0.7.0 [驗

git零基礎快速入門實戰重點講解在實際生產中整合idea對版本、分支的管理等

html lan 幫助 rec 工具 log .com 咖啡館 ise 1、git簡單描述   git是重要的版本管理工具,幾乎每個碼農都有自己的git賬號管理自己的代碼,同時很多公司也是用git管理公司的代碼,   因此掌握git在實際生產中的常規使用非常重要。 2

十分鐘快速入門 Python看完即會不用收藏!

win 等待 變量命名 json stdin 要求 收藏 初始化 mage 本文以 Eric Matthes 的《Python編程:從入門到實踐》為基礎,以有一定其他語言經驗的程序員視角,對書中內容提煉總結,化繁為簡,將這本書的精髓融合成一篇10分鐘能讀完的文章。 讀完本篇