上個系列我們講了Azure DevOps部署到VM的方法,接下來講如何部署到Kubernetes上,我會以Google Kubernetes Engine(GKE)為範例,說明如何將專案一路自動化從編譯到部署到GKE。
之前VM的作法,我們會先在Pipelines進行Build與放入Secret等動作,再將檔案複製到Production VM上。而在Kubernetes的部署會稍微有點不同,我們會將Build後的檔案打包成Image,上傳到Docker Registry,Secret則會以環境參數讓Image使用,部署到Kubernetes則是透過yaml設定檔進行部署。
Kubernetes
至於如何把一個在VM的架構轉成Kubernetes可以使用,我會建議先將專案轉成Docker compose,有助於了解容器、Volume、 Environment variables使用的操作,才較能在Kubernetes上執行,關於專案上K8s的技巧,之後會再開個系列。
關於K8s的簡介我這邊就不多說明,但建議先搞懂K8s的原理,會比較好理解接下來要做的事,初學者建議看看Kubernetes 30天學習筆記。Kubernetes是個開源的架構,各大雲業者都有提供Cloud Native的服務,如Google Kubernetes Engine(GKE)、Azure Kubernetes Service(AKS)、Amazon Elastic Kubernetes Service(EKS),地端版也有SUSE Rancher Kubernetes Engine(RKE)、Red Hat OpenShift(OCP)、 Vmware Tanzu,雖然功能上可能略有不同,但部署手法大同小異,我們可以輕鬆將K8s的yaml部署到各大雲上。
要與Kubernetes溝通需要透過Cluster內的API Server,以此來管理叢集,常用kubectl這個CLI來操作,這之後會用到,建議先熟悉kubectl指令。
建立GKE
我們先練習開一個GKE,GKE有兩種架構分別為:Autopilot、Standard,Autopilot是目前Google主要推薦的作法,會由部署的container數量計費,當運算量變大的時候,會自動忙擴展node數,幫你做好最佳化;而Standard較能完整管控K8s叢集,包含節點數量及更多設定,計價方式則是以node數計算。我們用Autopilot就好。

Autopilot其實滿簡單的,就先用預設參數,地區選asia-east1,是位於台灣彰化的機房。

網路的設定我先都用預設,可以依狀況調整。


接下來就等他建立完成,完成後如下,接下來點選該專案的連線,會跳出一段gcloud指令。


把指令貼到Cloud shell後,就可以使用kubectl來管理叢集,這行指令會自動產生連線到K8s用到token,連線參數檔會放在~/.kube/config,先練習一下kubectl指令。
kubectl get nodes: 查看目前的節點
kubectl get all: 查看目前已經部署的資源(resourse)

從網頁部署服務
安裝好GKE後,我們到網頁點選部署

練習部署一個nginx,版本為1.23.3


第三步要打勾以新Service的形式公開Deployment,否則無法從K8s外來存取服務,服務類型選負載平衡器。

接下來到工作負載就會發現多一筆資料,滑到最下面公開服務就可以找到服務的IP,連線到那個IP就可以查看到部署後的網站。



建議大家還是熟悉一下kubectl指令來看deployment的狀態。使用kubectl指令可以查看到網頁上能得到的任何資訊。

我們剛剛就在不用寫一行code,完成部署一個NGINX服務
結語
比較精實的學習K8s方式,其實是從徒手開始架設叢集開始,但這大大提升了學習門檻與維運難度,因此有GKE由Google幫忙維運,我們只需要管理好部署上去的服務其實方便了很多,後續我們會逐步說明更多K8s細節與整合DevOps的技巧。