利用VSTS跟Kubernetes整合进行CI/CD
為什么VSTS要搭配Kubernetes?
通常我們在開發管理軟件項目的時候都會碰到一個很頭痛的問題,就是開發、測試、生產環境不一致,導致開發人員和測試人員甚至和運維吵架。
因為常見的物理環境甚至云環境中,這些部署環境都是由運維人員提前準備好的。每次更新代碼版本,都要很小心的在幾個環境之前修改不同的參數配置,一不小心就將生產環境的數據庫連接到了測試庫,或者日志文件的地址寫到了一個不存在的盤符里等等各種異常情況,有了Kubernetes這樣微服務編排框架,我們可以通過代碼的形式描述服務的架構,描述服務之間的依賴關系,做到了 Infrastructure As Code。這樣可以大大減少了開發運維之間在做環境切換時帶來的額外成本。
將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/?
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即可。
原文地址:https://www.cnblogs.com/wing-ms/p/8177718.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的利用VSTS跟Kubernetes整合进行CI/CD的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于百度理解与交互技术实现机器问答
- 下一篇: 使用 ASP.NET Core, Ent