基於Python+Django的Kubernetes叢集管理平臺
原文出自【聽雲技術部落格】:http://blog.tingyun.com/web/article/detail/1345
時至今日,接觸kubernetes也有一段時間了,而我們的大部分業務也已經穩定地執行在不同規模的kubernetes叢集上,不得不說,無論是從應用部署、迭代,還是從資源排程管理等方面都有其難以言喻的優勢,但是隨著業務的不斷增長,以及服務的多元化,容器的體量與管理的難度也隨之增長。
淺述Kubernetes叢集日常管理維護中的一些痛點:
1.較為龐大的叢集規模及容器數量維護管理。
我們公司的業務場景屬於典型的多業務線並行。同時為了便於分類管理,避免埠衝突和資源合理利用。我們也採取了一些策略,如:
標籤 label:通過標籤,一方面可以標識哪個產品線的哪個應用坐落於哪些node之上,也許有人會想為什麼要這樣做,假設你有一個資料落盤的應用而該應用總是每次隨著啟動變來變去就不好玩了。一方面通過標籤可以均衡裝置負載,比如將比較耗cpu和比較耗記憶體的搭配在一起,不但資源充分利用而且還有效的防止同型別(比如高耗cpu)偶然間跑一個node上導致資源爭搶及埠衝突。
那麼問題來了,如何讓一個運維人員面對茫茫多的標籤並對其維護管理(kubectl get node –show-labels ?),又如何讓一個運維人員,故障發生時,面對茫茫多的nodes/pods,即時快速地定位兩者的對應關係,從而解決問題。
2. 測試環境維護管理問題。
一般的應用部署與上線流程較為繁瑣
這種模式下,讓每個研發人員在每次除錯beta環境時,無論是更改配置還是程式碼更新都需要溝通運維人員予以操作,讓每個運維人員都要用更多的精力額外的維護一套甚至更多系統環境,每天遊走於beta,線上之間。不免有點讓人頭痛。
更希望有這樣的一種模式
這樣大大減少了部門之間的溝通成本。但是問題來了,如何讓一個研發人員能夠獨立的開發維護屬於自己的beta環境,且不需要過多的關心除程式碼除錯外的一些東西呢?(如怎樣去寫一個基於kubernetes服務的yaml或json)
藉此,於是萌生出了一個嘗試寫一個管理服務的想法,目的在於讓運維人員更加方便的管理自己的kubernetes線下線上叢集,讓研發人員也能夠獨立自主的編寫與維護屬於自己的測試環境應用,初期階段,僅供參考,若有不足之處,歡迎大家隨時予以寶貴意見。
Python Admin(測試版)是基於Python+Django與kubernetes Api的運維管理系統。前端採用開源SB(start bootstrap) Admin-2模板(清新,簡約)。
1.版本資訊:
Python2.7.5+Django1.8.13+Kubernetes1.2.4+docker1.10.3
2.Kubernetes Api相關:
建立與更新label
curl -X PATCH -i -H \
"Content-Type:application/merge-patch+json" \
http://k8smaster:8080/api/v1/nodes/{ nodename } \
-d '{"metadata":{"labels":{"標籤":"應用"}}}'
建立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模板
建立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 -X DELETE \
http://k8smaster:8080/apis/extensions/v1beta1/namespaces/default/daemonsets/{daemonsetname}
daemonset 基本json模板
以上列舉為部分api操作,其他相關操作請參考kubernetes官方文件
http://kubernetes.io/docs/api-reference/v1/operations/
3.平臺操作介面概覽
1..Kubernets叢集資源管理介面(清晰展示叢集資源資訊及所屬專案組,便於分類管理)
2.專案應用配置管理介面(配置檔案單獨管理,採用資料庫儲存配置檔案內容。建立和更新configmap時重新reload,並實時同步配置檔案使用狀態。)
3.服務部署與管理介面(應用模板建立,同時增加系統日誌功能,服務啟動後記錄每個階段的執行情況,方便錯誤追蹤,具有一定的操作審計功能)
4.Kubernetes容器資源管理介面(每個叢集所有node,以及每個node所有pods資訊,並採用websocket方式exec進入容器內部避免許可權控制不當問題)
如果不確認服務是否能正常啟動,Container建立完畢後,可以通過debug模式(command: ["sleep", "足夠長時間"])進去容器內部執行./run.sh調節服務,待沒問題後,再已正常模式啟動。
未來優化的一些小想法:
1.kubernets叢集一鍵部署,節點資源即時加入。
2.監控方面,在系統級別監控的基礎上,增加容器服務級別監控及相應告警策略。
3.整合融入jenkins介面,讓服務部署與更新,更簡單透明化。
相關文章
- 基於Docker和Kubernetes構建的部署管理和叢集管理Docker
- 一款現代化的 Kubernetes 叢集管理平臺 - KubeWall
- 基於containerd 部署 kubernetes 1.28叢集AI
- MySQL DB 叢集管理平臺--orchestratorMySql
- 基於Kubernetes v1.24.0的叢集搭建(三)
- 基於Kubernetes v1.24.0的叢集搭建(一)
- 基於Kubernetes v1.24.0的叢集搭建(二)
- 基於 Clusternet 與 OCM 打造新一代開放的多叢集管理平臺
- kubernetes叢集管理命令(三)
- 基於kubernetes自研容器管理平臺的技術實踐
- 基於kubernetes平臺微服務的部署微服務
- 在 Minecraft 中管理 Kubernetes 叢集Raft
- 基於X-86平臺的達夢8守護叢集搭建
- 國內 Linux 伺服器叢集管理的平臺Linux伺服器
- 基於Ubuntu部署企業級kubernetes叢集---k8s叢集容部署UbuntuK8S
- CNStack 多叢集服務:基於 OCM 打造完善的叢集管理能力
- IoT 邊緣叢集基於 Kubernetes Events 的告警通知實現
- 基於 Kubernetes 的雲原生 AI 平臺建設AI
- B站基於Apache DolphinScheduler的一站式大資料叢集管理平臺(BMR)初窺Apache大資料
- 基於java的專案管理平臺Java專案管理
- 以對話的形式管理你的Kubernetes叢集
- 雲無關、桌面端、基於Kubernetes的平臺Otomi
- OpenPAI:大規模人工智慧叢集管理平臺AI人工智慧
- kubernetes叢集管理常用命令一
- 下一個 Kubernetes 前沿:多叢集管理
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- 美團點評Kubernetes叢集管理實踐
- Kubernetes 多叢集管理平臺 OCM v0.9.0 釋出:進一步改善託管叢集安全性問題
- kubernetes與web叢集Web
- Kubernetes 叢集搭建(上)
- Kubernetes 叢集搭建(下)
- Kubernetes叢集搭建(vagrant)
- 拆除kubeadm部署的Kubernetes 叢集
- “開箱即用” 的 Kubernetes 叢集
- kafkaer:基於模板的 Kafka 主題/叢集/ACL 管理自動化Kafka
- 基於 Docker 的 MongoDB 主從叢集DockerMongoDB
- 基於kerberos的hadoop安全叢集搭建ROSHadoop
- 視訊採集:iOS平臺基於AVCaptureDevice的實現iOSAPTdev
- 大資料平臺Hadoop叢集搭建大資料Hadoop