前言
本系列的第三篇文章,這次要部署的服務就是 Azure Kubernetes Services,現在很多服務架構上都會使用上 K8S,而在 Azure 上面也提供一個受控的 K8S 服務,就是 Azure Kubernetes Services,它可以減少我們管理 K8S 的一些成本,需要更新 K8S 版本的時候也可以一鍵點選就可以升級節點的 K8S 版本,需要增加節點的時候也可以很方便的透過手動或是設定自動調整,如此一來我們就可以專注在程式的部署上就好,不用太擔心整個 K8S 叢集的維護和管理。
實做
首先來快速的建立 AKS 服務,點選建立資源之後選擇 Kubernetes Services 來建立即可。

建立的選項就一步一步去設定,因為沒有比較需要說明的部分,就略過所有選項說明了,整個 AKS 服務介紹就不在本文多加說明了,大概就是確認需要節點個數和 K8S 版本比較需要注意了。

服務建立好之後選擇部署中心來設定自動化部署的部分。

選擇 Source Code 的位置,這邊我就一樣使用 Azure Repos

假設帳號是有 Azure DevOps 權限的話就會自動列出擁有的 Organization,然後選擇專案和 Repository。

如果專案底下有 Dockerfile 的話就會自動抓到,這邊需要特別注意的是 Docker build context,因為 Virtual Studio 自動建立的 Dockerfile 裡面路徑寫法以及檔案放置的位置會影響到 Build 的位置,以我專案為例的話,會需要設定成根目錄,不然在第 10 行的複製專案的命令就會失敗,我在這邊就卡了一下,花了一點時間才解決。


再來就是設定部署的程式 Namespace 和 Container Registry,Container Registry 是微軟的容器相關服務,它可以存放我們程式建置之後的 image 檔案,類似 Docker Hub 一樣,我們整個部署的流程就是透過 Docker build image 之後把它推送的這個服務裡面,再觸發自動化部署到 AKS。

完成設定之後就會進行第一次的部署,都完成之後就可以到 AKS 的服務與輸入找到部署好的服務以及外部 IP,點選之後就可以看到我們網站正確的跑起來了。

基本上到這邊就完成了,不過我們還是到 Azure DevOps 來看一下自動幫我們建立好的 Pileline,會分別建立一個 CI 和 CD 的 的 Pileline。


這時候點開來看就可以發現建立了兩個 Job,也就是前面說的透過 Docker 指令來 Build 和 Push image 到 Container Registry 上。

而 CD 的部分則有 3 個 Task,也就是把在 Container Registry 內的 Image 拉下來,用 PowerShell 產生一個部署的 yaml 檔案,然後用該檔案部署到 AKS 上面。


結論
原本直接從 Azure DevOps 上面去設定整個部署的流程會需要很多的步驟,但是微軟在 Azure 服務間的整合已經越來越方便,就可以直接從服務的功能選項透過 UI 方便的進行設定,如果要部署到自行另外架設的 K8S 就需要多花一點功夫去處理連線和驗證等。
透過本文的方式可以快速的建立好 CI/CD,然後我們可以再針對我們需求去對細節作調整,就不需要一步一步的去做設定,可以加速我們進行設定的流程和時間。