基于Python+Django的Kubernetes集群管理平台
時(shí)至今日,接觸kubernetes也有一段時(shí)間了,而我們的大部分業(yè)務(wù)也已經(jīng)穩(wěn)定地運(yùn)行在不同規(guī)模的kubernetes集群上,不得不說,無論是從應(yīng)用部署、迭代,還是從資源調(diào)度管理等方面都有其難以言喻的優(yōu)勢,但是隨著業(yè)務(wù)的不斷增長,以及服務(wù)的多元化,容器的體量與管理的難度也隨之增長。
淺述Kubernetes集群日常管理維護(hù)中的一些痛點(diǎn):
1.較為龐大的集群規(guī)模及容器數(shù)量維護(hù)管理。
我們公司的業(yè)務(wù)場景屬于典型的多業(yè)務(wù)線并行。同時(shí)為了便于分類管理,避免端口沖突和資源合理利用。我們也采取了一些策略,如:
標(biāo)簽 label:通過標(biāo)簽,一方面可以標(biāo)識(shí)哪個(gè)產(chǎn)品線的哪個(gè)應(yīng)用坐落于哪些node之上,也許有人會(huì)想為什么要這樣做,假設(shè)你有一個(gè)數(shù)據(jù)落盤的應(yīng)用而該應(yīng)用總是每次隨著啟動(dòng)變來變?nèi)ゾ筒缓猛媪恕R环矫嫱ㄟ^標(biāo)簽可以均衡設(shè)備負(fù)載,比如將比較耗cpu和比較耗內(nèi)存的搭配在一起,不但資源充分利用而且還有效的防止同類型(比如高耗cpu)偶然間跑一個(gè)node上導(dǎo)致資源爭搶及端口沖突。電動(dòng)叉車
那么問題來了,如何讓一個(gè)運(yùn)維人員面對茫茫多的標(biāo)簽并對其維護(hù)管理(kubectl get node –show-labels ?),又如何讓一個(gè)運(yùn)維人員,故障發(fā)生時(shí),面對茫茫多的nodes/pods,即時(shí)快速地定位兩者的對應(yīng)關(guān)系,從而解決問題。
2. 測試環(huán)境維護(hù)管理問題。
一般的應(yīng)用部署與上線流程較為繁瑣
這種模式下,讓每個(gè)研發(fā)人員在每次調(diào)試beta環(huán)境時(shí),無論是更改配置還是代碼更新都需要溝通運(yùn)維人員予以操作,讓每個(gè)運(yùn)維人員都要用更多的精力額外的維護(hù)一套甚至更多系統(tǒng)環(huán)境,每天游走于beta,線上之間。不免有點(diǎn)讓人頭痛。
更希望有這樣的一種模式
這樣大大減少了部門之間的溝通成本。但是問題來了,如何讓一個(gè)研發(fā)人員能夠獨(dú)立的開發(fā)維護(hù)屬于自己的beta環(huán)境,且不需要過多的關(guān)心除代碼調(diào)試外的一些東西呢?(如怎樣去寫一個(gè)基于kubernetes服務(wù)的yaml或json)
借此,于是萌生出了一個(gè)嘗試寫一個(gè)管理服務(wù)的想法,目的在于讓運(yùn)維人員更加方便的管理自己的kubernetes線下線上集群,讓研發(fā)人員也能夠獨(dú)立自主的編寫與維護(hù)屬于自己的測試環(huán)境應(yīng)用,初期階段,僅供參考,若有不足之處,歡迎大家隨時(shí)予以寶貴意見。
Python Admin(測試版)是基于Python+Django與kubernetes Api的運(yùn)維管理系統(tǒng)。前端采用開源SB(start bootstrap) Admin-2模板(清新,簡約)。
1.版本信息:
Python2.7.5+Django1.8.13+Kubernetes1.2.4+docker1.10.3
2.Kubernetes Api相關(guān):
創(chuàng)建與更新label
curl -X PATCH -i -H \"Content-Type:application/merge-patch+json" \
http://k8smaster:8080/api/v1/nodes/{ nodename } \
-d? '{"metadata":{"labels":{"標(biāo)簽":"應(yīng)用"}}}'
創(chuàng)建configmap
curl-X POST -i -H? \"Content-Type:application/json"\http://k8smaster:8080/api/v1/namespaces/default/configmaps/\ -d"$(cat configmaptest.json)"
更新configmap
curl-X PATCH -i -H \"Content-Type:application/merge-patch+json"\http://k8smaster:8080/api/v1/namespaces/default/configmaps/{configmapname} \-d"$(cat configmapupdate.json)"
刪除configmap
curl-X DELETE \http://k8smaster:8080/api/v1/namespaces/default/configmaps/{configmapname}
Configmap的基本Json模板
創(chuàng)建daemonset
curl-X POST -i –H \"Content-Type:application/json"\http://k8smaster:8080/apis/extensions/v1beta1/namespaces/default/daemonsets \-d"$(cat daemonset.json)"
更新daemonset
curl -X PATCH -i -H \"Content-Type:application/merge-patch+json"\http://k8smaster:8080/apis/extensions/v1beta1/namespaces/default/daemonsets/{daemonsetname}-d"$(cat daemonsetupdate.json)"
刪除daemonset
curl -XDELETE\http://k8smaster:8080/apis/extensions/v1beta1/namespaces/default/daemonsets/{daemonsetname}
daemonset 基本json模板
以上列舉為部分api操作,其他相關(guān)操作請參考kubernetes官方文檔
http://kubernetes.io/docs/api-reference/v1/operations/
3.平臺(tái)操作界面概覽
1..Kubernets集群資源管理界面(清晰展示集群資源信息及所屬項(xiàng)目組,便于分類管理)
2.項(xiàng)目應(yīng)用配置管理界面(配置文件單獨(dú)管理,采用數(shù)據(jù)庫存儲(chǔ)配置文件內(nèi)容。創(chuàng)建和更新configmap時(shí)重新reload,并實(shí)時(shí)同步配置文件使用狀態(tài)。)
3.服務(wù)部署與管理界面(應(yīng)用模板創(chuàng)建,同時(shí)增加系統(tǒng)日志功能,服務(wù)啟動(dòng)后記錄每個(gè)階段的執(zhí)行情況,方便錯(cuò)誤追蹤,具有一定的操作審計(jì)功能)
4.Kubernetes容器資源管理界面(每個(gè)集群所有node,以及每個(gè)node所有pods信息,并采用websocket方式exec進(jìn)入容器內(nèi)部避免權(quán)限控制不當(dāng)問題)
如果不確認(rèn)服務(wù)是否能正常啟動(dòng),Container建立完畢后,可以通過debug模式(command: ["sleep", "足夠長時(shí)間"])進(jìn)去容器內(nèi)部執(zhí)行./run.sh調(diào)節(jié)服務(wù),待沒問題后,再已正常模式啟動(dòng)。
未來優(yōu)化的一些小想法:
1.kubernets集群一鍵部署,節(jié)點(diǎn)資源即時(shí)加入。
2.監(jiān)控方面,在系統(tǒng)級(jí)別監(jiān)控的基礎(chǔ)上,增加容器服務(wù)級(jí)別監(jiān)控及相應(yīng)告警策略。
3.整合融入jenkins接口,讓服務(wù)部署與更新,更簡單透明化。
轉(zhuǎn)載于:https://www.cnblogs.com/xyou/p/10340464.html
總結(jié)
以上是生活随笔為你收集整理的基于Python+Django的Kubernetes集群管理平台的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从比特大陆AI芯片入局智慧城市看阿里腾讯
- 下一篇: selenium IDE录制