設定最少基礎架構

本指南的第一部分會逐步說明如何為 VMware 進行 Google Distributed Cloud (僅限軟體) 的小型概念驗證安裝作業,並使用單一使用者叢集。本文適用於負責設定、監控及管理技術基礎架構的管理員、架構師和營運人員。如要進一步瞭解Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

本文說明如何為這項安裝作業設定最精簡的 vSphere 和 Google Cloud 環境,以及如何規劃 IP 位址。後續的「建立基本叢集」一文則說明如何建立管理員工作站、管理員叢集和使用者叢集。

您按照本指南設定的基礎架構,可能不適合實際的生產需求和使用案例。如要進一步瞭解正式版安裝作業,請參閱「安裝總覽」和相關指南。

事前準備

程序總覽

設定時的主要步驟如下:

  1. 設定環境。確保符合資源需求。我們提供 ESXi 主機和 vSphere 資料存放區的設定範例,這些設定符合本次安裝作業的需求。
  2. 設定 vSphere 物件。Google Distributed Cloud 元件會在 vSphere 物件階層中執行。
  3. 規劃 IP 位址。Google Distributed Cloud 要求您提供所有節點的 IP 位址,以及管理員和使用者存取部署作業的虛擬 IP 位址 (VIP)。在這項設定中,您將為叢集節點使用靜態 IP 位址。我們提供範例,但建議您諮詢網路管理員,協助為自己的網路選擇合適的位址。
  4. 設定防火牆和 Proxy 規則
  5. 設定 Google Cloud 資源,包括設定及管理 Google Distributed Cloud 時要使用的 Google Cloud 專案,以及具備必要權限的服務帳戶,以便存取及下載 Google Distributed Cloud 元件軟體。

1. 設定環境

如要進行這項最簡單的安裝作業,您可以使用執行 ESXi 的單一實體主機。

  1. 確認主機符合下列 CPU、RAM 和儲存空間容量的最低需求:

    • 8 個實體 CPU,超執行緒已啟用,時脈為 2.7 GHz
    • 80 gibibytes (GiB) RAM
    • 470 GiB 儲存空間
  2. 確認已安裝 ESXi 7.0u2 以上版本。

  3. 確認您使用的是 vCenter Server 7.0u2 以上版本。

主機和資料存放區範例

以下是符合規定的 ESXi 主機vSphere 資料存放區範例:

  • ESXi 主機設定:

    • 製造商:Dell Inc.
    • 實體 CPU:8 個 CPU,時脈 2.7 GHz
    • 處理器類型:Intel(R) Xeon(R) Platinum 8168 CPU @ 2.70 GHz
    • 處理器插槽:2
    • ESXi 版本:7.0u2 以上版本
    • vCenter Server 版本:7.0u2 以上版本
    • 超執行緒:已啟用
  • 資料儲存庫設定:

    • 類型:VMFS 6.82
    • 磁碟機類型:SSD
    • 供應商:DELL
    • 磁碟機類型:邏輯
    • RAID 等級:RAID1

2. 設定 vSphere 物件

在 vSphere 環境中設定下列物件:

請記下 vSphere 資料中心、叢集、資料儲存庫和網路名稱,因為在「建立基本叢集」中設定管理員工作站時,您會需要這些名稱。

如果您已設定 vSAN 資料存放區,請使用 govcdatastore 目錄中建立資料夾,供 Google Distributed Cloud 的虛擬機器磁碟 (VMDK) 使用:

govc datastore.mkdir -namespace=true data-disks

3. 規劃 IP 位址

Google Distributed Cloud 簡介所述,Google Distributed Cloud 安裝作業需要多個 IP 位址,包括:

  • 所有節點的 IP 位址
  • 用於存取控制層元件 (例如 Kubernetes API 伺服器) 和使用者叢集上執行應用程式的虛擬 IP 位址 (VIP)
  • Pod 和服務之間通訊的 CIDR 範圍

因此,設定 Google Distributed Cloud 時,請務必規劃 IP 位址,包括確保不會建立任何位址衝突。即使是這種簡單的安裝方式,您可能也需要網路管理員協助尋找合適的值來設定。在本節的其餘部分,我們將提供假設網路中適用於此安裝作業的值的說明範例,您的值會有所不同。

  • 這個最小安裝中的叢集使用隨附的 MetalLB 負載平衡器。這個負載平衡器會在叢集節點上執行,因此不需要額外的 VM 進行負載平衡。

  • Google Distributed Cloud 可讓您選擇為叢集節點提供靜態 IP 位址,或使用 DHCP 伺服器。在這個簡單的安裝作業中,您會使用靜態 IP 位址。

VLAN 範例

對於這個小型安裝作業,建議您將管理員工作站、管理員叢集節點和使用者叢集節點放在 vSphere 網路的同一個 VLAN 中。舉例來說,假設 172.16.20.0/24 範圍內的所有 IP 位址都會路由至特定 VLAN。假設網路管理員允許您將 172.16.20.49 - 172.16.20.69 用於 VM 和虛擬 IP 位址 (VIP)。

下圖說明具有管理員工作站、管理員叢集和使用者叢集的 VLAN。請注意,VIP 不會顯示與叢集中任何特定節點相關聯。這是因為 MetalLB 負載平衡器可以選擇要由哪個節點發布個別服務的虛擬 IP。舉例來說,在使用者叢集中,一個工作站節點可能會發布 172.16.20.64,另一個工作站節點則可能會發布 172.16.20.65。

管理員叢集和使用者叢集的 IP 位址。
管理員叢集和使用者叢集的 IP 位址 (按一下即可放大)

範例 IP 位址:管理員工作站

在本範例中,管理員工作站會使用網路管理員提供的範圍內第一個位址:172.16.20.49。

範例 IP 位址:叢集節點

下表舉例說明如何將 IP 位址用於叢集節點。請注意,表格會顯示兩個額外節點的位址:admin-vm-6 和 user-vm-5。叢集升級、更新和自動修復期間需要額外節點。詳情請參閱「管理節點 IP 位址」。

VM 主機名稱 說明 IP 位址
admin-vm-1 管理員叢集的控制層節點。 172.16.20.50
admin-vm-2 管理員叢集的控制層節點。 172.16.20.51
admin-vm-3 管理員叢集的控制層節點。 172.16.20.52
user-vm-1 使用者叢集的控制層節點。 172.16.20.53
user-vm-2 使用者叢集工作站節點 172.16.20.54
user-vm-3 使用者叢集工作站節點 172.16.20.55
user-vm-4 使用者叢集工作站節點 172.16.20.56
user-vm-5 172.16.20.57

IP 位址範例:管理員叢集的 VIP

下表舉例說明如何為管理員叢集指定控制平面 VIP。

VIP 說明 IP 位址
管理員叢集 Kubernetes API 伺服器的 VIP 在管理員叢集的負載平衡器上設定。 172.16.20.58

IP 位址範例:使用者叢集的虛擬 IP

下表舉例說明如何為使用者叢集指定 VIP。

請注意,使用者叢集的 Kubernetes API 伺服器 VIP 和 Ingress VIP 都與工作站節點和控制層節點位於同一個 VLAN。

VIP 說明 IP 位址
使用者叢集 Kubernetes API 伺服器的 VIP 在管理員叢集的負載平衡器上設定。 172.16.20.59
Ingress VIP 在使用者叢集的負載平衡器上設定。 172.16.20.60
服務 VIP 類型為 LoadBalancer 的 Service 有十個位址。
視需要在使用者叢集的負載平衡器上設定。
請注意,這個範圍包含 Ingress VIP。這是 MetalLB 負載平衡器的必要條件。
172.16.20.60 - 172.16.20.69

Pod 和服務的 IP 位址

除了叢集節點的 IP 位址和部署作業的存取位址外,您還需要指定每個叢集內可用於叢集內流量的位址範圍。

如要這麼做,請指定用於 Pod IP 位址的 CIDR 範圍,以及用於 Kubernetes Service ClusterIP 位址的另一個 CIDR 範圍。這些項目會指定為叢集設定的一部分,詳情請見本指南的下一部分。

在 IP 規劃中,請決定要用於 Pod 和 Service 的 CIDR 範圍。除非有其他原因,否則請使用下列預設範圍:

目的預設 CIDR 範圍
管理員叢集 Pod192.168.0.0/16
使用者叢集 Pod192.168.0.0/16
管理員叢集服務10.96.232.0/24
使用者叢集服務10.96.0.0/20

預設值說明瞭以下幾點:

  • 多個叢集可以共用同一個 Pod CIDR 範圍。

  • 叢集的服務 CIDR 範圍不得與任何其他叢集的服務 CIDR 範圍重疊。

  • 通常您需要的 Pod 數量會多於 Service,因此對於指定叢集,您可能需要比 Service CIDR 範圍更大的 Pod CIDR 範圍。舉例來說,使用者叢集的預設 Pod 範圍有 2^(32-16) = 2^16 個位址,但使用者叢集的預設 Service 範圍只有 2^(32-20) = 2^12 個位址。

避免重疊

在某些情況下,您可能需要使用非預設 CIDR 範圍,以免與網路上可連線的 IP 位址重疊。Service 和 Pod 範圍不得與您要從叢集內部連結的任何外部位址重疊。

舉例來說,假設您的服務範圍為 10.96.232.0/24,Pod 範圍為 192.168.0.0/16。Pod 傳送至任一範圍內位址的流量都會視為叢集內流量,不會傳送至叢集外的任何目的地。

具體來說,Service 和 Pod 範圍不得與下列項目重疊:

  • 任何叢集內節點的 IP 位址

  • 負載平衡器機器使用的 IP 位址

  • 控制層節點和負載平衡器使用的 VIP

  • vCenter 伺服器、DNS 伺服器和 NTP 伺服器的 IP 位址

建議您為 Pod 和 Service 範圍使用 RFC 1918 定義的內部 IP 位址範圍。

建議使用 RFC 1918 位址的原因之一是:假設您的 Pod 或服務範圍包含外部 IP 位址。Pod 傳送至其中一個外部位址的任何流量都會視為叢集內流量,且不會抵達外部目的地。

DNS 伺服器和預設閘道

建立管理員和使用者叢集之前,您也必須知道下列項目的 IP 位址:

  • 管理員工作站和叢集節點可使用的 DNS 伺服器

  • 叢集節點可使用的 NTP 伺服器

  • 子網路的預設閘道 IP 位址,該子網路包含管理員工作站和叢集節點。舉例來說,假設您的管理員工作站、管理員叢集節點和使用者叢集節點都位於 172.16.20.0/24 子網路中。子網路的預設閘道位址可能是 172.16.20.1。

4. 設定防火牆和 Proxy

請按照「Proxy 和防火牆規則」一文的說明,設定防火牆和 Proxy,允許必要的 Google Distributed Cloud 流量。您需要使用上節中識別的叢集節點 IP 位址,才能執行這項工作。請注意,使用者和管理員叢集的 IP 位址不會指派給特定節點,因此請務必確保所有相關防火牆規則都適用於每個叢集的所有 IP 位址。

5. 設定 Google Cloud 資源

Google Cloud 專案是建立、啟用及使用所有 Google Cloud 服務的基本要件,包括用於安裝及管理 Google Distributed Cloud 的服務。如果您不熟悉如何使用 Google Cloud 專案,請參閱「建立及管理專案」一文,瞭解更多相關資訊。

  1. 選擇現有 Google Cloud 專案,或建立新專案。

  2. 記下 Google Cloud 專案 ID,後續步驟將會用到。

設定 Google Cloud CLI

Google Cloud CLI 是一種指令列工具,可用於處理專案。按照「安裝 Google Cloud SDK」一文中的指示操作,確保您使用的是最新版本。

所需權限

如果您是專案擁有者 (例如自行建立專案),您已具備執行其餘簡單安裝作業的所有必要權限。如果您不是專案擁有者,您或專案管理員必須確保您的 Google 帳戶具備必要權限。

下列 IAM 角色可讓您建立服務帳戶、為其指派 IAM 角色、啟用 API,並確保 gkeadm 工具可在設定的第二部分為您建立及管理服務帳戶:

  • resourcemanager.projectIamAdmin
  • serviceusage.serviceUsageAdmin
  • iam.serviceAccountCreator
  • iam.serviceAccountKeyAdmin

如要自行授予 IAM 角色,請參閱授予、變更及撤銷資源的存取權,瞭解所需權限。 如果沒有這些權限,請貴機構中具有相關權限的使用者授予角色。

如要授予角色:

Linux 和 macOS

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/serviceusage.serviceUsageAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="user:ACCOUNT" \
    --role="roles/iam.serviceAccountKeyAdmin"

Windows

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/serviceusage.serviceUsageAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID ^
    --member="user:ACCOUNT" ^
    --role="roles/iam.serviceAccountKeyAdmin"

更改下列內容:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • ACCOUNT:Google 帳戶的識別電子郵件地址

設定服務帳戶

您的 Google Cloud 專案必須有四個服務帳戶,供 Google Distributed Cloud 使用。在本練習中,系統會自動為您產生其中兩個服務帳戶。但您必須手動建立其他兩個服務帳戶:

  • 連結註冊服務帳戶 (系統自動產生)
  • 記錄監控服務帳戶 (自動產生)
  • 稽核記錄服務帳戶 (手動建立)
  • 元件存取服務帳戶 (手動建立)

稽核記錄服務帳戶

  1. 在 Google Cloud 專案中,建立服務帳戶,供 Google Distributed Cloud 用於將叢集的 Kubernetes 稽核記錄傳送至 Cloud 稽核記錄。這就是您的稽核記錄服務帳戶

    gcloud iam service-accounts create audit-logging-sa \
        --display-name "Audit Logging Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID 替換為專案 ID。Google Cloud

  2. 取得新建立的稽核記錄服務帳戶電子郵件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 為稽核記錄服務帳戶建立 JSON 金鑰:

    gcloud iam service-accounts keys create audit-logging-key.json \
        --iam-account SERVICE_ACCOUNT_EMAIL_AUDIT_LOGGING
    

    SERVICE_ACCOUNT_EMAIL_AUDIT_LOGGING 替換為稽核記錄服務帳戶的電子郵件地址。

    您不需要授予稽核記錄服務帳戶任何角色。

元件存取服務帳戶

  1. 在 Google Cloud 專案中,建立服務帳戶,供 Google Distributed Cloud 代表您從 Artifact Registry 下載叢集元件程式碼。這就是元件存取服務帳戶

    gcloud iam service-accounts create component-access-sa \
        --display-name "Component Access Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID 替換為專案 ID。Google Cloud

  2. 取得新建立的元件存取服務帳戶電子郵件地址:

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 為元件存取服務帳戶建立 JSON 金鑰:

    gcloud iam service-accounts keys create component-access-key.json \
       --iam-account SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS
    

    SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS 替換為元件存取服務帳戶的電子郵件地址。

  4. 將下列身分與存取權管理角色新增至元件存取服務帳戶:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS" \
        --role "roles/serviceusage.serviceUsageViewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS" \
        --role "roles/iam.roleViewer"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_EMAIL_COMPONENT_ACCESS" \
        --role "roles/iam.serviceAccountViewer"
    

啟用 Google API

  1. 在 Google Cloud 專案中啟用下列 Google API。這樣一來,您就能在專案中使用 Google Distributed Cloud 需要的所有 Google Cloud 服務。

    gcloud services enable --project PROJECT_ID \
        anthos.googleapis.com \
        anthosgke.googleapis.com \
        anthosaudit.googleapis.com \
        cloudresourcemanager.googleapis.com \
        connectgateway.googleapis.com \
        container.googleapis.com \
        gkeconnect.googleapis.com \
        gkehub.googleapis.com \
        gkeonprem.googleapis.com \
        kubernetesmetadata.googleapis.com \
        serviceusage.googleapis.com \
        stackdriver.googleapis.com \
        opsconfigmonitoring.googleapis.com \
        monitoring.googleapis.com \
        logging.googleapis.com \
        iam.googleapis.com \
        storage.googleapis.com
  2. 如果這是您第一次在專案中啟用 GKE On-Prem API (gkeonprem.googleapis.com),請初始化 API。如要執行這項操作,請呼叫 gcloud CLI 指令,顯示可用於建立使用者叢集的版本:

    gcloud container vmware clusters query-version-config \
        --project=PROJECT_ID \
        --location="us-central1"
    

    後續步驟

建立基本叢集