Kubernetes 已成為容器協調的標準,雲端供應商也提供各種託管 Kubernetes 服務,簡化佈署和管理。本文將探討 Google Kubernetes Engine (GKE)、Azure Kubernetes Service (AKS) 和 Amazon Elastic Kubernetes Service (EKS) 的佈署方法,並比較使用雲端原生工具和 Terraform 的優劣。GKE 的 Autopilot 模式提供高度自動化的叢集管理,適合簡化維運。AKS 則與 Azure 生態系統緊密整合,提供豐富的 Azure 服務支援。EKS 則讓使用者能充分利用 AWS 的基礎設施和服務。Terraform 則提供一致的基礎設施即程式碼方案,方便跨雲平台管理 Kubernetes 資源。選擇適合的工具和平台,能有效提升 Kubernetes 佈署效率和可維護性。
在雲端供應商上執行 Kubernetes
在現代化的軟體開發中,企業需要能夠無縫擴充套件資源並提供全球可用性。Kubernetes 提供了一個強大的解決方案,用於跨機器叢集協調容器化應用程式,而在雲端平台上執行 Kubernetes 則結合了 Kubernetes 的能力與雲端的彈性和深度服務。雲原生計算基金會(CNCF)透過認證的 Kubernetes 一致性計劃,確保不同雲端供應商的 Kubernetes 實作保持一致的 API 相容性和功能集。
Google Kubernetes Engine(GKE)
問題描述
建立 Kubernetes 叢集並佈署應用程式(工作負載)可能很複雜,涉及計算、儲存、網路等資源的管理。Google Kubernetes Engine(GKE)的 Autopilot 模式提供了一個託管環境,由 Google 處理叢集組態和擴充套件。
解決方案
GKE Autopilot 模式針對尋求簡化、託管 Kubernetes 體驗的開發人員和團隊,使他們能夠專注於應用程式佈署而無需處理操作複雜性。另一方面,Terraform 適用於需要強大的、程式碼驅動的自動化和對 Kubernetes 及相關資源進行控制的 DevOps 工程師和基礎設施架構師。
使用 GKE Autopilot 模式
我們可以按照以下步驟在 GKE Autopilot 模式下建立 Kubernetes 叢集並佈署一個“Hello World”應用程式:
啟用 Kubernetes Engine API
- 存取 Google Cloud Console 中的 Kubernetes Engine 頁面。
- 建立或選擇一個專案。
- 啟用 API 並等待流程完成。
建立 GKE Autopilot 模式叢集
- 導航到 GKE 叢集頁面並點選“建立”。
- 組態叢集:
- 名稱:輸入
hello-world-cluster。 - 其他設定保持預設值。
- 名稱:輸入
- 建立叢集並監控佈署狀態直到驗證完成。
佈署示例應用
- 導航到 GKE 工作負載頁面並點選“佈署”。
- 組態容器:
- 影像路徑:
us-docker.pkg.dev/google-samples/containers/gke/hello-app。 - 設定佈署名稱:
hello-world-app。 - 連線到叢集:選擇
hello-world-cluster。
- 影像路徑:
- 公開我們的應用:
- 選擇“將佈署公開為新服務”。
- 設定埠為 80,目標埠為 8080。
- 佈署並等待 IP 地址被分配。
存取我們的應用
- 導航到
hello-world-app的佈署詳情。 - 在瀏覽器中開啟公共 IP 地址以檢視“Hello, world!”訊息。
- 導航到
使用 Terraform
環境設定
- 啟用 API 並設定許可權。
- 在 Google Cloud 專案中啟用 Kubernetes Engine API。
- 確保啟用計費。
- 分配必要的角色:
roles/container.admin、roles/compute.networkAdmin、roles/iam.serviceAccountUser。
檢視和初始化 Terraform 組態
- 檢視 Terraform 檔案:
- 檢查
cluster.tf以瞭解 VPC 和 GKE Autopilot 叢集組態。 - 檢視
app.tf以審閱應用程式佈署和服務公開設定。
- 檢查
- 檢視 Terraform 檔案:
程式碼範例
# cluster.tf 的部分內容
resource "google_container_cluster" "hello_world_cluster" {
name = "hello-world-cluster"
location = "us-central1"
# Autopilot模式組態
enable_autopilot = true
}
# app.tf 的部分內容
resource "kubernetes_deployment" "hello_world_app" {
metadata {
name = "hello-world-app"
}
spec {
replicas = 1
selector {
match_labels = {
app = "hello-world-app"
}
}
template {
metadata {
labels = {
app = "hello-world-app"
}
}
spec {
container {
image = "us-docker.pkg.dev/google-samples/containers/gke/hello-app"
name = "hello-app"
port {
container_port = 8080
}
}
}
}
}
}
#### 內容解密:
上述 Terraform 組態檔案展示瞭如何使用 Terraform 在 GKE 上建立 Autopilot 叢集並佈署應用程式。cluster.tf 檔案定義了 GKE 叢集的組態,包括啟用 Autopilot 模式。app.tf 檔案定義了 Kubernetes 佈署資源,用於佈署 hello-world-app 應用程式。該組態指定了使用 us-docker.pkg.dev/google-samples/containers/gke/hello-app 映象,並將容器的 8080 埠暴露出來。
透過這種方式,我們能夠使用 Terraform 以基礎設施即程式碼(IaC)的方式管理和佈署 Kubernetes 資源,從而提高自動化程度和可重複性。
圖表翻譯:
此圖示展示了使用 GKE Autopilot 和 Terraform 的流程圖。 圖表翻譯: 上圖展示了在 GKE 上使用 Autopilot 模式建立叢集和佈署應用的流程,以及如何使用 Terraform 自動化這一過程。圖中從啟用 Kubernetes Engine API 到建立叢集、佈署應用、公開服務和存取應用的每一步驟都被清晰地表示出來。同時,也展示了使用 Terraform 組態和初始化的步驟,這使得整個流程更加自動化和可控。
使用Terraform與Azure CLI佈署Kubernetes叢集
在雲端供應商上佈署Kubernetes叢集時,選擇適當的工具和方法至關重要。本章節將探討如何使用Terraform和Azure CLI來佈署和管理Azure Kubernetes Service(AKS)叢集。
為何選擇Terraform或Azure CLI?
選擇Terraform還是Azure CLI取決於操作需求和專業知識。Azure CLI提供了一個簡單直接的方式來佈署和管理AKS叢集,適合開發者快速上手。另一方面,Terraform提供了基礎設施即程式碼(IaC)的能力,適合DevOps專業人士實作自動化、一致性和可重複性。
使用Azure CLI佈署AKS叢集
步驟1:準備環境
- 確保您擁有Azure訂閱或建立新帳戶。
- 安裝Azure CLI或使用Azure Cloud Shell。
- 使用
az login登入並設定適當的訂閱。
步驟2:定義環境變數
設定必要的變數以簡化建立命令:
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM"
export REGION="westeurope"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM"
export MY_DNS_LABEL="mydnslabel$RANDOM"
步驟3:建立資源群組
建立一個資源群組來存放相關資源:
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
步驟4:建立AKS叢集
使用系統分配的託管身份和自動生成的SSH金鑰佈署AKS叢集:
az aks create --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME --enable-managed-identity --node-count 1 --generate-ssh-keys
步驟5:組態kubectl
安裝kubectl並設定它以連線到新建立的AKS叢集:
az aks get-credentials --resource-group $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAME
#### 內容解密:
此步驟透過取得AKS叢集的憑證,使kubectl能夠與叢集進行互動。az aks get-credentials命令將叢集的組態資訊寫入本地的~/.kube/config檔案中,從而允許kubectl使用這些憑證存取叢集。
使用Terraform佈署AKS叢集
步驟1:設定環境
- 確保您擁有Azure訂閱。
- 安裝Terraform和Azure CLI。
- 使用
az login登入Azure。
步驟2:編寫Terraform組態
建立Terraform組態檔案,使用azurerm提供者定義所需的Azure資源:
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "aks" {
name = "myResourceGroup"
location = "East US"
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "myAKSCluster"
location = azurerm_resource_group.aks.location
resource_group_name = azurerm_resource_group.aks.name
dns_prefix = "myakscluster"
default_node_pool {
name = "default"
node_count = 1
vm_size = "Standard_DS2_v2"
}
identity {
type = "SystemAssigned"
}
}
#### 內容解密:
此Terraform組態定義了一個Azure資源群組和一個AKS叢集。azurerm_kubernetes_cluster資源用於建立AKS叢集,並指定了預設節點池的組態,包括節點數量和虛擬機器大小。identity塊啟用了系統分配的託管身份。
對比與選擇
- Azure CLI:適合快速佈署和管理AKS叢集,特別是在開發和測試環境中。
- Terraform:適合需要基礎設施即程式碼、自動化和可重複性的生產環境。
後續步驟
- 探索更多關於AKS的功能和最佳實踐。
- 研究如何使用CI/CD管道自動化應用程式佈署。
相關資源
在雲端服務供應商上佈署Kubernetes
4.3 Amazon Elastic Kubernetes Service (EKS)
問題描述
設定和管理Kubernetes叢集涉及組態多個元件,如節點、Pod和服務,這是一項複雜的工作。Amazon Elastic Kubernetes Service(EKS)透過提供受管理的Kubernetes服務簡化了這一過程,讓使用者能夠專注於佈署和管理應用程式,而不必擔心底層基礎設施。然而,對於新使用者來說,設定EKS叢集的初始步驟,包括組態必要的工具和存取許可權,仍然可能帶來挑戰。
討論
以下是建立Amazon EKS上Kubernetes叢集的步驟。本假設我們已經在系統上安裝並組態了AWS CLI:
- 安裝AWS CLI和eksctl:確保我們安裝了最新版本的AWS CLI和eksctl。eksctl是一個簡單的CLI工具,用於在EKS上建立叢集,簡化了節點和叢集管理的大部分複雜性。我們可以使用我們喜歡的套件管理器安裝這些軟體,也可以在AWS官網下載最新版本。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
內容解密:
- 上述指令首先下載並安裝AWS CLI。
- 然後下載並安裝eksctl,這是一個用於建立和管理EKS叢集的命令列工具。
- 建立EKS叢集:使用eksctl建立我們的叢集。此步驟將建立一個名為MyCluster的叢集,並指定節點數量和區域。根據需要調整引數:
eksctl create cluster --name MyCluster --region us-west-2 --nodegroup-name standard-workers --node-type t3.medium --nodes 3
內容解密:
- 此指令建立一個名為MyCluster的EKS叢集,位於us-west-2區域,包含3個t3.medium型別的節點。
- eksctl自動為kubectl組態EKS叢集。
- 驗證組態:透過列出節點來驗證組態:
kubectl get nodes
內容解密:
- 此指令用於檢查叢集中的節點狀態,確保它們正確執行。
參考資料
- AWS CLI檔案:有關組態和使用AWS CLI的詳細資訊,請參閱AWS CLI檔案。
- EKS使用者:提供有關使用Amazon EKS的深入,包括高階組態、安全性和網路功能。
- Kubernetes官方檔案:有關Kubernetes概念的更廣泛理解,以及如何在Kubernetes叢集上佈署和管理應用程式。
- eksctl檔案:有關更進階的eksctl用法和場景,包括叢集升級、擴充套件和與其他AWS服務的整合。
4.4 DigitalOcean
問題描述
佈署Kubernetes叢集通常涉及管理控制平面和容器化基礎設施,這可能很複雜且耗時。DigitalOcean Kubernetes(DOKS)透過提供與DigitalOcean負載平衡器、卷等原生整合的受管理服務簡化了這一過程,並允許進行高用性組態。然而,使用者可能需要指導如何透過不同的介面(如API、CLI和控制台)高效地使用DOKS。
Kubernetes雲端服務供應商比較
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Kubernetes雲端佈署實戰
package "Kubernetes Cluster" {
package "Control Plane" {
component [API Server] as api
component [Controller Manager] as cm
component [Scheduler] as sched
database [etcd] as etcd
}
package "Worker Nodes" {
component [Kubelet] as kubelet
component [Kube-proxy] as proxy
package "Pods" {
component [Container 1] as c1
component [Container 2] as c2
}
}
}
api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2
note right of api
核心 API 入口
所有操作經由此處
end note
@enduml
圖表翻譯: 此圖表比較了不同的Kubernetes雲端服務供應商,包括Amazon EKS、Azure AKS和DigitalOcean DOKS。它們都提供了簡化Kubernetes叢集管理的功能,例如自動化管理和與其他雲端服務的整合,從而降低了維運複雜度並提升了應用的可觀測性和安全性。