使用 `gketl` 建立管理員叢集

使用 gkectl 建立 Google Distributed Cloud 軟體管理員叢集 (僅限 VMware)。如需在您的地端部署環境中,於本地管理整個管理員叢集生命週期,以符合嚴格的安全防護、法規遵循或實體隔離需求,請使用 gkectl。您也可以使用 TerraformGoogle Cloud 控制台建立管理員叢集。

事前準備

  • 請確認您已設定管理員工作站,並能登入,如「建立管理員工作站」一文所述。

  • 請確認服務帳戶的 JSON 金鑰檔案位於管理工作站。

  • 查看 IP 位址規劃文件。確認您有足夠的 IP 位址,可供三個控制層節點和一個控制層 VIP 使用。如果您打算建立任何kubeception 使用者叢集,則必須為這些使用者叢集的控制層節點預留充足的 IP 位址。

  • 請參閱負載平衡總覽,重新考慮要使用的負載平衡器類型。如果是手動負載平衡器,您必須先設定負載平衡器,才能建立管理員叢集。

  • 如果您使用 gkectl 建立管理員叢集,請決定要為 Google Distributed Cloud 元件使用公開或私有登錄檔。如要瞭解如何使用私密 Docker 登錄檔,請參閱 privateRegistry。Terraform 和 Google Cloud 控制台都不支援使用私人 Docker 登錄檔做為系統元件。

  • 決定要在管理員叢集節點上執行的作業系統類型。

  • 如果貴機構規定輸出流量必須通過 Proxy 伺服器,請務必將必要 API 和 Artifact Registry 位址加入許可清單

  • 在 1.29 以上版本中,預設會啟用伺服器端預檢。伺服器端預檢需要額外的防火牆規則。在「管理員叢集的防火牆規則」中,搜尋「Preflight checks」,並確認已設定所有必要的防火牆規則。伺服器端前置檢查會在啟動叢集上執行,而不是在管理員工作站本機執行。

程序總覽

建立管理員叢集的主要步驟如下:

  1. 填寫設定檔。指定新管理員憑證設定檔的詳細資料,以及可能的 IP 封鎖檔案。

  2. 將 OS 映像檔匯入 vSphere,並視需要將容器映像檔推送至私人登錄檔。執行 gkectl prepare

  3. 建立管理員叢集。使用 gkectl 建立新的管理員叢集,如編輯完成的設定檔中所指定。Google Distributed Cloud 建立管理員叢集時,會部署 Kubernetes in Docker (kind) 叢集,暫時代管建立管理員叢集所需的 Kubernetes 控制器。這個暫時性叢集稱為「啟動叢集」。使用者叢集是由管理員叢集建立及升級,無須使用啟動程序叢集。

  4. 確認管理員叢集正在執行中。使用 kubectl 查看叢集節點。

完成這項程序後,您將擁有可建立及管理使用者叢集的執行中管理員叢集。

如果您使用 VPC Service Controls,執行部分 gkectl 指令 (例如 "Validation Category: GCP - [UNKNOWN] GCP service: [Stackdriver] could not get GCP services") 時可能會看到錯誤。如要避免發生這些錯誤,請在指令中加入 --skip-validation-gcp 參數。

填寫設定檔

  • 確認管理員工作站已安裝必要版本的 gkectl。 一般來說,您使用的 gkectl 版本會與建立叢集時使用的版本相同。您可以在叢集設定檔的 gkeOnPremVersion 欄位中指定叢集版本。建立叢集時,系統會強制執行下列版本規則:

    • gkectl 子版本不得低於叢集的子版本。舉例來說,您無法使用 gkectl 1.29 版建立 1.30 叢集。修補程式版本不重要。舉例來說,您可以使用 gkectl 1.29.0-gke.1456 版建立修補程式版本較高的叢集,例如 1.29.1000-gke.94。

    • gkectl 子版本不得高於叢集版本超過兩個子版本。舉例來說,如果您要建立 1.28 叢集,gkectl 版本可以是 1.29 或 1.30。但您無法使用 gkectl 1.31 版,因為該版本比叢集版本高出三個子版本。

    如有需要,請參閱「下載 gkectl」一文,瞭解如何取得支援的 gkectl 版本。

如果您使用 gkeadm 建立管理員工作站,系統會產生名為 admin-cluster.yaml 的設定檔。

如果您未使用 gkeadm 建立管理員工作站,請在管理員工作站上執行下列指令,產生 admin-cluster.yaml

gkectl create-config admin

這個設定檔用於建立管理員叢集。

請詳閱管理員叢集設定檔文件,瞭解設定檔。建議您在另一個分頁或視窗中開啟這份文件, 因為您會在完成下列步驟時參考這份文件。

name

如要指定管理員叢集的名稱,請填寫 name 欄位。

bundlePath

套件是包含叢集元件的 ZIP 檔案。管理員工作站隨附這項功能。系統已為你填入這個欄位。

vCenter

這個部分的欄位已填入您建立管理工作站時輸入的值。

enableAdvancedCluster

在 1.31 版中,如要啟用進階叢集功能,請將 enableAdvancedCluster 設為 true

請注意以下版本差異:

  • 在 1.31 版中,進階叢集功能為預先發布版:

    • 您只能在建立新的 1.31 叢集時啟用進階叢集。

    • 啟用進階叢集後,您將無法將叢集升級至 1.32 版。請僅在測試環境中啟用進階叢集。

  • 在 1.32 版中,進階叢集功能為正式發布版。

    • 根據預設,管理員叢集會建立為進階叢集。如要建立非進階叢集,您必須明確將 enableAdvancedCluster 設為 false

    • 如果叢集已啟用進階叢集功能,則支援叢集升級。

  • 在 1.33 以上版本中,所有叢集都會建立為進階叢集。如果將 enableAdvancedCluster 設為 false,叢集建立作業會失敗。

network

填寫「network.controlPlaneIPBlock和「network.hostConfig部分。同時將 adminMaster.replicas 設為 3

「network.podCIDR」network.podCIDR和「network.serviceCIDR」network.serviceCIDR欄位已預先填入值,除非這些值與網路中已使用的位址衝突,否則您可以保留不變。Kubernetes 會使用這些範圍,將 IP 位址指派給叢集中的 Pod 和 Service。

視需要填寫設定檔網路部分中的其餘欄位。

loadBalancer

為管理員叢集的 Kubernetes API 伺服器預留 VIP。將 VIP 設為 loadBalancer.vips.controlPlaneVIP 的值

詳情請參閱「管理叢集子網路中的 VIP」。

決定要使用的負載平衡類型。選項如下:

  • MetalLB 套裝組合負載平衡。將 loadBalancer.kind 設為 "MetalLB"

  • 手動負載平衡。將 loadBalancer.kind 設為 "ManualLB",並移除 manualLB 區段。

如要進一步瞭解負載平衡選項,請參閱「負載平衡總覽」。

antiAffinityGroups

根據偏好設定,將 antiAffinityGroups.enabled 設為 truefalse

使用這個欄位指定是否要讓 Google Distributed Cloud 為管理員叢集節點建立 VMware Distributed Resource Scheduler (DRS) 反相依性規則,使節點分散於資料中心內至少三個實體主機上。

adminMaster

如要為管理員叢集的控制平面節點指定 CPU 和記憶體,請填寫 adminMaster 部分的 cpusmemoryMB 欄位。

管理員叢集必須有三個控制層節點。將 adminMaster 區段中的 replicas 欄位設為 3

proxy

如果管理員叢集節點所在的網路位於 Proxy 伺服器後方,請填寫「proxy」部分。

privateRegistry

決定要將 Google Distributed Cloud 元件的容器映像檔儲存在何處。選項如下:

  • Artifact Registry

  • 您自己的私密 Docker 登錄檔。

    如要使用自己的私人登錄檔,請填寫privateRegistry部分。

如要進一步瞭解如何使用私人登錄檔,包括一般叢集和進階叢集之間的差異,請參閱「設定私人容器登錄檔」。

componentAccessServiceAccountKeyPath

Google Distributed Cloud 會使用元件存取服務帳戶,從 Artifact Registry 下載叢集元件。這個欄位會保留元件存取服務帳戶的 JSON 金鑰檔案路徑。

系統已為你填入這個欄位。

gkeConnect

填寫「gkeConnect」部分,將管理員叢集註冊至 Google Cloud 機群。如果您在設定檔中加入 stackdrivercloudAuditLogging 區段,gkeConnect.projectID 中的 ID 必須與 stackdriver.projectIDcloudAuditLogging.projectID 中設定的 ID 相同。如果專案 ID 不同,叢集建立作業就會失敗。

在 1.28 以上版本中,您可以選擇在 gkeConnect.location 中指定 Fleet 和 Connect 服務的執行區域。如果您未加入這個欄位,叢集會使用這些服務的全球執行個體。

如果加入 gkeConnect.location,您指定的區域必須與 cloudAuditLogging.clusterLocationstackdriver.clusterLocationgkeOnPremAPI.location 中設定的區域相同。如果區域不同,叢集建立作業就會失敗。

gkeOnPremAPI

如果專案已啟用 GKE On-Prem API,專案中的所有叢集都會自動註冊 GKE On-Prem API,並使用 stackdriver.clusterLocation 中設定的區域。Google Cloud gkeOnPremAPI.location 區域必須與 cloudAuditLogging.clusterLocationgkeConnect.locationstackdriver.clusterLocation 中指定的區域相同。如果區域不同,叢集建立作業就會失敗。

  • 如要在專案中註冊所有叢集,請務必按照「事前準備」一節中的步驟,在專案中啟用及使用 GKE On-Prem API。

  • 如果不想在 GKE On-Prem API 中註冊叢集,請加入這個區段,並將 gkeOnPremAPI.enabled 設為 false。如果不想在專案中註冊任何叢集,請在專案中停用 gkeonprem.googleapis.com (GKE On-Prem API 的服務名稱)。如需操作說明,請參閱「停用服務」。

stackdriver

如要為叢集啟用 Cloud Logging 和 Cloud Monitoring,請填寫 stackdriver 區段。

系統預設會顯示這個部分。也就是說,如果您未填寫這個部分,執行 gkectl create admin 時就必須加入 --skip-validation-stackdriver 旗標。

請注意下列要求:

  • 如果啟用進階叢集,則必須在 cloudAuditLogging.serviceAccountKeyPathstackdriver.serviceAccountKeyPath 中指定相同路徑。

  • stackdriver.projectID 中的 ID 必須與 gkeConnect.projectIDcloudAuditLogging.projectID 中的 ID 相同。

  • stackdriver.clusterLocation 中設定的 Google Cloud 區域必須與 cloudAuditLogging.clusterLocationgkeConnect.location 中設定的區域相同。此外,如果 gkeOnPremAPI.enabledtrue,則 gkeOnPremAPI.location 必須設為相同區域。

如果專案 ID 和區域不同,叢集建立作業就會失敗。

cloudAuditLogging

如要整合叢集 Kubernetes API 伺服器的稽核記錄與 Cloud 稽核記錄,請填寫cloudAuditLogging部分。

請注意下列要求:

  • 啟用進階叢集時,您必須在 cloudAuditLogging.serviceAccountKeyPathstackdriver.serviceAccountKeyPath 中指定相同路徑。

  • cloudAuditLogging.projectID 中的 ID 必須與 gkeConnect.projectIDstackdriver.projectID 中的 ID 相同。

  • cloudAuditLogging.clusterLocation 中設定的 Google Cloud 區域必須與 stackdriver.clusterLocationgkeConnect.location 中設定的區域相同 (如果設定檔中包含該欄位)。此外,如果 gkeOnPremAPI.enabledtrue,則必須在 gkeOnPremAPI.location 中設定相同區域。

如果專案 ID 和區域不同,叢集建立作業就會失敗。

clusterBackup

如要啟用管理員叢集備份,請將 clusterBackup.datastore 設為要儲存叢集備份的 vSphere 資料儲存庫

如果啟用進階叢集,請移除這個部分。系統不支援將管理員叢集備份至 vSphere 資料存放區。

autoRepair

如要為管理員叢集啟用自動節點修復功能,請將 autoRepair.enabled 設為 true

secretsEncryption

如要啟用永久密碼加密,請填寫secretsEncryption部分。

如果啟用進階叢集,請將 secretsEncryption.enabled 設為 false。 不支援永久密碼加密。

osImageType

決定要用於管理員叢集節點的 OS 映像檔類型,然後相應填寫 osImageType 區段。

如果啟用進階叢集,請將 osImageType 設為 ubuntu_cgroupv2ubuntu_containerd

填寫完畢的設定檔範例

以下是填寫完畢的管理員叢集設定檔範例。這項設定會啟用部分可用功能,但並非全部。

vc-01-admin-cluster.yaml

apiVersion: v1
kind: AdminCluster
name: "gke-admin-01"
bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-1.28.0-gke.1-full.tgz"
vCenter:
  address: "vc01.example"
  datacenter: "vc-01"
  cluster: "vc01-workloads-1"
  resourcePool: "vc-01-pool-1"
  datastore: "vc01-datastore-1"
  caCertPath: "/usr/local/google/home/me/certs/vc01-cert.pem""
  credentials:
    fileRef:
      path: "credential.yaml"
      entry: "vCenter"
network:
  hostConfig:
    dnsServers:
    - "203.0.113.1"
    - "198.51.100.1"
    ntpServers:
    - "216.239.35.4"
  serviceCIDR: "10.96.232.0/24"
  podCIDR: "192.168.0.0/16"
  vCenter:
    networkName: "vc01-net-1"
  controlPlaneIPBlock:
    netmask: "255.255.248.0"
    gateway: "21.0.143.254"
    ips:
    - ip: "21.0.140.226"
      hostname: "admin-cp-vm-1"
    - ip: "21.0.141.48"
      hostname: "admin-cp-vm-2"
    - ip: "21.0.141.65"
      hostname: "admin-cp-vm-3"
loadBalancer:
  vips:
    controlPlaneVIP: "172.16.20.59"
  kind: "MetalLB"
antiAffinityGroups:
  enabled: true
adminMaster:
  cpus: 4
  memoryMB: 16384
  replicas: 3
componentAccessServiceAccountKeyPath: "sa-key.json"
gkeConnect:
  projectID: "my-project-123"
  registerServiceAccountKeyPath: "connect-register-sa-2203040617.json"
stackdriver:
  projectID: "my-project-123"
  clusterLocation: "us-central1"
  enableVPC: false
  serviceAccountKeyPath: "log-mon-sa-2203040617.json"
  disableVsphereResourceMetrics: false
clusterBackup:
  datastore: "vc-01-datastore-bu"
autoRepair:
  enabled: true
osImageType: "ubuntu_containerd"

驗證設定檔

填寫管理員叢集設定檔後,請執行 gkectl check-config,確認檔案有效:

gkectl check-config --config ADMIN_CLUSTER_CONFIG

請將 ADMIN_CLUSTER_CONFIG 替換為管理員叢集設定檔的路徑。

如果指令傳回任何失敗訊息,請修正問題並再次驗證檔案。

如要略過耗時的驗證,請傳遞 --fast 旗標。 如要略過個別驗證,請使用 --skip-validation-yyy 標記。如要進一步瞭解 check-config 指令,請參閱「執行預檢」。

取得 OS 映像檔

執行 gkectl prepare 初始化 vSphere 環境:

gkectl prepare --config ADMIN_CLUSTER_CONFIG

gkectl prepare 指令會執行下列準備工作:

  • 將 OS 映像檔匯入 vSphere,並標示為 VM 範本。

  • 如果您使用私人 Docker 登錄檔,請將容器映像檔推送至登錄檔。

  • (選用) 驗證容器映像檔的建構認證,確認映像檔是由 Google 建構及簽署,且已準備好部署。

如果您已將 bundlePath 設定為使用完整套件,gkectl prepare 會使用套件中包含的 OS 和容器映像檔,因此不需要從外部網路下載。建議用於 Proxy 速度緩慢或網際網路存取受限的環境。詳情請參閱「關於 Google Distributed Cloud 套裝組合」。

建立管理員叢集

建立管理員叢集:

gkectl create admin --config ADMIN_CLUSTER_CONFIG

如果您使用 VPC Service Controls,執行部分 gkectl 指令 (例如 "Validation Category: GCP - [UNKNOWN] GCP service: [Stackdriver] could not get GCP services") 時可能會看到錯誤。如要避免發生這些錯誤,請在指令中加入 --skip-validation-gcp 參數。

在失敗後繼續建立管理員叢集

如果管理員叢集建立失敗或取消,可以再次執行 create 指令:

gkectl create admin --config ADMIN_CLUSTER_CONFIG

找出管理員叢集 kubeconfig 檔案

gkectl create admin 指令會在目前目錄中建立名為 kubeconfig 的 kubeconfig 檔案。您稍後需要這個 kubeconfig 檔案,才能與管理員叢集互動。

kubeconfig 檔案包含管理員叢集的名稱。如要查看叢集名稱,可以執行下列指令:

kubectl config get-clusters --kubeconfig ADMIN_CLUSTER_KUBECONFIG

輸出內容會顯示叢集名稱。例如:

NAME
gke-admin-tqk8x

您可以視需要變更 kubeconfig 檔案的名稱和位置。

管理 checkpoint.yaml 檔案

本節內容僅適用於非 HA 管理員叢集。建立高可用性管理員叢集時,不會使用 checkpoint.yaml 檔案。

執行 gkectl create admin 指令建立管理員叢集時,系統會在與管理員叢集資料磁碟相同的資料存放區資料夾中,建立查核點檔案。根據預設,這個檔案的名稱為 DATA_DISK_NAME‑checkpoint.yaml。如果 DATA_DISK_NAME 的長度大於或等於 245 個字元,則由於 vSphere 對檔案名稱長度的限制,名稱會是 DATA_DISK_NAME.yaml

這個檔案包含管理員叢集狀態和憑證,用於日後升級。除非您按照刪除管理員叢集的程序操作,否則請勿刪除這個檔案。

如果您已在 vCenter Server 執行個體中啟用 VM 加密功能,則必須具備「Cryptographic operations.Direct Access」權限,才能建立或升級管理員叢集。否則系統不會上傳查核點。如果無法取得這項權限,您可以在執行相關指令時使用隱藏旗標 --disable-checkpoint,停用檢查點檔案上傳功能。

執行 gkectl upgrade admin 指令或影響管理員叢集的 gkectl update 指令時,系統會自動更新 checkpoint.yaml 檔案。

確認管理員叢集正在執行中

確認管理員叢集正在執行中:

kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG

請將 ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 檔案的路徑。

輸出內容會顯示管理員叢集節點。例如:

admin-cp-vm-1   Ready    control-plane,master   ...
admin-cp-vm-2   Ready    control-plane,master   ...
admin-cp-vm-3   Ready    control-plane,master   ...

備份檔案

建議您備份管理員叢集 kubeconfig 檔案。也就是將 kubeconfig 檔案從管理員工作站複製到其他位置。這樣一來,即使您無法存取管理工作站,或是管理工作站上的 kubeconfig 檔案遭到誤刪,您仍可存取管理叢集。

我們也建議您備份管理員叢的私密 SSH 金鑰。 這樣一來,即使無法存取管理員叢集,您還是可以使用 SSH 連線至管理員叢集節點。方便您排解及調查管理員叢集的連線問題。

將管理員叢集中的 SSH 金鑰擷取至名為 admin-cluster-ssh-key 的檔案:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secrets -n kube-system sshkeys \
    -o jsonpath='{.data.vsphere_tmp}' | base64 -d > admin-cluster-ssh-key

現在你可以將 admin-cluster-ssh-key 備份到所選的其他位置。

RBAC 政策

在管理叢集設定檔中填寫「gkeConnect」部分時,叢集會在建立或更新期間註冊至機群。如要啟用機群管理功能, Google Cloud 會部署連線代理程式,並建立代表叢集註冊專案的 Google 服務帳戶。Connect 代理程式會與服務帳戶建立連線,處理對叢集 Kubernetes API 伺服器的要求。連線後即可在 Google Cloud中使用叢集和工作負載管理功能,包括存取 Google Cloud 控制台,與叢集互動。

管理員叢集的 Kubernetes API 伺服器必須能夠授權來自 Connect 代理程式的要求。為確保這一點,服務帳戶會設定下列角色型存取權控管 (RBAC) 政策

  • 模擬政策:授權 Connect 代理程式代表服務帳戶,將要求傳送至 Kubernetes API 伺服器。

  • 權限政策,指定可對其他 Kubernetes 資源執行的作業。

您需要服務帳戶和 RBAC 政策,才能在 Google Cloud 控制台中管理使用者叢集的生命週期。