這邊的內容是本人參考Openstack DOC加上自己的安裝心得所寫,由於本人學識尚淺若有錯誤在請留言告知~謝謝 <(_ _)>
Compute Service是一個雲端運算控制器,他是IaaS系統主要的一部分,用他來主控與管
理雲端運算系統,主要的modules已經透過python實做出來了。
Identity Service如同於身份認證,Image Service如同於映像檔,Dashboard提供使用者一 個管理界面。存取映像檔是被使用者設定的專案所限制、配額受專案限制。Compute Service可以透過硬體水平擴充並且下載映像檔而啟動instance所需。 Compute Service由下列幾個功能區塊所組成:
Identity Service如同於身份認證,Image Service如同於映像檔,Dashboard提供使用者一 個管理界面。存取映像檔是被使用者設定的專案所限制、配額受專案限制。Compute Service可以透過硬體水平擴充並且下載映像檔而啟動instance所需。 Compute Service由下列幾個功能區塊所組成:
API :
- nova-api service. 接受並回應末端使用者的compute API呼叫。支援Openstack、Compute API、Amazon EC2 API和特殊權限使用者admin API的執行動作並通常由orchestration發起活動,例如:執行instance和強制執行某些運作。
- nova-api-metadata service 接受instance發出metadata的request。nova-api-metadata 通常只會被用在當你使用nova-network執行多個host 模式,詳細請見 metadata service 在debian系統上他已經被整合到nova-api package。
compute core :
- nova-compute process. 一個透過hypervisor API建立並且中止虛擬機器instance 的daemon,例如: XenAPI 於XenServer/XCP 、libvirt於KVM或是 QEMU、VmwareAPI於VMware…等,運行起來相當複雜但是基本觀念非常簡單 :接受並執行來自佇列(queue)或是一連串的系統命令,像似啟動KVM instance、帶出這些instance當database變更狀態的時候。
- nova-scheduler process. 概念上是一段在compute內簡短的code,執行佇列上 由虛擬機器發出的request跟決定哪一個compute service host要被執行。
- nova-conductor module. 運作於nova-compute和database之間,主要消除nova- compute直接存取雲端database。nova-conductor module可以水平擴充但是不 要在nova-compute運行的時候佈署任何node,詳細參閱 A new Nova service: nova-conductor
Networking for VMs:
- nova-network . daemon. 類似nova-compute. 接受佇列上有關網路的任務並執 行任務去操作網路,例如:設定bridging interfaces 或是改變iptables的規則。 這個功能已經被合併到Openstack Networking由openstack service獨立出來。
- nova-dhcpbridge script. 追蹤ip address的租用、透過dnsmasq dhcp-script設施 來紀錄這些ip到database。這個功能已經被合併到個功能已經被合併 bOpenstack Networking,Openstack Networking 提供另一個不同的script
Console interface:
- nova-consoleauth daemon. 授權使用者透過console提供代理,詳細請參考 nova-novncproxy和nova-xvpnvcproxy。這個service必須在console代理才能被 執行,任何一種代理可以針對單一nova-consoleauth service執行於cluster的設 定,詳細請參閱 About nova-consoleauth
- nova-novncproxy daemon. 提供一個透過VNC連線存取instance的代理。支援瀏 覽器為基礎的novnc client。
- nova-xvpnvncproxy daemon. 一個透過VNC連線存取instance的代理。支援一個 特別設計給Openstack 的Java client。
- nova-cert daemon. 管理x509憑證。
Image management(EC2 scenario):
- nova-objectstore daemon. 提供S3界面使用Image Service來註冊image,主要用 來安裝支援euca2ools,euca2ools工具使用S3語法來跟nova-objectstore溝通, 並且nova-objectstore轉譯S3的request成Image Service的request。
- euca2ools client. 一組command-line 轉譯命令用來管理雲端資源,雖然不是 Openstack 的module,你可以設定nova-api來支援這個EC2界面,詳細請參閱 Eucalyptus 3.4 Documentation。
Command-line clients and other interfaces:
- nova client. 使使用者的命令被允許如同承租者或是末端用戶
- nova-manage client. 使雲端管理員的命令被允許
Other components:
- The queue. 一個在daemon間訊息傳遞的中心。通常被實做在RabbitMQ,但可 以用任何一種AMQP的message queue,例如Apache Qpid或Zero MQ。
- SQL database. 儲存大部分雲端設施的建置時間和執行狀態,包括可使用的 instance型態、正在使用的instance、可獲得的網路和專案。理論上Openstack Compute可以支援任何的SQL-Alchemy 的database,但是只有SQLite3、MySQL 和PostgreSQL 的databases被廣泛使用。
安裝Compute controller Service:
Compute是使你可以啟動虛擬機器instance的服務集合體,你可以設定這些service執行
在不同的node上或是在同一台node,在這裡大部分的service執行在controller node上並
且啟動虛擬機器運行在專屬的compute node上。這章節會指導你如何安裝與設定這些
service在controller node上。
- 安裝compute packages必須套件在controller node上
- Compute 會儲存資訊到database,由於我們使用MySQL所以設定Compute去找到 mysql與授權存取。下面修改NOVA_DBPASS為你database的密碼。 增修/etc/nova/nova.conf 內[database]這個區段,如果沒有請自行增加:
- 設定Compute Service藉由key來使用RabbitMQ message broker。修改 /etc/nova/nova.conf在[DEFAULT]區段:
- 在controller node 設定my_ip、vncserver_listenconf在和vncserver_proxyclient相關ip位置。 修改/etc/nova/nova.conf內[DEFAULT]區段如下:
- 由於ubuntu package預設會建立SQLite database,所以刪除位於/var/lib/nova/nova.sqlite檔案避免發生錯誤。
- 使用database root帳號登入database建立nova的database帳號,NOVA_DBPASS我們都設定密碼為12345678
- 建立Compute Service 欄位:
- 建立nova 使用者讓Identity Service可以在controller node認證compute,並且給於service 承租者與admin 角色屬性。
- 設定Compute採用Identity Service憑證執行於controller node。請置換下面NOVA_PASS為你的Compute 密碼。 修改/etc/nova/nova.conf內[DEFAULT]區段 加入key:
- 你必須透過Identity Service 登記compute讓openstack service可以找到他。
- 重起Compute Service
- 確認你的設定是否正確:
# apt-get install nova-api nova-cert nova-conductor nova-consoleauth \
nova-novncproxy nova-scheduler python-novaclient
nova-novncproxy nova-scheduler python-novaclient
[database]
connection = mysql://nova:NOVA_DBPASS@controller/nova
connection = mysql://nova:NOVA_DBPASS@controller/nova
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS
...
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS
[DEFAULT]
...
my_ip = 192.168.1.101
vncserver_listen = 192.168.1.101
vncserver_proxyclient_address = 192.168.1.101
...
my_ip = 192.168.1.101
vncserver_listen = 192.168.1.101
vncserver_proxyclient_address = 192.168.1.101
# rm /var/lib/nova/nova.sqlite
$ mysql -u root -p
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
mysql>exit
mysql> CREATE DATABASE nova;
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY 'NOVA_DBPASS';
mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY 'NOVA_DBPASS';
mysql>exit
# su -s /bin/sh -c "nova-manage db sync" nova
$ keystone user-create --name=nova --pass=NOVA_PASS --email=nova@example.com
$ keystone user-role-add --user=nova --tenant=service --role=admin
$ keystone user-role-add --user=nova --tenant=service --role=admin
[DEFAULT]
...
auth_strategy = keystone
...
auth_strategy = keystone
加入key到[keystone_authtoken]區段:
[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 = NOVA_PASS
...
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = nova
admin_password = NOVA_PASS
$ keystone service-create --name=nova --type=compute \
--description="OpenStack Compute"
$ 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
--description="OpenStack Compute"
$ 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
# service nova-api restart
# service nova-cert restart
# service nova-consoleauth restart
# service nova-scheduler restart
# service nova-conductor restart
# service nova-novncproxy restart
# service nova-cert restart
# service nova-consoleauth restart
# service nova-scheduler restart
# service nova-conductor restart
# service nova-novncproxy restart
$ nova image-list
+--------------------------------------+----------------------------+---------+----------+
|ID |Name |Status| Server |
+--------------------------------------+----------------------------+---------+----------+
|acafc7c0-40aa-4026........ |cirros-0.3.2-x86_64 |ACTIVE| |
+--------------------------------------+---------------------------+-----------+----------+
+--------------------------------------+----------------------------+---------+----------+
|ID |Name |Status| Server |
+--------------------------------------+----------------------------+---------+----------+
|acafc7c0-40aa-4026........ |cirros-0.3.2-x86_64 |ACTIVE| |
+--------------------------------------+---------------------------+-----------+----------+
設定Compute Node
在你設定完Compute Service於controller node後,你必須設定另一個系統當作Compute
Node。Compute node 會頻繁地接收來自controller node的request和掌管虛擬機器的
instance,你可以執行所有的service在同一個node上,但是這邊我們將系統做了區分,
這使得我們容易藉由增加Compute node而達到水平擴展,此章節介紹如何新增
Compute Node。
登入到computer node(192.168.1.103)
Compute Service 是藉由hypervisor來運行虛擬機器的instance,Openstack本身行虛擬機器
的instance,Openstack支援各種hypervisor但是這邊我們使用KVM來當作hypervisor。- 安裝Compute packages
- 編輯/etc/nova/nova.conf 增修下列內容為合適的環境設定:
- 設定/etc/nova/nova.conf內[DEFAULT]讓Compute Service使用RabbitMQ message broker
- 設定Compute提供remote console存取instance。 修改/etc/nova/nova.conf 並加入下列內容到[DEFAULT]區段裡
- 指定執行Image Service主機~修改/etc/nova/nova.conf內[DEFAULT]區段如下
- 接下來區分你的Compute Node 的CPU是否支援hypervisor以及使用哪種硬體支援虛擬機器:
- 移除package產生的SQLite database
- 8. 重起Compute Service
# apt-get install nova-compute-kvm
[DEFAULT]
...
auth_strategy = keystone
...
[database]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://nova:NOVA_DBPASS@controller/nova
[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 = NOVA_PASS
...
auth_strategy = keystone
...
[database]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://nova:NOVA_DBPASS@controller/nova
[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 = NOVA_PASS
[DEFAULT]
...
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS
...
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS
[DEFAULT]
...
my_ip = 192.168.1.103
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 192.168.1.103
novncproxy_base_url = http://controller:6080/vnc_auto.html
...
my_ip = 192.168.1.103
vnc_enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = 192.168.1.103
novncproxy_base_url = http://controller:6080/vnc_auto.html
[DEFAULT]
...
glance_host = controller
...
glance_host = controller
$ egrep -c '(vmx|svm)' /proc/cpuinfo
如果回傳值是1以上的數字代表你的系統硬體本身有支援因此無須額外設定。
如果回傳值是0表示你的系統並不支援因此必須設定libvirt來使用QEMU取代KVM(這邊要注意有些 BIOS預設會把hypervisor功能disable,記得開啟之後在檢測看看。)
a. 修改/etc/nova/nova-compute.conf 加入下列內容:
回傳值為0才需要設定!!
[libvirt]
...
virt_type = qemu
[libvirt]
...
virt_type = qemu
# rm /var/lib/nova/nova.sqlite
# service nova-compute restart
留言
張貼留言