目錄
1、安裝環境說明
OS:Ubuntu 14.04 LTS
Controller
- IP:10.0.0.11 / 24
- Gateway:10.0.0.1
Network
- Management IP:10.0.0.21 / 24 (eth0)
- Gateway:10.0.0.1
- Instance Tunnel IP:10.0.1.21 / 24 (eth1)
- External Interface (eth2)
- IP:不指定 IP
- 設定方式如下:(修改 /etc/network/interfaces)
auto eth2
iface eth2 inet manual
up ip link set dev $IFACE up
down ip link set dev $IFACE down
Compute 1
- Management IP:10.0.0.31 / 24
- Gateway:10.0.0.1
- Instance Tunnel IP:10.0.1.31
修改每個 node 的 /etc/hosts 檔案,並加入以下內容:
10.0.0.11 controller
10.0.0.21 network
10.0.0.31 compute1
- 使用者身分:root
2、Compute Service (NOVA) 概觀
Compute Service 在整個 IaaS 的架構中是屬於最主要的部份,同時會向 Identity Service 進行認證授權、向 Image Service 要求 image、將資料提供給 Dashboard …. 等等。
而整個 Compute Service (NOVA) 包含了以下幾個重要部分:
2.1 API
2.1.1 nova-api service
用來處理 & 回應終端使用者的 Compute API call,除了支援 OpenStack API 之外,還支援了 Amazon EC2 以及管理用 API。
2.1.2 nova-api-metadata service
通常會用在多個 compute node 並安裝 nova-network 時使用,用來回應來自 instance 對 metadata 的要求。
2.2. Compute core
這元件包含了幾個重要的 daemon,來共同組成 Compute Core 以提供服務:
2.2.1 nova-compute
主要目的是與 hypervisor API 溝通,已建立 / 中止 VM instance。
簡單來說,這個 daemon 僅接受來自 Message Queue 的訊息並執行相關命令而已,例如啟動一個 KVM instance、更新 instance 在資料庫中的狀態。
2.2.2 nova-scheduler
取得 VM instance 的需求後,根據制定的規則 & 目前情況,決定要讓 VM 在哪一台實體主機啟動。
2.2.3 nova-conductor
作為 nova-ompute 與 DB 之間的橋樑,目的是為了減少 nova-compute 直接存取 DB 的行為。
2.3 Networking for VMs
這個部分的功能已經被移進獨立的 Network Service (Neutron) 了,但還是可以簡單說明一下:
2.3.1 nova-network
同樣也是一支 daemon,接收來自 Message Queue 的網路相關需求並處理,例如:設定 bridge 介面 or iptables 規則 …. 等等。
2.3.2 nova-dhcpbridge script
用來追蹤在資料庫中 IP 租用 & 釋放的資訊。
2.4 Console interface
2.4.1 nova-novncproxy (daemon)
作為透過 VNC 連線時存取 instance VM 的 proxy 之用,支援 browser-based novnc client。
2.4.2 nova-xvpnvncproxy (daemon)
作為透過 VNC 連線時存取 instance VM 的 proxy 之用,支援 Java client 的連線。
2.4.2 nova-consoleauth (daemon)
用來驗證由 console proxy (上面的 nova-novncproxy & nova-xvpnvncproxy) 所提供的使用者 token。
2.5 Command-line clients and other interfaces
2.5.1 nova client
允許使用者以 tenant admin or 一般使用者的身分執行命令。
2.5.2 nova-manage client
允許 OpenStack 管理者執行命令。
2.6 Other components
2.6.1 Message Queue
任何實作 AMQP 的 message queue 服務,用來作為所有 daemon 通訊的中介,這邊我們所使用的 RabbitMQ。
2.6.2 SQL Database
儲存在 OpenStack 上運行的所有 VM instance 的狀態、網路設定、相關專案,任何 SQLAlchemy 支援的 DB 都可以使用,我們這邊所使用的是 MySQL。
3、安裝 Compute Service
Compute Service 其實是由好幾個 service 一同合作,讓使用者可以啟用 VM instance。
安裝的時候可以將這些 service 安裝在不同的機器上,也可以都裝在相同的機器上;在這邊我們將大部分的 service 安裝在 controller node 上,而主要啟動 VM instance 的服務則安裝在 compute node 上。
首先在 controller node 上安裝 Compute 相關必要套件:
controller# apt-get -y install nova-api nova-cert nova-conductor nova-consoleauth nova-novncproxy nova-scheduler python-novaclient
3.1 設定 Message Queue & VNC
修改 nova 設定檔(/etc/nova/nova.conf),指定 Message Queue 服務 & VNC 相關設定,在 [DEFAULT] 區段中加入以下設定:
[DEFAULT]
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = YOUR_RABBIT_PASS
my_ip = 10.0.0.11
vncserver_listen = 10.0.0.11
vncserver_proxyclient_address = 10.0.0.11
3.2 設定資料庫
接著準備好 nova 相關 daemon 會用到的 DB & 權限設定:
controller# mysql -u root -p
Enter password:
mysql> create database nova;
mysql> grant all privileges on nova.* to 'nova'@'localhost' identified by 'YOUR_NOVA_DB_PASSWORD';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on nova.* to 'nova'@'%' identified by 'YOUR_NOVA_DB_PASSWORD';
Query OK, 0 rows affected (0.00 sec)
新增 Tables @ Nova DB:
controller# sh -c "nova-manage db sync" nova
修改 nova 設定檔(/etc/nova/nova.conf),加入 DB 相關設定:
[database]
connection = mysql://nova:YOUR_NOVA_DBPASS@controller/nova
移除原本存在的 SQLite 檔案:
controller# rm /var/lib/nova/nova.sqlite
3.3 設定 Identity Service 認證
# 建立 nova 用的 user
controlle# keystone user-create --name=nova --pass=YOUR_NOVA_PASSWORD --email=admin@example.com
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| email | admin@example.com |
| enabled | True |
| id | 5cdbbe2f486641e5966199af5d743441 |
| name | nova |
| username | nova |
+----------+----------------------------------+
# 將 user / service Tenant / admin Role 連結
controller# keystone user-role-add --user=nova --tenant=service --role=admin
3.4 向 Identity Service 註冊 Nova 為 Compute Service
# 建立 service 資訊
controller# keystone service-create --name=nova --type=compute --description="OpenStack Compute"
+-------------+----------------------------------+
| Property | Value |
+-------------+----------------------------------+
| description | OpenStack Compute |
| enabled | True |
| id | 87c4529e337e45df94a9c101d7097db4 |
| name | nova |
| type | compute |
+-------------+----------------------------------+
# 建立 API 服務端點資訊並與 service 連結
controller# # keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}') --publicurl=http://controller:8774/v2/%\(tenant_id\)s --internalurl=http://controller:8774/v2/%\(tenant_id\)s --adminurl=http://controller:8774/v2/%\(tenant_id\)s
+-------------+-----------------------------------------------------+
| Property | Value |
+-------------+-----------------------------------------------------+
| adminurl | http://controller:8774/v2/%(tenant_id)s |
| id | be0f81e5b41a453a920dd2360c713af6 |
| internalurl | http://controller:8774/v2/%(tenant_id)s |
| publicurl | --publicurl=http://controller:8774/v2/%(tenant_id)s |
| region | regionOne |
| service_id | 87c4529e337e45df94a9c101d7097db4 |
+-------------+-----------------------------------------------------+
修改 nova 設定檔(/etc/nova/nova.conf),加入以下設定:
[DEFAULT]
auth_strategy = keystone
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = YOUR_NOVA_PASS
3.5 啟動 Compute 相關服務
controller# service nova-api restart
controller# service nova-cert restart
controller# service nova-consoleauth restart
controller# service nova-scheduler restart
controller# service nova-conductor restart
controller# service nova-novncproxy restart
3.6 驗證安裝是否成功
# 透過 shell script 匯入 OS_USERNAME / OS_PASSWORD / OS_TENANT_NAME / OS_AUTH_URL 等環境變數
controller# source ~/OpenStack/admin-openrc.sh
# 查詢目前 compute host 可用的 image list (向 Glance 查詢)
controller# nova image-list
+--------------------------------------+---------------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+---------------------+--------+--------+
| 0985b2f3-058e-4ab9-84e3-65c51f849408 | cirros-0.3.3-x86_64 | ACTIVE | |
| 77c0d5f8-1bcc-4937-932c-72f4b0eccbc3 | cirros-0.3.3-x86_64 | ACTIVE | |
+--------------------------------------+---------------------+--------+--------+
4、設定 Compute Node
設定好 controller 上的 compute service 之後,接著要來設定實際執行 VM instance 的 compute node。
Compute node 主要的工作是接收來自 controller 的命令,並運行 VM instance。
4.1 安裝操作 Hypervisor 用套件
OpenStack 可以兼容多種 hypervisor (KVM / Xen / VMware ESXi / MS Hyper-V … etc),這邊以 KVM 為例,安裝相關操作套件:
compute1# apt-get -y install nova-compute-kvm
4.2 修改設定檔 (/etc/nova/nova.conf)
# 設定 Message Queue 相關資訊
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = YOUR_RABBIT_PASS
# 設定 compute node IP & 相關的 vnc server 位置
my_ip = 10.0.0.31
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 10.0.0.31
novncproxy_base_url = http://controller:6080/vnc_auto.html
# 指定以 keystone 進行認證工作
auth_strategy = keystone
# 指定 Glace 服務所在位置(這邊設定在 controller 上)
glance_host = controller
# 資料庫相關設定
[database]
connection = mysql://nova:YOUR_NOVA_DB_PASSWORD@controller/nova
# keystone 相關設定
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = YOUR_KEYSTONE_PASSWORD
4.3 檢查 compute node 是否具備硬體加速功能 for 虛擬化
透過以下指令:
compute1# egrep -c '(vmx|svm)' /proc/cpuinfo
1
若以上指令出現的數字為 0,表示目前 compute node 的 cpu 不支援虛擬化硬體加速,這時候就要編輯 /etc/nova/nova-compute.conf 檔案,將 virt_type 改成 qemu:
[libvirt]
virt_type = qemu
4.4 啟動 compute 服務
# 移除不需要的 SQLite 檔案
compute1# rm /var/lib/nova/nova.sqlite
# 啟動 nova-compute 服務
compute1# service nova-compute restart
看起來像是 Image Service(Glance) 沒有安裝好,你可以先檢查:
回覆刪除1、controller 的 8774 port 是否有在 listen ?
2、查詢 Glance 是否有向 Keystone 註冊服務 & 建立 API endpoint?
1.# netstat -nlp
回覆刪除tcp 0 0 0.0.0.0:8774 0.0.0.0:* LISTEN 29439/python
看起來是有在listen
2.請問如何查詢??
謝謝
Glance 有沒有向 Keystone 註冊成功可以進到 controller 的 MySQL 檢查(因為 Glance & Keystone 在這個範例中都是裝在 controller 中的)。
回覆刪除另外,你有執行 admin-openrc.sh 這個 script 將 OS_USERNAME / OS_PASSWORD / OS_TENANT_NAME / OS_AUTH_URL 等環境變數設定完成了嗎?
你好
回覆刪除你說的是指在mysql databases裡的keystone中要有glance嗎?
若是的話,我沒看到
該從哪查找原因呢?
我有執行 admin-openrc.sh
謝謝
請檢查 controller 中的 MySQL:
刪除1. glance 資料庫 是否存在
2. keystone 資料庫中,查詢 "service" Table (SELECT * FROM keystone.service;),檢查是否有 type 為 image 的資料列存在,若不存在,請按照網頁(http://godleon.blogspot.tw/2014/09/openstack-ubuntu-1404-3-image-service.html) 章節 3.5 的步驟操作一遍,將 Glance 註冊到 Keystone 上
PS. 所有的 service & API endpoint 都必須向 Keystone 註冊....
mysql> SELECT * FROM keystone.service;
回覆刪除+----------------------------------+----------+--------------------------------------------------------------+---------+
| id | type | extra | enabled |
+----------------------------------+----------+--------------------------------------------------------------+---------+
| 7d9846a0c4c546cab434abe96b4b1c53 | identity | {"name": "keystone", "description": "OpenStack Identity"} | 1 |
| bfe1bc72e2a84c2b95d29397684bded9 | compute | {"name": "nova", "description": "OpenStack Compute"} | 1 |
| fde83afc84db43308134f5ca303f8b9b | image | {"name": "glance", "description": "OpenStack Image Service"} | 1 |
+----------------------------------+----------+--------------------------------------------------------------+---------+
3 rows in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| glance |
| keystone |
| mysql |
| nova |
| performance_schema |
+--------------------+
6 rows in set (0.00 sec)
好像都有您說的耶...
還有其他可能原因嗎?
我的ubuntu是14.04.1 LTS
版本應該跟您一樣吧?
謝謝您熱心回應我這新手 :-)
我使用的 Ubuntu 版本是跟您相同的~
刪除建議你輸入以下指令,讓 openstack 輸出 debug 訊息來尋找真正原因~
nova --debug image-list
glance --debug image-list
PS. 我也是新手,大家一起加油吧! XD
作者已經移除這則留言。
回覆刪除您好
回覆刪除您這段有多打一次--publicurl=
# keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}') --publicurl=--publicurl=http://controller:8774/v2/%\(tenant_id\)s --internalurl=http://controller:8774/v2/%\(tenant_id\)s --adminurl=http://controller:8774/v2/%\(tenant_id\)s
我的出錯也是因為我偷懶用複製貼上而沒注意到 ><"
刪除阿對了,後來我有找到這個錯誤,不過我忘記把 Blog 的內容修正了....真是抱歉...
刪除您去修改 keystone 資料庫的 endpoint table,把 url 的內容修正,重新啟動服務,應該就會正常了!
謝謝您的提醒! ^_^
您好 想請問一下
回覆刪除做到4.3 檢查 compute node 是否具備硬體加速功能 for 虛擬化
一開始打指令是顯示0,最後照步驟去更改/etc/nova/nova-compute.conf裡的
[libvirt]
virt_type = qemu
還是顯示0,是哪邊有出錯呢 還是系統本來就不支援呢
我是用Ubuntu14.04圖形化界面的
顯示 0 只是表示您的 compute node 的 CPU 不支援虛擬化硬體加速,跟您設定的 virt_type 沒什麼關係
刪除您只要確認你的 virt_type = qemu 就行了
如果有支援虛擬化硬體加速(大於 0),才可以改成 kvm
作者已經移除這則留言。
刪除意思是說顯示0沒關係
刪除直要有把virt_type = qemu 設好
就算是顯示0 也可以繼續往下做了嗎?
是的,顯示 0 沒關係
刪除只要將 virt_type 設定為 qemu 就可以繼續往下~
您好:
回覆刪除目前遇到一個問題,想請教大大
在controller node 輸入nova image-list後
出現以下的錯誤:
ERROR (ConnectionError): HTTPConnectionPool(host='controller', port=8774): Max retries exceeded with url: /v2/e04fb9e442d04e189df4503f3e0f70d8/images/detail (Caused by : [Errno 111] Connection refused)
有檢查過keystone,請問大大這是哪邊出錯了呢??找好久找不出來QAQ...
剛剛我試著執行service nova-api restart,
刪除stop: Unknown instance:
nova-api start/running, process 3820
感覺這邊就有問題了
netstat -nlp 似乎也沒有listen.....不過剛剛確認一圈,該裝的的有裝阿QAQ....