OpenStack命令行工具與API

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安裝(升級):

  1. # pip install [–upgrade] <package-name> 

卸載軟件

  1. # pip uninstall <package-name> 

如果你需要更加新的客戶端版本,可以用pip加-e參數直接從git庫安裝。你必須爲需要安裝的Python egg指定名稱。例如:

  1. # pip install -e git+https://github.com/openstack/python-novaclient.git#egg=python-novaclient 

如果你需要在你的雲上支持EC2 API的話,你還需要安裝”euca2ools”軟件包或者一些其他的EC2 API的工具,這樣你可以和你的用戶有相同的視圖。如何使用EC2 API工具超出了這本手冊的範圍,但是我們會討論如何得到使用EC2的認證。

管理命令行工具

以下是幾種 *-manage命令行工具:

  1. 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的過程,例如

  1. # 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服務條目:

  1. $ curl -s -X POST http://203.0.113.10:35357/v2.0/tokens 
  2. -d ‘{“auth”: {“passwordCredentials”: {“username”:”test-user”, “password”:”test-password”}, “tenantName”:”test-project”}}’ -H “Content-type: application/json” | jq . 

通過閱讀JSON的響應切身體會一下目錄是如何被安排的。

爲了使後續的請求更方便,我們把token儲存在環境變量中。

  1. TOKEN=`curl -s -X POST http://203.0.113.10:35357/v2.0/tokens 
  2. -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,譬如計算的服務,然後嘗試着發出一個請求,例如列出實例。

  1. $ 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雲平臺,通過運行

  1. $ 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,運行如下命令將會看到。

  1. $cinder-manage host list | sort 
  2. 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中設置了合適的管理權限的變量。

  1. $ 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,運行

  1. $ 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網絡

  1. $ nova-manage network list 
  2. 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,運行:

  1. $ nova-manage floating list 
  2. 2725bbd458e2459a8c1bd36be859f43f 1.2.3.4 None nova vlan20 None 1.2.3.5 48a415e7-6f07-4d33-ad00-814e60b010ff nova vlan20 

這裏,兩個floating IP可用,第一個已經被分配,第二個空間

用戶和項目

列出雲平臺下的項目列表,運行

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

用戶列表,運行

  1. $ keystone user-list 
id name enabled email
... 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或者一個組裏面就一個用戶。

在運行的實例

顯示運行中的實例列表:

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

不幸的是這個命令沒法告訴你更多的關於實例的細節,例如實例跑在哪個計算節點,實例的配置等等。你可以使用下面的命令來單獨查看每個實例的細節:

  1. $ nova show <uuid>> 

舉例:

  1. # 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 ...

【編輯推薦】

【責任編輯:奔跑的冰淇淋 TEL:(010)68476606】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章