效率篇-“私人訂製”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的二次開發不難,有衝動的兄弟姐妹們動手做個“私人訂製”吧。
更多資訊請關注微信訂閱號:輕量運維