http://os.51cto.com/art/201312/421959.htm
從這一刻起本指南中,我們假設你已經有一個OpenStack環境運行起來了。本章節將幫助建立你的工作環境並使用它來帶領你漫步雲端。
命令行工具
我們推薦Openstack命令行工具和Openstack的Dashboard兩者結合使用。一些用戶由於使用過其他雲技術背景的,可能會使用EC2兼容的API,相對於我們需要使用到的Openstack原生的API,這些EC2兼容的API使用了不同命名習慣。
我們強烈建議你從Python Package Index(PyPI)(https://pypi.python.org/)安裝命令行客戶端,而不是從Ubuntu或者Fedora的軟件包。客戶端開發的很快,所以有可能在你安裝的時候,操作系統自帶發行的軟件包已經過時。”pip”可以從大多數的linux發行版裏通過”python-pip”這個軟件包得到,這個工具是用來管理PyPi的安裝包。每個Openstack項目有自己的客戶端,所以根據你使用的服務選擇某些或者所有以下的軟件包:
- python-novaclient(nova CLI)
- python-glanceclient(glance CLI)
- python-keystoneclient(keystone CLI)
- python-cinderclient(cinder CLI)
- python-swiftclient(swift CLI)
- python-quantumclient(quantum CLI)
安裝工具
使用root從PyPi安裝(升級):
- # pip install [–upgrade] <package-name>
卸載軟件
- # pip uninstall <package-name>
如果你需要更加新的客戶端版本,可以用pip加-e參數直接從git庫安裝。你必須爲需要安裝的Python egg指定名稱。例如:
- # pip install -e git+https://github.com/openstack/python-novaclient.git#egg=python-novaclient
如果你需要在你的雲上支持EC2 API的話,你還需要安裝”euca2ools”軟件包或者一些其他的EC2 API的工具,這樣你可以和你的用戶有相同的視圖。如何使用EC2 API工具超出了這本手冊的範圍,但是我們會討論如何得到使用EC2的認證。
管理命令行工具
以下是幾種 *-manage命令行工具:
- nova-manage glance-manage keystone-manage cinder-manage
與上文提到的客戶端工具不同,*-manage工具必須在由root在控制節點上運行,因爲這些命令需要有訪問配置文件的權限,例如/etc/nova.conf,並且需要直接查詢數據庫而不是通過Openstack的API接口。
-manage工具存在是一個遺留問題。openstack項目最終的目標是把這些遺留的-manage工具移植到正規的客戶端工具中去。到目前爲止,你仍舊需要通過ssh登錄到控制節點上運行*-manage工具進行維護管理操作。
獲取證書
如果你要使用命令行工具對你的Openstack雲平臺進行操作,你必須有合適的證書。目前最方便的得到認證證書的方式是使用horizon dashboard。在頂部的導航欄,點擊Setting鏈接,進入用戶配置頁面,在頁面裏你可以爲dashboard視圖設置語言和時區。更重要的是,這個操作改變了左列的導航欄,裏面包含了Openstack API和EC2 Credentials鏈接,這兩個鏈接將會得到可以在你的shell環境中source的文件,文件包含了命令行工具所需要的servide endpoints地址和你的認證信息。
點擊Openstack API鏈接。頂部的部分列出了你的Service Endpoints的URL地址,底部是Download Openstack RC File。爲了以管理員的身份查看雲平臺,你可以從下拉菜單中選擇admin。選擇你需要的project項目,然後點擊Download RC。於是會得到一個名爲openrc.sh的文件,內容類似如下:
#!/bin/bash # With the addition of Keystone, to use an openstack cloud you should # authenticate against keystone, which returns a Token and Service # Catalog. The catalog contains the endpoint for all services the # user/tenant has access to - including nova, glance, keystone, swift. # # NOTE: Using the 2.0 auth api does not mean that compute api is 2.0. # We use the 1.1 compute api export OS_AUTH_URL=http://203.0.113.10:5000/v2.0 # With the addition of Keystone we have standardized on the term tenant # as the entity that owns the resources. export OS_TENANT_ID=98333aba48e756fa8f629c83a818ad57 export OS_TENANT_NAME=”test-project” # In addition to the owning entity (tenant), openstack stores the entity # performing the action as the user. export OS_USERNAME=test-user # With Keystone you pass the keystone password. echo “Please enter your OpenStack Password: ” read -s OS_PASSWORD_INPUT export OS_PASSWORD=$OS_PASSWORD_INPUT |
注意這個操作不會以文本保存你的密碼,這樣做是好事情。但是當你想用這個文件source或者運行腳本,它會提示你輸入你的密碼,並且保存在環境變量OS_PASSWORD中。記住這個過程需要手動交互。如果你想要一個不需要交互的操作,那麼把值直接保存在腳本中。但是這樣做你需要格外小心這個腳本文件的安全和權限。
EC2兼容的認證可以從左邊導航欄中的”EC2 Credentials”鏈接下載,選擇你需要的項目,點擊”Download EC2 Credentials”。會得到一個提供x509證書的zip文件和一個shell腳本。和前面的openrc文件不同,這些證書包含了所有可以訪問你的雲平臺的認證信息,所以在安全的地方創建一個新目錄,在新目錄中解開zip文件。你會得到cacert.pem, cert.pem, ec2rc.sh and pk.pem。ec2rc.sh文件內容類似如下:
#!/bin/bash NOVARC=$(readlink -f “${BASH_SOURCE:-${0}}” 2>/dev/null) ||NOVARC=$(python -c ‘import os,sys; print os.path.abspath(os.path.realpath(sys.argv[1]))’ “${BASH_SOURCE:-${0}}”) NOVA_KEY_DIR=${NOVARC%/*} export EC2_ACCESS_KEY=df7f93ec47e84ef8a347bbb3d598449a export EC2_SECRET_KEY=ead2fff9f8a344e489956deacd47e818 export EC2_URL=http://203.0.113.10:8773/services/Cloud export EC2_USER_ID=42 # nova does not use user id, but bundling requires it export EC2_PRIVATE_KEY=${NOVA_KEY_DIR}/pk.pem export EC2_CERT=${NOVA_KEY_DIR}/cert.pem export NOVA_CERT=${NOVA_KEY_DIR}/cacert.pem export EUCALYPTUS_CERT=${NOVA_CERT} # euca-bundle-image seems to require this set alias ec2-bundle-image=”ec2-bundle-image –cert $EC2_CERT –privatekey $EC2_PRIVATE_KEY –user 42 –ec2cert $NOVA_CERT” alias ec2-upload-bundle=”ec2-upload-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY –url $S3_URL –ec2cert $NOVA_CERT” |
把EC2 credentials放到你的環境裏,source這個ec2rc.sh文件。
命令行的技巧和陷阱
命令行工具可以通過–debug標記來顯示調用Openstack API的過程,例如
- # nova –debug list
這個例子會顯示從客戶端來的HTTP請求和從endpoints的迴應,這些對於對Openstack API定製化客戶端有幫助
Keyring Support(https://wiki.openstack.org/wiki/KeyringSupport)可能就是一個困惑的東西,自這篇文章寫的時候,有一個bug(https://bugs.launchpad.net/python-novaclient/+bug/1020238)。這個bug狀態是open,然後解決,但是仍然有問題,又被重新open。這個bug的問題是在某些條件,命令行工具嘗試使用一個python的鑰匙作爲證書的緩存,在這些情況的一個子集中,會要求在每次使用時會提示一個鑰匙密碼。如果你發現你遇到了這個不幸的情況,添加–no-cache標識或者設置環境變量OS_NO_CACHE=1來避免證書緩存。注意:這會造成命令行工具在每次交互的時候都需要認證。
cURL
優先使用Openstack API而不是命令行工具,他是一個跑在HTTP協議上的RESTful API。多數情況你會希望直接使用API而不是命令行工具,因爲某一個命令行可能會存在bug。最好的使用方式是,結合cURL(http://curl.haxx.se)和其他工具來語法分析響應的JSON,例如jq(http://stedolan.github.com/jq/)
第一件事情你必須使用你的證書來認證來獲取authentication token。證書包含了用戶名、密碼和tenant(項目)。你可以從上面我們談到的openrc.sh文件中得到他們。token允許你不需要再次認證就能和其他的service endpoints交互。Tokens通常存在24小時比較好,當token過期後,你將會收到一個401(未被授權的)響應,然後你可以再請求一個token。
查看你的Openstack服務條目:
- $ curl -s -X POST http://203.0.113.10:35357/v2.0/tokens
- -d ‘{“auth”: {“passwordCredentials”: {“username”:”test-user”, “password”:”test-password”}, “tenantName”:”test-project”}}’ -H “Content-type: application/json” | jq .
通過閱讀JSON的響應切身體會一下目錄是如何被安排的。
爲了使後續的請求更方便,我們把token儲存在環境變量中。
- $ TOKEN=`curl -s -X POST http://203.0.113.10:35357/v2.0/tokens
- -d ‘{“auth”: {“passwordCredentials”: {“username”:”test-user”, “password”:”test-password”}, “tenantName”:”test-project”}}’ -H “Content-type: application/json” | jq -r .access.token.id`
現在你可以在命令行裏面使用變量$TOKEN來得到你的token值 從服務目錄中選擇一個服務endpoint,譬如計算的服務,然後嘗試着發出一個請求,例如列出實例。
- $ curl -s -H “X-Auth-Token: $TOKEN” http://203.0.113.10:8774/v2/98333aba48e756fa8f629c83a818ad57/servers | jq .
要查詢API請求是如何組織的,可以閱讀Openstack API Reference(http://api.openstack.org/api-ref.html)。可以使用jq來細細研究返回的請求響應,閱讀jq Manual(http://stedolan.github.com/jq/manual/)
在cURL命令中使用-s選項可以避免顯示過程信息。如果你在使用cURL時遇到困難,把這個標記去掉。同樣的,加上-v選項會輸出詳細信息,幫助排錯。在cURL中還有更多有用的功能,參考man幫助手冊查詢所有的選項。
服務器和服務
作爲一個管理員,通過使用Openstack工具來讓你查看你的Openstack雲平臺。這部分將會告訴你如何總覽你的雲,組成,大小和狀態。
首先,你可以查詢哪些服務器屬於你的Openstack雲平臺,通過運行
- $ nova-manage service list | sort
輸出類似如下:
Binary Host Zone Status State Updated_At nova-cert cloud.example.com nova enabled :-) 2013-02-25 19:32:38 nova-compute c01.example.com nova enabled :-) 2013-02-25 19:32:35 nova-compute c02.example.com nova enabled :-) 2013-02-25 19:32:32 nova-compute c03.example.com nova enabled :-) 2013-02-25 19:32:36 nova-compute c04.example.com nova enabled :-) 2013-02-25 19:32:32 nova-compute c05.example.com nova enabled :-) 2013-02-25 19:32:41 nova-consoleauth cloud.example.com nova enabled :-) 2013-02-25 19:32:36 nova-network cloud.example.com nova enabled :-) 2013-02-25 19:32:32 nova-scheduler cloud.example.com nova enabled :-) 2013-02-25 19:32:33 |
輸出顯示有5個計算節點和1個雲控制結點。你可以看到一個笑臉:-),表明這個服務是起的並運行着。如果一個服務不可用,:-)會變成XXX。這表明你應該排錯一下爲什麼服務down了。
如果你用了nova-volume(這個服務在Folsom版本後不贊成使用),你會看到一行nova-volume的服務條目。
如果你是用了Cinder,運行如下命令將會看到。
- $cinder-manage host list | sort
- host zone c01.example.com nova c02.example.com nova c03.example.com nova c04.example.com nova c05.example.com nova cloud.example.com nova
通過這兩個表,你現在已經對組成你的雲平臺的服務器和服務有了總的概況。
你也可以使用認證服務(Keystone)查看什麼服務在你的雲平臺可用,什麼服務被配置了endpoints。
以下這個命令需要你在shell中設置了合適的管理權限的變量。
- $ keystone service-list
id | name | type | description |
... | cinder glance nova_ec2 keystone nova | volume image ec2 identity compute | Cinder Service OpenStack Image Service EC2 Service OpenStack Identity Service OpenStack Compute Service |
輸出顯示有5個配置的服務
查看每個服務的endpoint,運行
- $ keystone endpoint-list
+—–+—————————————–+-/+—————————————–+ | id | publicurl | | adminurl | +—–+—————————————–+-/+—————————————–+ | ... | http://example.com:8774/v2/%(tenant_id)s| | http://example.com:8774/v2/%(tenant_id)s| | ... | http://example.com:8773/services/Cloud | /| http://example.com:8773/services/Admin | | ... | http://example.com:9292/v1 | | http://example.com:9292/v1 | | ... | http://example.com:5000/v2.0 | /| http://example.com:35357/v2.0 | | ... | http://example.com:8776/v1/%(tenant_id)s| | http://example.com:8776/v1/%(tenant_id)s| +—–+—————————————–+-/+—————————————–+
服務和endpoint之間應該是一對一的映射,注意一些服務的公共URL和管理URL是不同的URLs和端口。
網絡
接下來,看看你的雲環境中的Fixed IP網絡
- $ nova-manage network list
- id IPv4 IPv6 start address DNS1 DNS2 VlanID project uuid 1 10.1.0.0/24 None 10.1.0.3 None None 300 2725bbd beacb3f2 2 10.1.1.0/24 None 10.1.1.3 None None 301 none d0b1a796
輸出顯示兩個被配置的網絡,每個網絡包含255個IP。第一個網絡被分配給一個專門的項目,第二個網絡沒有分配。你可以手動分配,或者他也會自動被分配當一個項目啓動第一個實例的時候
查看雲平臺中的floating ip,運行:
- $ nova-manage floating list
- 2725bbd458e2459a8c1bd36be859f43f 1.2.3.4 None nova vlan20 None 1.2.3.5 48a415e7-6f07-4d33-ad00-814e60b010ff nova vlan20
這裏,兩個floating IP可用,第一個已經被分配,第二個空間
用戶和項目
列出雲平臺下的項目列表,運行
- $ keystone tenant-list
id | name | enabled |
... | jtopjian alvaro everett admin services jonathan lorin anne rhulsker tom adam | True True True True True True True True True True True |
用戶列表,運行
- $ keystone user-list
id | name | enabled | |
... | everett jonathan nova rhulsker lorin alvaro anne admin cinder glance jtopjian adam tom | True True True True True True True True True True True True True | [email protected] [email protected] nova@localhost [email protected] [email protected] [email protected] [email protected] root@localhost cinder@localhost glance@localhost [email protected] [email protected] [email protected] |
注意,有時候用戶和組是一一對應的。通常在標準的系統用戶是這樣的,例如cinder, glance, nova, swift或者一個組裏面就一個用戶。
在運行的實例
顯示運行中的實例列表:
- $ nova list –all-tenants
ID | Name | Status | Networks |
... | Windows cloud controller compute node 1 devbox devstack initial lorin-head | ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE ACTIVE | novanetwork_1=10.1.1.3, 199.116.232.39 novanetwork_0=10.1.0.6; jtopjian=10.1.2.3 novanetwork_0=10.1.0.4; jtopjian=10.1.2.4 novanetwork_0=10.1.0.3 novanetwork_0=10.1.0.5 nova_network=10.1.7.4, 10.1.8.4 nova_network=10.1.7.3, 10.1.8.3 |
不幸的是這個命令沒法告訴你更多的關於實例的細節,例如實例跑在哪個計算節點,實例的配置等等。你可以使用下面的命令來單獨查看每個實例的細節:
- $ nova show <uuid>>
舉例:
- # nova show 81db556b-8aa5-427d-a95c-2a9a6972f630
Property | Value |
OS-DCF:diskConfig OS-EXT-SRV-ATTR:host OS-EXT-SRV-ATTR:hypervisor_hostname OS-EXT-SRV-ATTR:instance_name OS-EXT-STS:power_state OS-EXT-STS:task_state OS-EXT-STS:vm_state accessIPv4 accessIPv6 config_drive created flavor hostId id image key_name metadata name novanetwork_0 network progress security_groups status tenant_id updated user_id |
MANUAL c02.example.com c02.example.com instance-00000029 1 None active 2013-02-13T20:08:36Z m1.small (6) ... ... Ubuntu 12.04 cloudimg amd64 (...) jtopjian-sandbox {} devstack 10.1.0.5 0 [{u’name’: u’default’}] ACTIVE ... 2013-02-13T20:08:59Z ... |
【編輯推薦】