正在執行預檢

本文提供相關資訊,說明在 Google Distributed Cloud (僅限軟體) for VMware 中建立或升級叢集時執行的預檢。

檢查防火牆規則

在 1.29 以上版本中,建立、更新及升級叢集時,系統預設會啟用伺服器端預檢。伺服器端預檢需要額外的防火牆規則。在「管理員叢集適用的防火牆規則」中,搜尋「Preflight checks」,並確認已設定所有必要的防火牆規則。

正在執行「gkectl check-config

如果您打算使用 gkectl 建立叢集,請執行 gkectl create-config 來產生設定檔。設定檔會驅動安裝程序:您提供 vSphere 環境、網路和負載平衡器,以及叢集外觀的相關資訊。您可以在建立管理員工作站之前或之後產生設定檔。如要通過特定檢查,必須從管理員工作站執行檢查。

修改檔案以符合環境和叢集需求後,您可以使用該檔案在內部部署環境中建立叢集。

使用 gkectl 建立叢集前,請先執行 gkectl check-config,透過多項預檢驗證設定檔。如果指令傳回任何 FAILURE 訊息,請修正問題並再次驗證檔案。如果特定功能驗證傳回任何 WARNING 訊息,您必須先修正基本問題,才能使用該功能。

預檢模式和略過驗證

gkectl check-config 具有預設模式和快速模式:

  • 在預設模式下,指令會全面驗證每個欄位。此外,預設模式會在驗證期間建立臨時 vSphere 虛擬機器 (VM),因此可能需要較長時間。

  • 在快速模式中,指令會略過建立測試 VM 的檢查,只執行快速檢查。傳遞 --fast 旗標即可啟用快速模式。

您可以傳遞其他旗標來略過特定驗證,詳情請參閱 gkectl check-config --help

管理工作站與測試 VM 之間的流量

在預設模式下,預檢會為叢集建立測試 VM。每個測試 VM 都會執行 HTTP 伺服器,監聽通訊埠 443 和您在設定檔中指定的節點通訊埠。

系統會為測試 VM 指派多個 IP 位址。如果設定檔指出叢集節點會從 DHCP 伺服器取得 IP 位址,預檢作業就會使用 DHCP 伺服器將 IP 位址指派給測試 VM。如果設定檔指出叢集節點將指派靜態 IP 位址,前置檢查會將您在 IP 區塊檔案中指定的靜態 IP 位址指派給測試 VM。

在管理工作站上執行的預檢會使用指派給 VM 的各種 IP 位址,將 HTTP 要求傳送至測試 VM。要求會傳送至通訊埠 443,以及您在設定檔中指定的節點通訊埠。

何時該執行預檢檢查?

建議您盡早執行預檢檢查,再嘗試建立叢集。提早執行預檢檢查,有助於確認您已正確設定 vSphere 環境和網路。

如果您使用 1.2.0-gke.6 版,請執行 gkectl check-config 兩次:

  1. 執行 gkectl check-config --fast

  2. 執行 gkectl prepare

  3. 再次執行 gkectl check-config,這次不要使用 --fast 旗標。

執行兩次的原因是 gkectl prepare 會將叢集節點 OS 映像檔的 VM 範本上傳至 vSphere 環境。您必須先準備好該 VM 範本,才能執行整套驗證。

在 1.2.1 以上版本中,check-config 指令本身會上傳 VM 範本,因此您可以在執行 gkectl prepare 之前,先執行整套驗證:

  1. 執行 gkectl check-config,不使用 --fast 旗標。

  2. 執行 gkectl prepare

預檢會驗證您提供給檔案的值。您不必填寫設定檔中的每個欄位,即可對檔案執行前置檢查;事實上,您可以在填寫檔案欄位時,反覆驗證檔案。舉例來說,如果您只想驗證 vCenter 設定,可以只填寫 vcenter 欄位,並針對這些欄位執行檢查。

請注意,建立叢集後,設定就無法變更。執行事前檢查有助於在建立叢集前,找出並解決設定中的問題。

保留測試 VM 以進行偵錯

從 1.2.1 版開始,gkectl check-config 指令會包含 --cleanup 標記。

gkectl check-config 執行完整驗證時,會建立測試 VM 和相關聯的 SSH 金鑰。如要保留測試 VM 和 SSH 金鑰以進行偵錯,請將 --cleanup 設為 false。

--cleanup 的預設值為 true。

預檢檢查清單

預檢會驗證設定檔中的每個欄位。目前檢查項目如下:

類別 說明
設定檔

一般而言,這項驗證會確認每個欄位和規格都具有預期格式和值。

使用 --skip-validation-config 旗標略過。

使用 --skip-validation-proxy 旗標略過 proxy 欄位驗證。

網際網路

驗證是否可連上必要網域。根據您執行 gkectl 的位置驗證 Proxy 設定。

使用 --skip-validation-internet 旗標略過。

OS 映像檔

驗證作業系統映像檔是否存在。

使用 --skip-validation-os-images 旗標略過。

Windows 作業系統版本

驗證 Windows OS 版本。

使用指令列工具 gkeadm 建立管理工作站時,驗證 Windows 版本是否受支援。請注意,雖然 gkeadm 工具適用於 Windows 10、Windows Server 2019 和 Linux,但 Linux 沒有預檢功能。這項驗證從 1.4.1 版開始。

叢集版本

驗證管理員叢集版本、使用者叢集版本和 gkectl 版本是否相符,以利建立及升級。

使用 --skip-validation-cluster-version 旗標略過。

叢集健康狀態

升級前,請先驗證管理員或使用者叢集是否正常運作:

  • 管理員叢集:檢查項目包括 Kubernetes 服務、元件狀態、DaemonSet、部署作業、機器和 Pod。
  • 使用者叢集:檢查項目包括 Kubernetes 服務、叢集 API 端點、StatefulSet、部署作業、機器部署作業、機器和 Pod。

使用 --skip-validation-cluster-health 旗標略過。

Ingress 檢查使用者叢集是否含有 Istio Gateway 物件,再進行升級。
保留的 IP

驗證是否有足夠的 IP 位址可供建立及升級。

使用 --skip-validation-reserved-ips 旗標略過。

Google Cloud
專案 ID
[*].projectid
驗證設定中各個欄位提供的專案 ID。如果缺少專案 ID,系統會略過驗證。
註冊服務帳戶
registerserviceaccountkeypath
驗證服務帳戶是否具備必要的 IAM 角色。驗證必要的 API 是否已啟用。
連結服務帳戶
agentserviceaccountkeypath
驗證服務帳戶是否具備必要的 IAM 角色。驗證必要的 API 是否已啟用。
Google Cloud Observability 服務帳戶
stackdriver.serviceaccountkeypath
驗證服務帳戶是否具備必要的 IAM 角色。驗證必要的 API 是否已啟用。
使用 --skip-validation-gcp 旗標略過。
使用 gcr.io/gke-on-prem-release 驗證對 Artifact Registry 中託管的容器映像檔登錄檔的存取權。

--skip-validation-docker 旗標略過。

Docker 登錄檔
privateregistryconfig
如果已設定,則驗證 Docker 登錄檔的存取權。

使用 --skip-validation-docker 旗標略過。

vCenter 檢查所有 vcenter 欄位是否都存在,並檢查下列項目:
憑證
vcenter.credentials.[*]
使用提供的使用者憑證驗證 vCenter Server 的驗證。
vSphere 版本 驗證vCenter 和 ESXi 版本是否受支援。
資料中心
vcenter.datacenter
驗證 vSphere 資料中心是否存在。
Datastore
vcenter.datastore
驗證 vSphere 資料儲存庫是否存在。
資料磁碟
vcenter.datadisk
驗證 vSphere 中是否已有 vSphere 虛擬機器磁碟 (VMDK)。
資源集區
vcenter.resourcepool
驗證 vSphere 資源集區是否存在。
網路
vcenter.network
驗證 vSphere 網路是否存在。

使用 --skip-validation-infra 旗標略過。

儲存空間
vSphere CSI 驅動程式 如果存在內建或 CSI vSphere 持久磁碟區,則驗證是否已啟用 vSphere CSI 驅動程式。也就是說,在使用者叢集設定檔中,storage.vSphereCSIDisabled 未設為 true
StorageClass 參數

驗證 StorageClass 是否有下列任何不支援的參數:

  • hostfailurestotolerate
  • forceprovisioning
  • cachereservation
  • diskstripes
  • objectspacereservation
  • iopslimit
  • diskformat

如果叢集的 StorageClass 包含上述任何參數,可能表示您需要遷移磁碟區。

詳情請參閱「Considerations for Migration of In-Tree vSphere Volumes」和「known issues section about upgrades in 1.15」。

靜態建立的 vSphere 樹內 PersistentVolume 和 PersistentVolumeClaim 中的註解

升級前,系統會檢查 vSphere 樹內 PersistentVolume 和 vSphere PersistentVolumeClaim 中的註解:

  • 靜態建立的 vSphere 樹內 PersistentVolume 具有 pv.kubernetes.io/provisioned-by: kubernetes.io/vsphere-volume 註解
  • 靜態建立的 vSphere PersistentVolumesClaims 具有 volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/vsphere-volumevolume.kubernetes.io/storage-provisioner: kubernetes.io/vsphere-volume 註解

如果叢集有 vSphere 樹內 PersistentVolume 或沒有這些註解的 vSphere PersistentVolumeClaim,您必須先註解 PersistentVolume 和 PersistentVolumeClaim,才能繼續操作。詳情請參閱「遷移樹內 vSphere 磁碟區的注意事項」。

CSI 工作負載

驗證叢集是否能順利執行工作負載,該工作負載使用透過 vSphere CSI 驅動程式建立的動態佈建 PersistentVolume。

這項檢查會在升級期間執行,且僅限於有樹內 vSphere 磁碟區,但沒有 vSphere CSI 磁碟區的情況。

這項檢查:

  1. 檢查先前執行驗證時是否留下任何資源。
  2. 尋找或建立佈建工具欄位設為「csi.vsphere.vmware.com」的 StorageClass。
    1. 在使用者叢集中,系統會選取 CSI StorageClass standard-rwo
    2. 在管理員叢集中,系統會尋找佈建工具欄位設為 csi.vsphere.vmware.com 的 StorageClass。 如果叢集中沒有這類 StorageClass,測試會暫時建立新的 CSI StorageClass,並在檢查中使用。
  3. 使用上一步中找到或建立的 StorageClass,在預設命名空間中建立 PersistentVolumeClaim,並等待動態建立的 PersistentVolume 進入 Bound 階段。
  4. 在預設命名空間中建立寫入器 Job,並掛接上述建立的 PersistentVolume。系統會排定寫入器 Pod 的時間,並在啟動時將字串寫入掛接檔案系統中的檔案。
  5. 終止寫入者 Job 和相關聯的 Pod。
  6. 在預設命名空間中建立讀取器 Job,並掛接上述建立的 PersistentVolume。系統會排定讀取者 Pod 的時間,並在啟動時讀取寫入者 Pod 寫入的檔案,確保寫入者 Pod 寫入的資料能順利讀取。
  7. 終止讀取者 Job 和相關聯的 Pod。
  8. 拆除 PersistentVolumeClaim,因此 PersistentVolume 也會遭到刪除。
  9. 如果 StorageClass 是在測試期間建立,則會將其拆除。

反相依性群組的主機

如果已啟用 antiAffinityGroups,則驗證實體 vCenter 主機數量是否至少為三部。

如要為叢集停用 antiAffinityGroups,請參閱antiAffinityGroups.enabled和這篇版本資訊

使用 --skip-validation-infra 旗標略過。

負載平衡器

驗證負載平衡設定:

  • 如果整合了負載平衡模式 (lbmode: Integrated),則會驗證所有 bigip 欄位是否都存在於 adminclusterusercluster 規格中。
  • 如果負載平衡模式為手動 (lbmode: Manual),請確認 adminclusterusercluster 規格中是否包含所有 manuallbspec 欄位。
整合式負載平衡
bigip.credentials.[*] 驗證 F5 BIG-IP 憑證。
bigip.partition 驗證提供的分割區是否存在。
F5 BIG-IP 使用者角色 驗證提供的 F5 BIG-IP 使用者是否具備管理員或資源管理員角色。
bigip.vips.[*] 驗證提供的 VIP。

使用 --fast--skip-validation-load-balancer 旗標略過。

手動平衡負載
網路設定 驗證 VIP、節點 IP 等。

使用 --fast--skip-validation-load-balancer 旗標略過。

[*].manuallbspec.[*] 驗證提供的節點通訊埠。
使用 --skip-validation-load-balancer 旗標略過。
網路

驗證提供的 CIDR 範圍、VIP 和靜態 IP (如有設定) 是否可用。檢查 IP 位址是否重疊。

使用 --skip-validation-net-config 旗標略過。

DNS

驗證提供的 DNS 伺服器是否可用。

使用 --skip-validation-dns 旗標略過。

NTP

驗證提供的網路時間通訊協定 (NTP) 伺服器是否可用。

使用 --skip-validation-tod 旗標略過。

VIP

對提供的 VIP 執行連線偵測 (ping)。如果連線偵測 (ping) 失敗,表示預期的 VIP 尚未被佔用,因此這項檢查會成功。

使用 --skip-validation-vips 旗標略過。

節點 IP

對提供的節點 IP 位址執行連線偵測 (ping)。如果連線偵測 (ping) 失敗,表示預期的節點 IP 尚未被佔用,這項檢查就會成功。

使用 --skip-validation-node-ips 旗標略過。

預檢結果

預檢可能會傳回下列結果:

成功
欄位及其值通過檢查。
失敗
欄位和/或欄位值未通過檢查。如果檢查傳回 FAILURE 訊息,請修正問題並再次驗證檔案。
略過數

系統略過檢查,可能是因為檢查與您的設定無關。舉例來說,如果您使用 DHCP 伺服器,系統會略過 DNS 和節點 IP 檢查 (僅適用於靜態 IP 設定)。

如果您傳遞的旗標會略過驗證,略過的檢查不會傳回 SKIPPED 結果,而是不會執行驗證,也不會顯示在指令輸出內容中。

不明

略過作業傳回非零代碼。您可以將 UNKNOWN 結果視為檢查失敗。UNKNOWN 通常表示檢查無法執行某些系統套件,例如無法執行 nslookup 或 gcloud。

即將推出

我們會在日後推出的版本中新增下列前置檢查:

  • NTP 伺服器

執行預檢檢查

執行下列指令即可執行前置檢查:

gkectl check-config --config [CONFIG]

其中 [CONFIG] 是指設定檔的路徑

以快速模式執行

您也可以選擇以「快速模式」執行前置檢查,略過會建立暫時性測試 VM 的驗證,例如負載平衡 VIP 和節點 IP 驗證。如要這麼做,請傳入 --fast

gkectl check-config --config [CONFIG] --fast

略過特定驗證

您可以傳遞旗標,以細部略過特定驗證,例如 DNS、Proxy 和網路。每個略過標記都會加上 --skip-[VALIDATION] 前置字元。

如要瞭解可用的略過標記,請執行下列指令:

gkectl check-config --help

舉例來說,如要略過負載平衡器驗證,請執行下列指令:

gkectl check-config --config my-config.yaml --skip-validation-load-balancer 

取消預檢

如果已開始執行前置檢查,但想取消,請按兩次 CTRL + C 鍵。如果預檢建立的測試 VM,取消作業時也應自動清除 VM。

清除測試 VM

如果預檢完成後仍有測試 VM,您可以從 vCenter 刪除該 VM。測試 VM 的名稱如下:

check-config-[dhcp|static]-[random number]

如要刪除 VM:

  1. 在 VM 上按一下滑鼠右鍵,然後依序點選「電源」 >「關機」

  2. VM 關機後,再次按一下滑鼠右鍵,然後按一下「Delete from Disk」

範例

以下是指令的輸出範例。在本範例中,要驗證的設定使用整合式負載平衡模式和靜態 IP,且沒有外部 Docker 登錄檔:

- Validation Category: Config Check
    - [SUCCESS] Config

- Validation Category: Internet Access
    - [SUCCESS] Internet access to required domains

- Validation Category: GCP
    - [SUCCESS] GCP Service
    - [SUCCESS] GCP Service Account

- Validation Category: Docker Registry
    - [SUCCESS] gcr.io/gke-on-prem-release access

- Validation Category: vCenter
    - [SUCCESS] Credentials
    - [SUCCESS] Version
    - [SUCCESS] Datacenter
    - [SUCCESS] Datastore
    - [SUCCESS] Data Disk
    - [SUCCESS] Resource Pool
    - [SUCCESS] Network
    - [SUCCESS] VSphere CSI Driver

- Validation Category: F5 BIG-IP
    - [SUCCESS] Admin Cluster F5 (credentials, partition and user role)
    - [SUCCESS] User Cluster F5 (credentials, partition and user role)

- Validation Category: Network Configuration
    - [SUCCESS] CIDR, VIP and static IP (availability and overlapping)

- Validation Category: DNS
    - [SUCCESS] DNS (availability)

- Validation Category: VIPs
    - [SUCCESS] ping (availability)

- Validation Category: Node IPs
    - [SUCCESS] ping (availability)

Now running slow validation checks. ...

Reusing VM template "gke-on-prem-osimage-xxx" that already exists in vSphere.
Creating test VMs with admin cluster configuration...  DONE
Waiting to get IP addresses from test VMs...  DONE
Waiting for test VMs to become ready...  DONE

Reusing VM template "gke-on-prem-osimage-xxx" that already exists in vSphere.
Creating test VMs with user cluster configuration...  DONE
Waiting to get IP addresses from test VMs...  DONE
Waiting for test VMs to become ready...  DONE

- Validation Category: F5 BIG-IP
    - [SUCCESS] Admin Cluster VIP and NodeIP
    - [SUCCESS] Admin Cluster F5 Access
    - [SUCCESS] User Cluster VIP and NodeIP
    - [SUCCESS] User Cluster F5 Access

- Validation Category: Internet Access
    - [SUCCESS] Internet access to required domains

- Validation Category: vCenter on test VMs
    - [SUCCESS] Test VM: VCenter Access and Permission

- Validation Category: DNS on test VMs
    - [SUCCESS] Test VM: DNS Availability

- Validation Category: TOD on test VMs
    - [SUCCESS] Test VM: TOD Availability

- Validation Category: Docker Registry
    - [SUCCESS] gcr.io/gke-on-prem-release access

Deleting test VMs with admin cluster configuration...  DONE
Deleting test VMs with user cluster configuration...  DONE

已知問題

  • 如果是 1.3.0-gke.16 版:

    如果符合下列兩項條件,您必須執行快速驗證檢查 gkectl check-config --fast,進行預檢:

    1. 您已將 Google Distributed Cloud 設為使用 Proxy。

    2. 您已安裝下列其中一個套件組合:

      • 「下載」頁面中的/var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16.tgz 套裝組合。
      • 管理員工作站的 /var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16.tgz 套件。

    只有在安裝完整套件後,才能執行完整驗證。例如:/var/lib/gke/bundles/gke-onprem-vsphere-1.3.0-gke.16-full.tgz

  • 適用於 1.2.0-gke.6 版:

    如果您使用巢狀資源集區或預設資源集區,嘗試進行完整驗證時,gkectl check-config 會失敗。不過,您可以傳遞 --fast 標記,進行較小範圍的驗證。

    gkectl check-config --config [CONFIG] --fast

後續步驟