爲何VSTS要搭配Kubernetes?node
一般咱們在開發管理軟件項目的時候都會碰到一個很頭痛的問題,就是開發、測試、生產環境不一致,致使開發人員和測試人員甚至和運維吵架。linux
由於常見的物理環境甚至雲環境中,這些部署環境都是由運維人員提早準備好的。每次更新代碼版本,都要很當心的在幾個環境以前修改不一樣的參數配置,一不當心就將生產環境的數據庫鏈接到了測試庫,或者日誌文件的地址寫到了一個不存在的盤符裏等等各類異常狀況,有了Kubernetes這樣微服務編排框架,咱們能夠經過代碼的形式描述服務的架構,描述服務之間的依賴關係,作到了 Infrastructure As Code。這樣能夠大大減小了開發運維之間在作環境切換時帶來的額外成本。git
將VSTS的持續集成能力和持續發佈能力整合Kubernetes,可讓項目團隊更容易發現和改進代碼(這時候的Infrastructure也已是代碼了)的問題,真正將精力放在改進用戶體驗和改進產品品質上。數據庫
準備VSTS管理環境服務器
首先咱們須要到www.visualstudio.com下申請好的VSTS帳號,而後在帳號下建立一個用Git做爲代碼管理的項目架構
建立好項目後咱們就能夠利用git clone將代碼庫同步到本地開發服務器上面來,構建開發人員的workspace框架
準備Docker Registry和Kubernetes環境運維
2.準備一個私有的Docker Registry.由於咱們須要將Build 好的代碼放進一個Docker的Images上面而後推送到一個私有的Registry上。Azure Container Registry無疑是一個很是好的選擇,由於等一下咱們的代碼須要部署到Azure的Kubernetes羣集裏,Image所在的地方離部署的地方越近,部署速度固然也就越快了。並且Azure Container Registry還支持全球同步,若是你的代碼打算全球多站點發布的話,Azure Container Registry服務無疑是最好的選擇。建立Azure Docker Registry能夠參考官方文檔:https://docs.microsoft.com/zh-cn/azure/container-registry/ ssh
3.準備Kubernetes羣集,Azure上支持提供了AKS服務,讓咱們能夠快速搭建出來Kubernetes的羣集環境,減小了運維人員管理羣集的壓力,搭建方法參考官方文檔:https://docs.microsoft.com/zh-cn/azure/aks/kubernetes-walkthrough-portal 微服務
搭建的過程當中注意幾個地方
1.準備好Service Principle服務主體APP
2.準備好linux ssh登陸的Key
安裝好羣集後經過 Azure CLI 2.0命令:az aks install-cli 這樣咱們就能夠自動在你的linux上裝上Kubernetes的kubectl命令行工具了.
要管理Kubernetes的話,須要運行下面的命令,在本地生成K8S的管理配置信息
az aks get-credentials --resource-group=myResourceGroup --name=myK8sCluster
獲取到的配置內容會放在/home/<youraccount>/.kube/config文件裏面,這文件裏面的內容很是重要,等一下VSTS須要這個信息來跟K8S羣集進行連接的。
咱們能夠經過kubectl get nodes命令看看羣集的情況
開始配置VSTS的自動化構建和自動化發佈
咱們再VSTS的項目站點裏找到Build and Release的菜單項,點擊New的按鈕
選擇NodeJS with Gulp的模板
建立好後,咱們先裁剪掉暫時不須要的Task,而後添加上Docker build Image和push Image的Task
配置Build an image Task:
在這裏咱們能夠將一開始準備好的Azure Container Registry環境用上了
配置Push an image Task,Image Name使用BuildId做爲鏡像的Tag,這樣後面部署到Kubernetes的時候就能夠指定這個Tag對Image進行更新了。
Build的定義不算太複雜,定義完以後咱們就能夠直接觸發一次Build來檢驗一下配置是否成功了。
下圖就是Build成功以後的日誌,我圖中咱們能夠看到Docker push命令將image push到了咱們以前創建的Azure註冊Repository裏面了
自動化構建成功以後,咱們能夠作自動化的部署了,
建立一個新的發佈定義
在Environment裏點擊一下藍色字體部分,編輯部署任務
在配置部署任務時,選擇Deploy to Kubernetes的任務類型,而且在Manage這個藍色連接這裏配置Kubernetes的連接信息。
在Kubernetes的命令裏使用set命令,經過設置image的更新地址來通知Kubernetes更新部署版本。
命令的格式是:kubectl set image deployment/<deploymentname> <imagename>=<image url>
在VSTS裏面,只須要argument裏面把後面的部分填上就好
配置Kubernetes的 Service Endpoints信息:
配置好部署任務後,咱們能夠嘗試一下手動將前面成功的Build部署到Kubernetes環境中
至此咱們已經能夠成功將一份代碼部署到了Kubernetes裏面去了
部署成功後,能夠經過kubectl get pods -w命令監控一下Kubernetes對容器進行更新替換的過程,從下圖中能夠看到Kubernetes建立了一個新的pod,而後將舊版本的pod進行了Terminate.
若是咱們須要將Release跟Build自動連接起來,能夠經過編輯Release定義,選擇圖上的閃電按鈕,將Continuous deployment trigger的按鈕設置爲Enabled便可。