以 Azure AKS 創建 K8s Cluster 並整合至 GitLab

在私人的試用帳號即將到期前,測試了用 Azure AKS 建立 K8s Cluster 並將之整合至 GitLab。本文僅紀錄本次的操作步驟。(本文撰寫時,GitLab 版本為 13.9 。)

(本文同步發表於 Medium。)

操作步驟

事前動作,請先註冊並啟用 Azure。目前 Azure 有提供 30 天內 6,100 元的免費點數,想要試玩 Azure 的人,可以考慮申請並集中火力在 30 天內善用那 6,100 元點數。

(官網上的說明。)

Azure 帳號開通後,接著開始進入正題。第一步先安裝 Azure CLI。macOS 使用者可以透過 Homebrew 安裝。

brew install azure-cli

(安裝過程中,Homebrew 會自己去下載所需的檔案)

安裝完畢後,確認一下 Azure CLI 安裝的版本,驗證是否安裝成功。

az version

接著讓 Azure CLI Login 以便後續能操作 Azure 雲端資源。

az login

輸入指令後,Azure CLI 會自動開啟瀏覽器,並連上指定的 oauth 網頁。

在網頁上確認你要登入的 Azure 帳戶。

成功登入後,會得到下面的畫面。

同時 Command line 也會得到登入成功的訊息。

接著先取得 Azure 的 Location 資訊,後面在建立 Resource Group 時會用到,我們要挑一個離台灣近一點的機房,一般來說滿多人會選擇香港機房。(Location 也可以到 Azure 官網查詢。)

az account list-locations

香港機房的 Location name 為 eastasia

Azure 有著 Resource Group 的概念,我們可以將會使用到的雲端資源集中歸屬在 Resource Group 中,當後續要刪除所使用的雲端資源時,即可透過 Resource Group 一次刪除全部,避免有漏網之魚。

這裡我們透過 Azure CLI 在 Location eastasia 建立名為 tryAKS 的 Resource Group。

az group create --name tryAKS --location eastasia

(Resource Group 創建成功,會得到如上圖的結果。)

接著就是重頭戲,要用 AKS 創建 K8s Cluster。

az aks create \
    --resource-group tryAKS \
    --name tryAKSCluster \
    --node-count 3 \
    --generate-ssh-keys

結果得到失敗訊息 BadRequestError,因為預設能啟用的資源有限。

更改 --node-count 為 1 再試一次。

az aks create \
    --resource-group tryAKS \
    --name tryAKSCluster \
    --node-count 1 \
    --generate-ssh-keys

創建的過程大約需要 3 ~ 4 分鐘,如成功創建即可得到類似下圖的完成資訊。

接著要使用 kubectl 連上我們建立好的 K8s Cluster。

如果尚未安裝過 kubectl,可以參閱 kubernetes.io 的教學文件安裝。

macOS 的使用者,可以利用下面的 Command 安裝。

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"

或者,也可以透過 Azure CLI 協助安裝。

az aks install-cli

有了 kubectl,接著要讓它可以連上 AKS 創建的 K8s Cluster。這裡要利用 Azure CLI 來幫我們取得 credentials。

az aks get-credentials --resource-group tryAKS --name tryAKSCluster

上面的指令如果能順利執行,在你的 .kube/config 應該會出現很多與 K8s Cluster 相關的資訊。

接著驗證一下是否真的順利連上,讓我們試著查看 K8s 的 Nodes 資訊。

kubectl get nodes

到這裡我們已經順利透過 Azure AKS 創建 K8s Cluster 了,下一步只要讓它與 GitLab 整合即可。

讓我們登入 GitLab 並且進入設置 K8s 的頁面,如果是單一 Project,可以在 Project > Operations > Kubernetes 找到它。

這次要用 Connect existing cluster 的方式整合。

如上圖,我們需要手動輸入 API URLCA CertificateService Token

這三項資訊我們都可以透過 kubectl 取得。

首先是 API URL

kubectl cluster-info | grep -E 'Kubernetes master|Kubernetes control plane' | awk '/http/ {print $NF}'

我們要先知道 Secret 的正確名稱,才能取得正確的 CA Certificate,因此先查詢 Secret。

kubectl get secrets

得到類似下圖的資訊。

接著根據 Secret 取得正確的 CA Certificate

kubectl get secret <這裡要輸入正確的 Secret name> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

最後是 Service Token,這個比較麻煩一點,我們要先創建一個 Service account 給 GitLab 使用。以下直接用 GitLab 官方文件的範例說明。

先建立一個名為 gitlab-admin-service-account.yaml 的檔案,檔案的內容如下。

apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: gitlab-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: gitlab
    namespace: kube-system

接著透過 kubectl 將其 Apply。

kubectl apply -f gitlab-admin-service-account.yaml

順利執行,即可得到類似下圖的結果。

最後,我們就可以取得 Service Token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab | awk '{print $1}')

執行結果類似下圖。

該輸入的資訊都填好後,按下 Add Kubernetes cluster

成功讓 GitLab 整合 K8s Cluster 後,即可看到如下圖的畫面。

試著啟用 GitLab Auto DevOps,也能順利運行。(記得要透過 K8s 架設 GitLab Runner)

實驗完畢,準備將所有的資源刪除。先在 GitLab 上移除 K8s 整合。

接著在 Azure 上刪除 Resource Group。

結語

初次嘗試 Azure AKS,感覺使用起來也是挺方便的,但畢竟這次只是簡單嘗試讓 GitLab 整合 AKS 創建的 K8s Cluster,並沒有更深入了解 AKS 的功能,以及如何在 Azure 上管理 K8s Cluster 等議題。

總之,三大雲都有各自的 K8s 產品,想必未來功能只會越來越方便,不想自己架設與管理 K8s Cluster 的人,初期還是乖乖選用雲端供應商的產品吧!畢竟 K8s 這坑實在是有夠深的!

參考資料

轉貼本文時禁止修改,禁止商業使用,並且必須註明來自「艦長,你有事嗎?」原創作者 Cheng Wei Chen,及附上原文連結。

工商服務

更多文章