本頁說明如何建立 GKE on AWS 叢集。您也可以使用 Terraform 建立虛擬私有雲和叢集。
本文適用於想要設定、監控及管理雲端基礎架構的管理員、架構師和營運人員。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。 Google Cloud
事前準備
建立叢集前,請先完成必要條件。具體來說,您必須提供下列資源:
- 叢集執行的 AWS 虛擬私有雲。
- 最多三個 AWS 子網路,供三個控制層副本使用。每個執行個體都必須位於不同的 AWS 可用區。
- GKE on AWS 管理叢集時擔任的 AWS IAM 角色。這需要一組特定的身分與存取權管理權限。
- 用於叢集資料 (etcd) 和設定靜態加密的 KMS 對稱 CMK 金鑰。
- 每個控制層副本的 AWS IAM 執行個體設定檔。這需要一組特定的 IAM 權限。
- EC2 安全殼層金鑰組 (選用),如果您需要透過安全殼層存取執行各個控制平面副本的 EC2 執行個體。
您有責任建立及管理這些資源,這些資源可供所有 GKE 叢集共用。所有其他基礎叢集範圍的 AWS 資源,都由 GKE on AWS 管理。
選取叢集的 CIDR 範圍
在 GKE on AWS 中建立叢集時,您需要提供用於 Pod 和服務的 IPv4 位址範圍。
這些 IP 範圍是使用無類別跨網域路由 (CIDR) 標記法指定,例如 100.64.0.0/16。
建議範圍
建議您為 Service 和 Pod 使用下列 CIDR 範圍:
- 服務:100.64.0.0/16
- Pod:100.96.0.0/11
這些範圍夠大,可讓您順利擴充叢集。
下列各節會提供更多詳細資料。
選取範圍的詳細資料
AWS 上的 GKE 會為 Pod 和 Service 使用疊加網路,因此這些網路的 IP 範圍不需要在 VPC 內可轉送。您使用的任何 IP 範圍都必須保證可用。詳情請參閱「Dataplane V2」。
Pod 和 Service IP 範圍可以與 VPC 網路重疊,但不得涵蓋控制層或節點集區子網路 IP 範圍。
Pod 和 Service 的 IP 範圍必須落在下列其中一個私人 IP 範圍內:
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16- 私人 IP 位址 (RFC 1918)100.64.0.0/10- 共用位址空間 (RFC 6598)192.0.0.0/24- IETF 通訊協定指派項目 (RFC 6890)192.0.2.0/24、198.51.100.0/24、203.0.113.0/24- 說明文件 (RFC 5737)192.88.99.0/24- IPv6 至 IPv4 中繼 (已淘汰) (RFC 7526)198.18.0.0/15- 基準測試 (RFC 2544)
建議使用 100.64.0.0/10 (RFC 6598) 內的 IP 範圍。這個範圍預留給電信級 NAT,您的 VPC 可能不會使用。
舉例來說,下列是有效的設定,其中 Pod、服務和節點網路不會重疊 (虛擬私有雲使用 RFC 1918 私人 IP 位址,而 Pod 和服務網路則疊加在 RFC 6598 私人 IP 上)。
- 虛擬私有雲網路:
10.0.0.0/16、172.16.1.0/24、172.16.2.0/24 - Pod 網路:
100.65.0.0/16 - 服務網路:
100.66.0.0/16
即使 Pod 和服務網路與 VPC 網路重疊,以下也是有效的設定,因為與控制層副本沒有重疊。
- 虛擬私有雲網路:
10.0.0.0/16 - Pod 網路:
10.0.1.0/24 - 服務網路:
10.0.2.0/24 - 控制平面副本子網路:
10.0.3.0/24、10.0.4.0/24、10.0.5.0/24
下列設定無效,因為 Pod IP 範圍與控制層網路重疊。這類重疊可能會導致工作負載無法與虛擬私有雲網路中的控制層副本通訊:
- 虛擬私有雲網路:
10.0.0.0/16 - Pod 網路:
10.0.1.0/24 - 服務網路:
10.1.0.0/24 - 控制平面副本子網路:
10.0.1.0/24、10.0.2.0/24、10.0.3.0/24
Pod 位址範圍的詳細資料
Kubernetes 會從 Pod 位址範圍,將位址分配給 Pod 物件。叢集的 Pod 範圍會分割成較小的範圍,供每個節點使用。當 Pod 排程在特定節點上時,Kubernetes 會從節點的範圍指派 Pod IP 位址。
如要計算 Pod 位址範圍的大小,您需要估算叢集中的節點數量,以及要在每個節點上執行的 Pod 數量。
下表根據您打算執行的節點和 Pod 數量,提供 Pod CIDR 範圍的大小建議。
Pod 位址範圍表
| Pod 位址範圍 | Pod IP 位址上限 | 節點數量上限 | Pod 數量上限 |
|---|---|---|---|
| /24 最小的 Pod 位址範圍 |
256 個地址 | 1 個節點 | 110 個 Pod |
| /23 | 512 個地址 | 2 個節點 | 220 Pods |
| /22 | 1,024 個地址 | 4 個節點 | 440 Pods |
| /21 | 2,048 個地址 | 8 個節點 | 880 Pods |
| /20 | 4,096 個地址 | 16 個節點 | 1,760 個 Pod |
| /19 | 8,192 個地址 | 32 個節點 | 3,520 個 Pod |
| /18 | 16,384 個地址 | 64 個節點 | 7,040 個 Pod |
| /17 | 32,768 個地址 | 128 個節點 | 14,080 個 Pod |
| /16 | 65,536 個地址 | 256 個節點 | 28,160 個 Pod |
| /15 | 131,072 個地址 | 512 個節點 | 56,320 個 Pod |
| /14 | 262,144 個位址 | 1,024 個節點 | 112,640 個 Pod |
服務位址範圍的詳細資料
Kubernetes 會為服務物件分配虛擬 IP 位址,例如這個位址範圍內的負載平衡器。
如要計算 Service 位址範圍的大小,您需要估算叢集中所需的服務數量。
下表根據您打算執行的 Service 數量,提供 Service CIDR 範圍的大小建議。
服務地址範圍表格
| 服務位址範圍 | 服務數量上限 |
|---|---|
| /27 最小的 Service 位址範圍 |
32 項服務 |
| /26 | 64 項服務 |
| /25 | 128 項服務 |
| /24 | 256 項服務 |
| /23 | 512 個服務 |
| /22 | 1,024 項服務 |
| /21 | 2,048 個服務 |
| /20 | 4,096 個服務 |
| /19 | 8,192 項服務 |
| /18 | 16,384 個服務 |
| /17 | 32,768 項服務 |
| /16 最大的可能服務位址範圍 |
65,536 項服務 |
選取機群主專案
機群是將叢集劃分為較大群組的概念。Google Cloud 透過機群,您可以管理多個雲端環境中的多個叢集,並在這些叢集中套用一致的政策。建立叢集時,GKE Multi-Cloud API 會自動向機群註冊叢集。
建立叢集時,請指定機群主機專案,叢集將從該專案進行管理。由於 AWS 上的 GKE 會使用叢集名稱做為 Fleet 成員名稱,因此請務必確保叢集名稱在整個 Fleet 中不得重複。
跨專案註冊
如要使用叢集所在 Google Cloud 專案以外的 Fleet Host 專案,您必須將額外的 IAM 政策繫結套用至 Multi-Cloud Service Agent 服務帳戶。服務帳戶即可透過 Fleet 主機專案管理 Fleet。
如要將服務代理程式新增至專案,請執行下列指令:
gcloud beta services identity create --service=gkemulticloud.googleapis.com \ --project=CLUSTER_PROJECT_NUMBER將
CLUSTER_PROJECT_NUMBER替換為您的 Google Cloud 專案編號。使用下列指令指派這個繫結:
gcloud projects add-iam-policy-binding FLEET_PROJECT_ID \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com" \ --role="roles/gkemulticloud.serviceAgent"更改下列內容:
FLEET_PROJECT_ID:機群主專案的Google Cloud 專案CLUSTER_PROJECT_NUMBER:您的 Google Cloud 專案編號
Multi-Cloud Service Agent 帳戶名稱的格式如下:
service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkemulticloud.iam.gserviceaccount.com。
您可以在 Google Cloud 控制台的「Service account」(服務帳戶) 頁面中找到服務帳戶。如要進一步瞭解如何找出專案編號,請參閱「識別專案」。
建立叢集
使用下列指令,在 AWS 上的 GKE 下建立叢集。如要進一步瞭解這個指令 (包括選用參數),請參閱 gcloud container aws 參考頁面。
gcloud container aws clusters create CLUSTER_NAME \
--aws-region AWS_REGION \
--location GOOGLE_CLOUD_LOCATION \
--cluster-version CLUSTER_VERSION \
--fleet-project FLEET_PROJECT \
--vpc-id VPC_ID \
--subnet-ids CONTROL_PLANE_SUBNET_1,CONTROL_PLANE_SUBNET_2,CONTROL_PLANE_SUBNET_3 \
--pod-address-cidr-blocks POD_ADDRESS_CIDR_BLOCKS \
--service-address-cidr-blocks SERVICE_ADDRESS_CIDR_BLOCKS \
--role-arn API_ROLE_ARN \
--database-encryption-kms-key-arn DB_KMS_KEY_ARN \
--admin-users ADMIN_USERS_LIST \
--config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN \
--iam-instance-profile CONTROL_PLANE_PROFILE \
--tags "Name=CLUSTER_NAME-cp"
更改下列內容:
CLUSTER_NAME:您選擇的叢集名稱AWS_REGION:用於建立叢集的 AWS 區域GOOGLE_CLOUD_LOCATION:叢集管理位置的名稱,如Google Cloud 管理區域中所定義。 Google CloudCLUSTER_VERSION:要在叢集上安裝的 Kubernetes 版本FLEET_PROJECT:叢集要註冊的機群主機專案。如要從其他Google Cloud 專案管理這個叢集,請參閱跨專案註冊。VPC_ID:這個叢集的 AWS 虛擬私有雲 IDCONTROL_PLANE_SUBNET_1、CONTROL_PLANE_SUBNET_2、CONTROL_PLANE_SUBNET_3:叢集三個控制層執行個體的子網路 IDPOD_ADDRESS_CIDR_BLOCKS:叢集 Pod 的 CIDR 位址範圍SERVICE_ADDRESS_CIDR_BLOCKS:叢集服務的 CIDR 位址範圍- :GKE Multi-cloud API 角色的 ARN
API_ROLE_ARN CONTROL_PLANE_PROFILE:與叢集相關聯的 IAM 執行個體設定檔。如要瞭解如何更新 IAM 執行個體設定檔,請參閱「更新 AWS IAM 執行個體設定檔」。- :AWS KMS 金鑰的 Amazon 資源名稱 (ARN),用於加密叢集的密鑰
DB_KMS_KEY_ARN CONFIG_KMS_KEY_ARN:用於加密使用者資料的 AWS KMS 金鑰 Amazon Resource Name (ARN)ADMIN_USERS_LIST(選用):以半形逗號分隔的清單,列出要授予管理員權限的使用者電子郵件地址,例如「kai@example.com,hao@example.com,kalani@example.com」。預設為建立叢集的使用者
如果存在,--tags 參數會將指定的 AWS 標記套用至 GKE on AWS 管理的所有基礎 AWS 資源。這個範例會使用節點所屬叢集的名稱,為控制平面節點加上標記。
除非使用 --ssh-ec2-key-pair 標記指定 SSH 金鑰配對,否則您無法透過 SSH 連線至這些控制層節點。
如要查看特定 Google Cloud 位置支援的所有 Kubernetes 版本,請執行下列指令。
gcloud container aws get-server-config --location GCP_LOCATION
授權 Cloud Logging / Cloud Monitoring
如要讓 GKE on AWS 建立系統記錄和指標並上傳至Google Cloud,必須先取得授權。
如要授權 Kubernetes 工作負載身分 gke-system/gke-telemetry-agent 將記錄檔寫入 Google Cloud Logging,以及將指標寫入 Google Cloud Monitoring,請執行下列指令:
gcloud projects add-iam-policy-binding GOOGLE_PROJECT_ID \
--member="serviceAccount:GOOGLE_PROJECT_ID.svc.id.goog[gke-system/gke-telemetry-agent]" \
--role=roles/gkemulticloud.telemetryWriter
將 GOOGLE_PROJECT_ID 替換為叢集的 Google Cloud 專案 ID。
這個 IAM 繫結會授予 Google Cloud 專案中所有叢集上傳記錄和指標的權限。您只需要在為專案建立第一個叢集後執行這項指令。
除非 Google Cloud 專案中已建立至少一個叢集,否則新增這項 IAM 繫結會失敗。這是因為在建立叢集之前,系統不會佈建所參照的工作負載身分集區 (GOOGLE_PROJECT_ID.svc.id.goog)。
後續步驟
- 建立節點集區。
- 設定 kubectl 的叢集存取權。
- 請嘗試快速入門導覽課程,瞭解如何啟動第一個工作負載。
- 請參閱
gcloud container clusters create的參考說明文件。 - 建立叢集時發生問題嗎?詳情請參閱「疑難排解」一節。