Azure - 建立 Azure Kubernetes Service

21 March 2020 — Written by Sky Chang
#Azure#Container#AKS#Log Analytics#ACR#Kubernetes#Docker#Linux

前言

現在 Kubernetes 紅得幾乎如日中天,各家都推出自己的 Kubernetes 服務,而在 Microsoft 的 K8S,當然就叫做 Azure Kubernetes Service,而它的前身為 Azure Container Service。

而這篇文章,會敘述,如何建立 AKS。是的,你沒看錯,又要再寫一次怎麼建立 AKS。其實之前也寫過很多次,但是隨著時代的演進,又略有不同了 (泣),所以這篇又會再重新敘述,如何建立 ASK....

建立 Create Log Analytics 工作區

因為 AKS 會使用到 Log Analytics 來存放 Log 資訊,雖然你可以讓他自己建立,但放置的 Resource 位置都醜醜的,所以第一步,我們先來建立 Create Log Analytics 工作區。

找到 Log Analytics 工作區並建立,基本上,裡面也沒什麼可以選的...就順順的建立完成吧。

2020 05 27 16 55 07

建立 Azure Container Registry

通常 AKS 拉的 Images 會來自 ACR ( 你要放到 Docker Hub 也是可以啦 ),所以這邊會建議也先準備好 ACR,因為現在建立 AKS 的時候,可以直接選擇 ACR,讓他直接塞 Service Principal 進去,可以省掉自己加 Service Principal 的步驟。

2020 05 27 17 44 08

這邊不會提到怎麼建 ACR,後續找時間再來補上 ACR 的部分。

建立 AAD Service Principal

在以前,建立 AKS 的第一步,就是要建立 Service Pricnipal,因為 AKS ( Azure Kubernetes Service ) 會需要和其他 Azure 的服務互動,所以我們必須給他一個 AAD Service Principal,如果對於 Service Prinipal 不熟悉的,可以參考底下兩篇文章

但這個時代,建立 AKS 的時候,你可以先不用建立了,而且,不是以前那種建立出來醜醜的 SP,而是現在有直接管理的機制 ( 刪除 AKS,Service Princiap 也會自動刪除喔! )

建立 Azure Kubernetes Service

若需要使用 Az cli 請參考本文最後面

在建立之前,有幾個地方要特別注意。

Node 的 Pods 數

預設每一個 Node 的最大 Pods 數為 110,若要調整為最大 Pods 數 ( 250 ) 需使用 AZ CLI 進行設定。

雖然正常情況下,一個 Node 的 Pods 數不太會高達超過 110,但如果真的有超過這個的規劃,那可能要使用 Azure Cli 進行建置。( 配置完後, 就不可變更 )

AKS IP 的規劃

AKS 預設使用的 IP 量是很大的,他有一個公式如下:

EX : 若有 50 個節點,其中也包含相應增加的 10 個節點的佈建:(50 + 10 + 1) + ( (50+10+1) * 30 (default)) = 1,891 (/21 或更大)

所以如果未來有需要有非常多的 Node,則要提前考慮與計算。

也請在開始前,將此網段切好,不然可能只能重新建 AKS 了

AKS-VNode IP 的規劃

除了使用 Node 外,AKS 支援使用 ACI ( Azure Contianer Instance ) 來進行存放實際的 Pods,通常 VNode 需要一個網段,而每一個 Pods 也會佔用掉一個 IP。

雖然這個功能,在建立完後再 enable / disable,但若有需要,開始前將此網段切好,會比較好。

AKS Node 大小的規劃

AKS 的 Node 規格建立後,就不可以變更了 ( 很重要,請唸三遍 ),所以到底要給大一點的 VM 當作 Node,還是小一點的 VM 當 Node,在一開始的時候,就決定了一切。

AKS 的私人叢集

建立 AKS 的時候,可以決定,是否只有內網 ( VNet 內 ) 才能對 AKS 進行控制 ( EX : 使用 Kubectl ),而這個也會在建立玩成後,無法變更。

但目前將 AKS 放到私人叢集可能會有以下 issue

網路原則

目前 AKS 支援原生、Calico、Azure 三種網路原則,雖然小弟我一定是選 Azure,但如果有需要其他原則的考量,可能也要在部署前思考清楚。

使用 Azure Cli 來建立

在 AKS 的官網,主要透過 Azure Cli 來建立,當然也可以透過 Portal 建立,這邊我們先提供一個快速的 Cli 指令。

開始建立

找到 Azure Kubernetes Service

2020 05 27 17 36 00

進行基本的設定,這邊要注意的就是 VM 大小了,建完後,就不可以改了 ( 只能改數量 )

2020 05 27 17 36 50

接著,這邊要決定是否要啟用虛擬節點,通常小弟我會在這邊就直接請用,後續也可以透過 AZ Cli 來啟用,其次,VM 擴展集也會在這邊勾起來,未來可以讓 Node 自動擴展。

2020 05 27 17 38 23

這邊比較需要注意的,以前只有服務主體可以選擇,也就是說,以前選擇服務主體後,他會自動的幫忙建立一個 Service Principal,而現在,多了一個更方便的選項,就是系統指派的受控識別,選擇此功能,可以讓 AKS 服務自己來管理,也因此,不會多一個 Service Principal 了,甚至砍掉 AKS 的時候,以前會留下 Service Principal,使用受控識別,也不用自己處理了,砍掉的時候,會將受控識別一起砍掉。

RBAC 是一定要起用的,後面有太多的功能會和 RBAC 相依。

2020 05 27 17 38 55

接下來是網路設定,通常配置如下就可以,提供 Node 使用的網段,VNode 使用的網段,還有 AKS 自己使用的網段,通常我都保持預設。

而需要注意的就是下面那三個,目前私人叢集還有一些問題,所以我目前還不敢打開 XDDD 而網路原則我習慣用 Azure,HTTP 應用程式路由通常是拿來測試使用,再比較正式的環境上,通常會搭配 Ingress 等服務,所以通常會將此功能關閉。

2020 05 27 17 40 30

最後,現在可以和其他服務串再一起,也就是一開始設定 ACR 和 Log Analytics,這邊選定的 ACR,會直接在 ACR 裡面加上受控識別,來讓 AKS 未來可以撈取,當然不設定也可以,只是以後要自己加上去。

2020 05 27 17 41 11

然後就完成了~

建立 Azure Kubernetes Service - Az Cli

如果想使用 AZ Cli 建立的,可以參考底下,目前底下的 AZ Cli 是需要建立 SP 的過程,若想讓他自己託管,可以將建立指令多加上,詳細可以參考

--enable-managed-identity
# 填寫自己的 Resource Group、AKS名稱、地區
RESOURCE_GROUP_NAME=Study4-Group
CLUSTER_NAME=Study4AKS

# Service Principal
SP_ID=貼上應用程式(用戶端)識別碼
SP_PASSWORD=貼上上面複製的密碼

# 取得virtual network resource ID
VNET_ID=$(az network vnet show --resource-group $RESOURCE_GROUP_NAME --name Study4-VNet --query id -o tsv)

# 給 VNET SP權限
az role assignment create --assignee $SP_ID --scope $VNET_ID --role Contributor

# 取得 virtual network subnet resource ID
SUBNET_ID=$(az network vnet subnet show --resource-group $RESOURCE_GROUP_NAME --vnet-name Study4-VNet --name AKS-Node --query id -o tsv)

# 建立 AKS 
az aks create \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --node-count 3 \
    --generate-ssh-keys \
--network-plugin azure \
    --service-cidr 10.10.0.0/16 \
    --dns-service-ip 10.10.0.105 \
    --docker-bridge-address 172.17.0.1/16 \
    --vnet-subnet-id $SUBNET_ID \
    --service-principal $SP_ID \
    --client-secret $SP_PASSWORD \
    --network-policy azure \
--kubernetes-version 1.15.10
--max-pods 250 \
--node-vm-size Standard_D4s_v3

#啟動 VNode
az aks enable-addons \
    --resource-group $RESOURCE_GROUP_NAME \
    --name $CLUSTER_NAME \
    --addons virtual-node \
    --subnet-name AKS-VNode

參考資料

Sky & Study4.TW