1. 程式人生 > >效率篇-“私人訂製”Openstack管理後臺

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

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

不能容忍的點

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

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


改造的目標

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

2.與現有運維平臺資訊互通。

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

改造的功能

例項(虛機):建立、刪除、升級配置、啟動、停止、線上遷移、登陸等。

卷(硬碟):建立、擴容、映象、刪除等。

模板(虛機cpu、記憶體、系統盤):建立、刪除等。

映象:實時同步資料。(因為上傳映象需要花上時間,就用命令列進行)

還有其它配套功能。

使用技術

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

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

與openstack對接的工作層:python。

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

架構


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

Queue:儲存操作請求。

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

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


效果對比

|||||||||||

建立例項

原模式


現在效果


​|||||||||||

例項列表

原模式


現效果


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

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


Openstack對接介紹

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

1.OpenStack client

2.cURL

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

4.OpenStack SDK

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",

"image": {

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

"links": [

{

"href": "http://172.16.10.2:8774/2f50e3cc08d944fdb9dd0e328659c6f0/images/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的二次開發不難,有衝動的兄弟姐妹們動手做個“私人訂製”吧。


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