效率篇-“私人訂製”Openstack管理後臺

當在排除萬難上線openstack後,發現官方管理後臺(dashboard)那麼的簡潔、那麼的歪果仁化,有沒有一種做一次“私人訂製”的衝動。在線上跑了一段時間後這種衝動轉化了動力,用了半個月時間推出融合部門內各個同事需求的openstack 管理後臺。


不能容忍的點

1.各個機房都會存在1+套openstack,管理員需要登錄多套dashboard。

2.虛機等信息與運維平臺脫節,eg:這臺vm屬於哪個應用,屬於哪個運維負責,屬於哪個資產登記號等等。


wKioL1jExazg4kiDAADmdZrGItE114.jpg


改造的目標

1.運維同事只在一個入口就可以管理所有的openstack。

2.與現有運維平臺信息互通。

3.儘量靠近公有云的用戶體驗模式。


改造的功能

實例(虛機):創建、刪除、升級配置、啓動、停止、在線遷移、登陸等。

卷(硬盤):創建、擴容、鏡像、刪除等。

模板(虛機cpu、內存、系統盤):創建、刪除等。

鏡像:實時同步數據。(因爲上傳鏡像需要花上時間,就用命令行進行)

還有其它配套功能。


使用技術

前端:angularjs 雙向綁定,主要呈現結果頁面快速顯示(也可以用ajax來全部構建)。

後端:java(jsp、spring、mybatis)。

與openstack對接的工作層:python。

後端與工作層中引入隊列:減低頁面操作量大,從而引起的瓶頸風險。


架構


wKioL1jExeKgK2GzAAB5rxkjYkE632.jpg-wh_50


Web:現有運維平臺。(除了特殊數據外,其它數據都在運維平臺數據中留一份,提高查詢效率)

Queue:存儲操作請求。

Worker:與openstack Restful API打交道,並把結果返回Web。

(非特殊情況,只准單向操作,Web中操作Openstack,從而保證數據一致性)


效果對比


|||||||||||

創建實例

原模式

wKiom1jExhviugvKAACKvEWg_VA992.jpg-wh_50


現在效果

wKioL1jExlKwM9qcAABMb0H817w330.jpg



|||||||||||

實例列表


原模式

wKioL1jExpvTeMgVAABGENbhqoo080.jpg

現效果

wKiom1jExriDrYSiAABaXXsrXzA670.jpg



太多張圖片就不在這裏一一列舉了,頁面用戶交互基本參考了各大公有云(阿里、tx、ucloud)廠商實現。


剛上線的時候,童鞋們的表情是這樣,大家都還滿意新的管理界面。


wKioL1jExtTyGqKqAAA_BIgI5jc255.jpg



Openstack對接介紹


對Openstack的使用基本基於四種方式:

1.OpenStack client

2.cURL

3.Rest API(本次改造是基於該模式)

4.OpenStack SDK


這裏介紹兩個API,其它可以詳讀API文檔(http://docs.openstack.org/api/quick-start/content/index.html)(用curl進行示範)

PS:OpenStack client中每個命令都可以加入-debug 從而看到每個命令詳細調用過程。


post和get請求各舉例一個。可以有個認識:post是增刪改相關;get是查詢相關。


1.獲取訪問權限和API前綴

http://管理端:5000/v2.0/tokens

方式:POST

參數:

tenantName, passwordCredentials,username ,password

eg:

curl -d '{"auth":{"tenantName":"","passwordCredentials":{"username":"", "password":""}}}' -H "Content-type: application/json" http://:5000/v2.0/tokens | python -m json.tool

注意:header 中 content-type 必須json

返回結果:包含了token、nova、glance、neutron等訪問授權和api前綴。


2.獲取實例信息

(http://IP:PORT/v2/授權id/)servers/實例id

()內是通過授權獲得的信息。

方式:GET

參數:實例id

eg:

curl -s -H "X-Auth-Token: xxx" http://172.16.10.2:8774/v2/2f50e3cc08d944fdb9dd0e328659c6f0/servers/2f77c971-4848-4923-84e3-c224498300d1  | python -mjson.tool

{

"server": {

"OS-DCF:diskConfig": "AUTO",

"OS-EXT-AZ:availability_zone": "nova",

"OS-EXT-SRV-ATTR:host": "noc",

"OS-EXT-SRV-ATTR:hypervisor_hostname": "nodctc",

"OS-EXT-SRV-ATTR:instance_name": "instance-00000001",

"OS-EXT-STS:power_state": 1,

"OS-EXT-STS:task_state": null,

"OS-EXT-STS:vm_state": "active",

"OS-SRV-USG:launched_at": "201000",

"OS-SRV-USG:terminated_at": null,

"accessIPv4": "",

"accessIPv6": "",

"addresses": {

"Private": [

{

"OS-EXT-IPS-MAC:mac_addr": "fa:16:ae:9eb",

"OS-EXT-IPS:type": "fixed",

"addr": "192.1682",

"version": 4

}

]

},

"config_drive": "",

"created": "2016-14Z",

"flavor": {

"id": "2",

"links": [

{

"href": "http://172.16.10.2:8774/2f50e3cc08d944fdb9dd0e328659c6f0/flavors/2",

"rel": "bookmark"

}

]

},

"hostId": "b30ea8de3f06f2e7f9771aee23badc99f24a3b05cba13fe7f893682d",

"id": "2f77c971-4848-4923-84e3-c224498300d1",

"p_w_picpath": {

"id": "b7d10944-9afc-4b22-8d01-364305716e3c",

"links": [

{

"href": "http://172.16.10.2:8774/2f50e3cc08d944fdb9dd0e328659c6f0/p_w_picpaths/b7d10944-9afc-4b22-8d01-364305716e3c",

"rel": "bookmark"

}

]

},

"key_name": null,

"links": [

{

"href": "http://172.16.10.2:8774/v2/2f50e3cc08d944fdb9dd0e328659c6f0/servers/2f77c971-4848-4923-84e3-c224498300d1",

"rel": "self"

},

{

"href": "http://172.16.10.2:8774/2f50e3cc08d944fdb9dd0e328659c6f0/servers/2f77c971-4848-4923-84e3-c224498300d1",

"rel": "bookmark"

}

],

"metadata": {},

"name": "test",

"os-extended-volumes:volumes_attached": [],

"progress": 0,

"security_groups": [

{

"name": "default"

}

],

"status": "ACTIVE",

"tenant_id": "2f50e3cc08d944fdb9dd0e328659c6f0",

"updated": "201:14Z",

"user_id": "90cae4d95424"

}

}

瀏覽過官方API文檔,大家應該覺得做openstack dashboard的二次開發不難,有衝動的兄弟姐妹們動手做個“私人訂製”吧。



更多信息請關注微信訂閱號:輕量運維

wKiom1jExwqAis5xAABtUru3h40312.jpg




















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