安裝Openstack 個人翻譯.....(6)Compute Service


這邊的內容是本人參考Openstack DOC加上自己的安裝心得所寫,由於本人學識尚淺若有錯誤在請留言告知~謝謝 <(_ _)>

Compute Service是一個雲端運算控制器,他是IaaS系統主要的一部分,用他來主控與管 理雲端運算系統,主要的modules已經透過python實做出來了。
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被廣泛使用。
其他Openstack service會與Compute Service相關運用的有: 認證的Idnetity Service、映像 檔的Image Service和網頁界面的dashboard。

安裝Compute controller Service:
Compute是使你可以啟動虛擬機器instance的服務集合體,你可以設定這些service執行 在不同的node上或是在同一台node,在這裡大部分的service執行在controller node上並 且啟動虛擬機器運行在專屬的compute node上。這章節會指導你如何安裝與設定這些 service在controller node上。
  1. 安裝compute packages必須套件在controller node
  2. # apt-get install nova-api nova-cert nova-conductor nova-consoleauth \
    nova-novncproxy nova-scheduler python-novaclient

  3. Compute 會儲存資訊到database,由於我們使用MySQL所以設定Compute去找到 mysql與授權存取。下面修改NOVA_DBPASS為你database的密碼。
  4. 增修/etc/nova/nova.conf [database]這個區段,如果沒有請自行增加:
    [database]
    connection = mysql://nova:NOVA_DBPASS@controller/nova

  5. 設定Compute Service藉由key來使用RabbitMQ message broker。修改 /etc/nova/nova.conf[DEFAULT]區段:
  6. [DEFAULT]
    ...
    rpc_backend = rabbit
    rabbit_host = controller
    rabbit_password = RABBIT_PASS

  7. 在controller node 設定my_ip、vncserver_listenconf在和vncserver_proxyclient相關ip位置。
  8. 修改/etc/nova/nova.conf[DEFAULT]區段如下:
    [DEFAULT]
    ...
    my_ip = 192.168.1.101
    vncserver_listen = 192.168.1.101
    vncserver_proxyclient_address = 192.168.1.101

  9. 由於ubuntu package預設會建立SQLite database,所以刪除位於/var/lib/nova/nova.sqlite檔案避免發生錯誤。
  10. # rm /var/lib/nova/nova.sqlite

  11. 使用database root帳號登入database建立nova的database帳號,NOVA_DBPASS我們都設定密碼為12345678
  12. $ 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

  13. 建立Compute Service 欄位:
  14. # su -s /bin/sh -c "nova-manage db sync" nova

  15. 建立nova 使用者讓Identity Service可以在controller node認證compute,並且給於service 承租者與admin 角色屬性。
  16. $ keystone user-create --name=nova --pass=NOVA_PASS --email=nova@example.com
    $ keystone user-role-add --user=nova --tenant=service --role=admin

  17. 設定Compute採用Identity Service憑證執行於controller node。請置換下面NOVA_PASS為你的Compute 密碼。
  18. 修改/etc/nova/nova.conf[DEFAULT]區段 加入key:
    [DEFAULT]
    ...
    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


  19. 你必須透過Identity Service 登記compute讓openstack service可以找到他。

  20. $ 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


  21. 重起Compute Service

  22. # service nova-api restart
    # service nova-cert restart
    # service nova-consoleauth restart
    # service nova-scheduler restart
    # service nova-conductor restart
    # service nova-novncproxy restart


  23. 確認你的設定是否正確:

  24. $ nova image-list
    +--------------------------------------+----------------------------+---------+----------+
    |ID                                          |Name                        |Status| Server |
    +--------------------------------------+----------------------------+---------+----------+
    |acafc7c0-40aa-4026........        |cirros-0.3.2-x86_64    |ACTIVE|            |
    +--------------------------------------+---------------------------+-----------+----------+

設定Compute Node
在你設定完Compute Service於controller node後,你必須設定另一個系統當作Compute NodeCompute 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。
  1. 安裝Compute packages
  2. # apt-get install nova-compute-kvm

  3. 編輯/etc/nova/nova.conf 增修下列內容為合適的環境設定:
  4. [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

  5. 設定/etc/nova/nova.conf[DEFAULT]讓Compute Service使用RabbitMQ message broker
  6. [DEFAULT]
    ...
    rpc_backend = rabbit
    rabbit_host = controller
    rabbit_password = RABBIT_PASS

  7. 設定Compute提供remote console存取instance。
  8. 修改/etc/nova/nova.conf 並加入下列內容到[DEFAULT]區段裡
    [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

  9. 指定執行Image Service主機~修改/etc/nova/nova.conf[DEFAULT]區段如下
  10. [DEFAULT]
    ...
    glance_host = controller

  11. 接下來區分你的Compute Node 的CPU是否支援hypervisor以及使用哪種硬體支援虛擬機器:
  12. $ 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

  13. 移除package產生的SQLite database
  14. # rm /var/lib/nova/nova.sqlite

  15. 8. 重起Compute Service
  16. # service nova-compute restart
............待續

留言