Probius+Kubernetes任務系統如虎添翼

Probius是一款自定義任務引擎,可以靈活方便的處理日常運維中的各種任務,我們所有的CI/CD任務都通過Probius來完成的,這篇文章Probius:一個功能強大的自定義任務系統對其有詳細的介紹,之前通過Probius更新Kubernetes的Deployment是通過腳本的方式來完成的,腳本大概像這樣

if [ $# != 2 ];then
    echo "USAGE: $0 PROJ ENVT"
    exit 1
fi

PROJ=$1
ENVT=$2

BASE_DIR=/home/data/probius/${PROJ}/${ENVT}
DOCKER_DIR=${BASE_DIR}/docker
IMAGE_NAME=`cat ${BASE_DIR}/cache/image.txt`

cd ${DOCKER_DIR} &&\
export KUBECONFIG=/root/.kube/config &&\
kubectl set image deployment/${ENVT}-${PROJ} ${ENVT}-${PROJ}=${IMAGE_NAME} -n ${ENVT} &&\
exit 0 ||\
exit 1

直接通過kubectl命令來更新,這就需要在Probius服務器上安裝kubectl並打通整個集羣,這種方式僅是能用但不夠優雅,並且對於開發測試環境,在部署完成後有查看日誌及登錄系統排錯的需求,這就需要藉助Kubernetes-Dashboard來完成,多個系統相互關聯跳轉增加了使用成本,同時Dashboard的權限也不好控制,所以我就考慮是否可以讓Kubernetes以插件的形式集成進Probius系統,用戶在Probius系統內完成部署,同時也可以在Probius系統查看Kubernetes的相關信息甚至通過WebSSH登陸,徹底拋棄掉Kubernetes的Dashboard,看上去很完美,正好最近打算升級下Kubernetes集羣版本,於是就趁此機會花了幾天時間來實現了

Kubernetes子任務

首先在命令和腳本之外添加了Kubernetes類型的子任務,部署任務只需要關聯這個Kubernetes類型的子任務就可以實現Deployment的更新

這個子任務的目的主要是爲了替換上邊的腳本,通過Kubernetes的Python客戶端來實現對Deployment的更新,有了這個子任務我們就不需要在Probius服務器上安裝kubectl服務來運行kubectl命令了,整個部署流程能夠正常跑通

Kubernetes管理

但在部署之前我們需要先新建相關服務,以一個全新的環境爲例,需要先創建Kubernetes的namespace,然後在namespace下創建deployment、service、ingress,我們的namespace是根據環境來劃分了,例如dev環境的所有容器都跑在名爲dev的namespace下

Namespace創建完成後,可以點擊進入查看Namespace下的deployment、service、ingress、configmap

當前還沒有具體deployment/service/ingress,接下來就創建,每個項目都會有deployment、service和ingress,並且他們之間是相互關聯的,新建項目的同時就把這些服務給一併創建了是個不錯的選擇,爲此寫了個KubeProject服務,在這裏可以定義項目的名稱、環境、鏡像、域名、配置以及關聯的configmap

選擇保存僅會保存填寫的表單信息到數據庫,選擇保存並創建K8S環境就可以在保存表單信息到數據庫的同時創建Kubernetes的deployment、service和ingress了,保存並更新Deployment會在Deployment配置有變化的情況下使用,例如新的資源限制或是configmap綁定

當資源創建成功後我們就可以在namespace下看到相應資源了

我們最爲關注的deployment信息也可以通過點擊deployment的名字或是在KubProject裏點擊項目的名字進入,進入之後可以查看deployment下的pod列表,通過webssh進入pod內部,也可以查看每個pod的日誌,甚至可以對deployment進行scale伸縮或是重建

WebSSH很好用,想要實現的可以看看這篇文章:Django實現WebSSH操作Kubernetes Pod

至此可以擺脫Kubernetes-dashboard了

後記

我們使用Kubernetes有超過4年的時間,藉助於Kubernetes不僅提高了資源利用率,更是優化了整個運維的工作流程,受益頗多

留個截圖紀念下這戰功赫赫的集羣吧,雖然你已老去,但是你把我帶進了Kubernetes的大門,從此打開了另一個世界

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