Kubernetes (K8S) 是 Google 設計出來用於自動化部署、擴展與管理容器化應用程式的開源系統,可以同時部署多個容器到多台機器,管理每個容器的狀態。如果 Kubernetes 偵測到容器無法正常提供服務,即自動重啟這個容器,也能將容器在不同機器中轉移,將一台機器上所有的容器轉移到另外一台機器上,滿足高擴展性、服務連續性及故障轉移等特性。

在 K8S 裡有幾個重要的 Component:

Pod

Pod 是 Kubernetes 中 最小的運作單位,每個 Pod 都會對應到一個應用程式。一個 Pod 通常存在一個或以上的容器,在同一個 Pod 中的容器則會共享網路資源,透過內部 Port 進行溝通。

Worker Node

Worker Node 是 Kubernetes 最小的硬體單位,一個 Worker Node 對應到的是一台實體或是虛擬機器,像是 AWS EC2、GCP Computer Engine 及 Azure VM,每個 Node 中還有三個元件:

  • kubelet: 管理所有 Node 中的 Pod 狀態及 Master Node 溝通
  • kube-proxy: 提供給 Kubernetes 中其他 Node 目前 Node 中所有Pod 的最新狀態
  • Container Runtime: 容器執行的程式

Master Node

Master Node 是 Kubernetes 的指揮中心,負責管理所有 Node,其中有四個元件:

  • kube-apiserver: Node 之間溝通的橋樑,提供請求的身分認證與授權
  • etcd: Kubernetes 備份中心,當 Master 發生異常時可快速還原至正常狀態
  • kube-scheduler: 將新建立的 Pod 派發到適合的 Node 中,其根據 Node 的規則與硬體限制條件等資訊來進行
  • kube-controller-manager: 管理所有處理程序,隨時監控環境資源使用,包含 Node 數量增減、處理程序的指派等

什麼是 AKS

AKS 全名為 Azure Kubernetes Service,在 Azure 上的 K8S 服務,透過 AKS 使用者不必再管理 K8S 中的 Master Node,只須設定所需的 Node 及 Pod,簡化管理應用程式操作。

> 圖片來源至:[AKS 官方文件](https://docs.microsoft.com/zh-tw/azure/aks/concepts-clusters-workloads)

如何建置 AKS

  • 首先進到 AKS 操作介面,點選 Create Kubernetes cluster
  • 根據需求選擇適合的 Configuration、Region、Kubernetes 版本以及 API Server 的可用性
  • 配置 Worker Node 的 VM 類型以及數量,數量除了可以手動設置,也可以選擇 Auto Scale 自動擴展,僅需配置機器數量的上下限
  • 設定 Node 放在哪一個 Node Pool,預設狀態下,系統會將你剛剛上一步配置的 Node 都放在 Agent pool 裡
  • 在存取設定下,使用者除了可以選擇 RBAC 授權方式,也有最近新推出來的 AKS-managed Azure Active Directory
  • 在網路設定下,配置 DNS Name
  • 在 Integration 下,可以配置與其他 Azure 服務做整合。像是取用在 ACR 裡的 Image,透過 Azure Monitor 更進階監控 Cluster 裡的行的狀態,或是藉由 Azure Policy 集中控制操作的合規性
  • 在進階設定下,可以透過 CSI Driver 取用存放在 Azure Key Vault 的 Secrets
  • 按下 Create 即完成創建 Cluster

連線至 Kubernetes cluster

  • 使用者可以透過 VM 或是電腦連線至 Cluster
  • 請先確保安裝 Docker Engine、kubectl 及 Azure CLI 版本
  • 透過 az login 登入至 Azure
  • 登入完成後,執行此指令取得存取 Cluster 的 Config

az aks get-credentials — subscription <your subscription> — resource-group <your resource group> — name <your kubernetes name>

  • 透過 kubectl get all 確認是否看到先前所建立的 Cluster
  • 準備好所需的 Namespace、Deployment 及 Service 檔案,執行以下指令開始配置應用程式

kubectl apply -f podinfo-np.yaml
kubectl apply -f podinfo-dp.yaml
kubectl apply -f podinfo-svc.yaml

  • 透過 kubectl get svc -n dev 指令查看應用程式的 Metadata
  • 接著複製 External ip 至網頁瀏覽器,即可看到服務已建立成功

結論

K8S 架構在近期上仍炙手可熱,適合大型負載的應用場景,但維護不易,仍須專業人士所幫助,雲端服務供應商看準此熱潮,紛紛推出 K8S 服務,像是 AWS EKS,GCP GKE,以及 Azure AKS,以簡化管理維護之責任,而 AKS 相較於其他雲端 K8S 服務中,K8S 版本算是更新最快以外,Master Node 還無須收費,操作直覺,算是吸引許多使用者使用的主要原因。

如果是中小型負載,仍推薦使用 ACI ,相較於 AKS 較不用管理太多的設定,使用者可根據需求選擇適合的服務。

--

--