預檢

預檢可讓您在執行建立或升級叢集等重大叢集作業前,找出問題。在作業前自動執行檢查時,Google Distributed Cloud 會封鎖叢集修改作業,直到所有驗證通過為止。您也可以視需要執行檢查,或在叢集管理工作流程中略過檢查。

當您使用 bmctl 建立或升級叢集和節點集區時,Google Distributed Cloud 會執行這些驗證。管理員或混合式叢集更新使用者叢集上的資源時,系統也會執行內部檢查。如有任何檢查失敗,叢集就不會套用任何變更。

PreflightCheck 項自訂資源

執行預檢時,Google Distributed Cloud 會建立 PreflightCheck 自訂資源。PreflightCheck 自訂資源是永久性的,可提供預檢活動和結果的記錄。

如要擷取 PreflightCheck 自訂資源,請按照下列步驟操作:

  1. 取得特定叢集已執行的預檢清單:

    kubectl get preflightchecks --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    更改下列內容:

    • ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。
    • CLUSTER_NAMESPACE:叢集的命名空間。

    回應會依命名空間列出資源。您可以對所有命名空間執行 kubectl get preflightchecks,取得完整清單。回應會顯示每項資源的使用時間,以及是否通過預檢。以下範例回應顯示 cluster-test-admin001 命名空間的 PreflightCheck 資源。

    NAMESPACE              NAME                                PASS    AGE
    cluster-test-admin001   test-admin001                      true    52d
    cluster-test-admin001   test-admin001jkm4q                 true    52d
    cluster-test-admin001   test-admin001k79t7                 true    6d20h
    cluster-test-admin001   upgrade-cluster-20231106-222746    true    6d20h
    
  2. 擷取特定 PreflightCheck 自訂資源的詳細資料:

    kubectl describe preflightchecks --kubeconfig ADMIN_KUBECONFIG --namespace CLUSTER_NAMESPACE
    

    更改下列內容:

    • ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。
    • CLUSTER_NAMESPACE:叢集的命名空間。

    下列指令回應範例顯示 PreflightCheck 資源,代表在建立叢集時執行的預檢作業成功:

    Name:         create-cluster-20230922-175006
    Namespace:    cluster-test-user001
    Labels:       <none>
    Annotations:  <none>
    API Version:  baremetal.cluster.gke.io/v1
    Kind:         PreflightCheck
    Metadata:
      Creation Timestamp:  2023-09-22T17:50:11Z
      Generation:          1
      Resource Version:    6502800
      UID:                 917daf64-963d-44b4-a1f9-c54972a39191
    Spec:
      Check Image Version:  latest
      Config YAML:          ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-test-user
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: test-user001
      namespace: cluster-test-user001
    spec:
      type: user
      profile: default
      anthosBareMetalVersion: 1.16.0
      gkeConnect:
        projectID: clusters-project
      controlPlane:
        nodePoolSpec:
          nodes:
          - address: 192.0.2.53
      ...
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: node-pool-1
      namespace: cluster-test-user001
    spec:
      clusterName: test-user001
      nodes:
      - address: 192.0.2.54
      ...
    Status:
      Checks:
        192.0.2.53:
          Job UID:  d0b5dc1f-9d39-4cc8-b3d2-0841212f7f8c
          Message:  
          Pass:     true
        192.0.2.53-gcp:
          Job UID:  b4d96ce5-0d4e-4e3c-97db-6317e0c15fc8
          Message:  
          Pass:     true
        192.0.2.54:
          Job UID:  b67cf195-3951-46ad-b91c-0d79025cfc0a
          Message:  
          Pass:     true
        192.0.2.54-gcp:
          Job UID:  aed509e2-4bf7-44c4-bfa0-8147ef8ea74e
          Message:  
          Pass:     true
        Gcp:
          Job UID:  ac479ac4-e1c4-4681-9f2b-5773069bf6ae
          Message:  
          Pass:     true
        Node - Network:
          Job UID:  8a57c4ee-ad17-4560-8809-b117c871ad5d
          Message:  
          Pass:     true
        Pod - Cidr:
          Message:  
          Pass:     true
      Cluster Spec:
        Anthos Bare Metal Version:  1.16.0
        Bypass Preflight Check:     false
        Cluster Network:
          Bundled Ingress:  true
          Pods:
            Cidr Blocks:
              10.0.0.0/16
          Services:
            Cidr Blocks:
              10.96.0.0/20
      ...
      Completion Time:                 2023-09-22T17:51:22Z
      Conditions:
        Last Transition Time:  2023-10-02T23:59:06Z
        Observed Generation:   1
        Reason:                Reconciling
        Status:                True
        Type:                  Reconciling
      Node Pool Specs:
        node-pool-1:
          Cluster Name:  test-user001
          Nodes:
            Address:         192.0.2.54
        ...
      Pass:                  true
      Start Time:            2023-09-22T17:50:32Z
    Events:                  <none>
    

    在上述 PreflightCheck 自訂資源中,Status 區段包含下列資訊:

    • Checks 區段會列出已執行的個別預檢,以及是否通過。在這個範例中,系統執行了下列檢查:
      • 192.0.2.53 和 192.0.2.54:IP 位址為 192.0.2.53 和 192.0.2.54 的機器節點檢查 (OS 設定、資源和軟體設定)。
      • 192.0.2.53-gpc 和 192.0.2.54-gcp: Google Cloud IP 位址為 192.0.2.53 和 192.0.2.54 的機器連線能力檢查 (Artifact Registry 和 Google API 存取權)。
      • Gcp: Google Cloud 叢集的連線能力檢查。
      • Node - Network:叢集的網路檢查 (連線能力、etcd 作業、VIP 存取權和通訊埠繫結)。
      • Pod - Cidr:Pod IP 位址檢查,確認叢集是否有重疊的位址。
    • Cluster Spec 區段會顯示叢集設定。
    • Pass 欄位會顯示 true,表示預檢作業已全部通過。

預檢記錄

如果預檢是由 bmctl 指令 (例如 bmctl check preflight) 觸發,Google Distributed Cloud 會建立記錄檔。以下是生成內容和位置:

  • 系統會在目錄中產生預檢記錄,命名模式如下:preflight-TIMESTAMP。

  • 這個預檢目錄是在 bmctl 工作區中叢集的 log 目錄中建立。根據預設,log 目錄路徑為 bmctl-workspace/CLUSTER_NAME/log。

  • 預檢記錄包含下列檔案:

    • 節點機器檢查的記錄檔,每個叢集節點各有一個。這些記錄檔會以節點的 IP 位址命名。例如,檔案名稱可能是 192.0.2.53。

    • Google Cloud 存取權檢查的記錄檔,每個叢集節點各一個。這些記錄檔會以節點的 IP 位址命名。例如,檔案名稱可能是 192.0.2.53-gcp。

    • 叢集 Google Cloud 存取權檢查的記錄檔,名為 gcp。

    • 節點網路檢查的記錄檔,名為 node-network。

如果預檢失敗,這些記錄檔可協助您找出問題並排解。

叢集建立作業的預檢

建立叢集時,Google Distributed Cloud 會在進行任何變更前,自動執行預檢。

檢查項目

安裝作業預檢會檢查下列項目:

  • 節點機器檢查:

    • 叢集機器使用支援的作業系統 (OS)。

    • 支援 OS 版本。

    • OS 使用支援的核心版本。

    • 節點機器已設為使用 cgroupsv2。如果偵測到
      cgroupsv1,檢查就會失敗。

    • 如果是 Ubuntu,則會停用 Uncomplicated Firewall (UFW)。

    • 如果是 Ubuntu,套件管理員 apt 可運作,且有必要的套件。

    • 如果是 Red Hat Enterprise Linux,套件管理員 dnf 可運作,且有必要的套件。

    • Red Hat Enterprise Linux 未安裝 Podman。

    • 節點機器符合最低 CPU 需求。

    • 節點機器符合最低記憶體需求。

    • 節點機器符合最低磁碟儲存空間需求。

    • 時間同步功能是在節點機器上設定。

    • kubelet 已啟用,並在節點機器上執行。

    • containerd 已啟用,並在節點機器上執行。

    • 節點中存在將封包轉送至預設閘道的預設路徑。

    • 網域名稱系統 (DNS) 運作正常。如果叢集設為在 Proxy 後方執行,系統會略過這項檢查。

    • Pod CIDR 不會與節點機器 IP 位址重疊。

    • 如果叢集設為使用登錄檔鏡像,則可連上登錄檔鏡像。

  • Google Cloud 檢查每個節點和叢集:

    • 系統會檢查 Artifact Registry gcr.io 的連線能力。如果叢集已設為使用登錄檔鏡像,系統會略過這項檢查。

    • 可連線至 Google API。

  • 節點網路檢查 (因負載平衡設定而異):

    • Kubernetes API 伺服器的 VIP 可供存取。

    • 可存取負載平衡器 VIP。

    • 節點可以透過必要通訊埠通訊。

    • etcd 事件執行個體已佈建,且符合通訊埠需求。

所有檢查都通過後,Google Distributed Cloud 就會建立叢集。如要進一步瞭解建立叢集的相關規定,請參閱「安裝必要條件總覽」。

視需要執行叢集建立預檢

您也可以在建立叢集前,獨立執行預檢。這麼做可能會有幫助,因為建立叢集等主要叢集作業相當耗時。在開始執行主要叢集作業前,先個別找出並解決問題,可能有助於安排排程。

自行管理的叢集

  • 下列指令會驗證指定的叢集設定檔,但不會嘗試建立叢集本身:

    bmctl check config --cluster CLUSTER_NAME
    

    將 CLUSTER_NAME 替換為與您要檢查的設定檔相關聯的叢集名稱。

  • 這個指令會檢查機器和網路是否已準備好建立叢集:

    bmctl check preflight --cluster CLUSTER_NAME
    

    將 CLUSTER_NAME 替換為要檢查的叢集名稱。

使用者叢集

  • 下列指令會驗證指定的叢集設定檔,但不會嘗試建立叢集本身:

    bmctl check config --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG
    

    更改下列內容:

    • CLUSTER_NAME:要檢查的使用者叢集名稱。
    • ADMIN_KUBECONFIG:相關聯管理員叢集 kubeconfig 檔案的路徑。
  • 下列指令會檢查機器和網路是否已準備好建立叢集:

    bmctl check preflight --cluster CLUSTER_NAME --admin-kubeconfig ADMIN_KUBECONFIG
    

bmctl 支援使用 --kubeconfig 做為 --admin-kubeconfig 旗標的別名。

叢集升級預檢

升級叢集時,Google Distributed Cloud 會在進行任何變更前,自動執行預檢。

檢查項目

叢集升級預檢會檢查下列項目:

  • 節點機器檢查:

    • 叢集機器使用支援的作業系統 (OS)。

    • 支援 OS 版本。

    • OS 使用支援的核心版本。

    • 節點機器已設為使用 cgroupsv2。如果偵測到 cgroupsv1,檢查就會失敗。

    • 如果是 Ubuntu,則會停用 Uncomplicated Firewall (UFW)。

    • 節點機器符合最低 CPU 需求。

    • 節點機器有超過 20% 的 CPU 資源可用。

    • 節點機器符合最低記憶體需求。

    • 節點機器符合最低磁碟儲存空間需求。

    • 時間同步功能是在節點機器上設定。

    • 節點中存在將封包轉送至預設閘道的預設路徑。

    • 網域名稱系統 (DNS) 運作正常。如果叢集設為在 Proxy 後方執行,系統會略過這項檢查。

    • 如果叢集設為使用登錄檔鏡像,則可連上登錄檔鏡像。

    • 沒有任何控制層節點或負載平衡器節點處於維護模式。
  • Google Cloud 檢查每個節點和叢集:

    • 系統會檢查 Artifact Registry gcr.io 的連線能力。如果叢集已設為使用登錄檔鏡像,系統會略過這項檢查。

    • 可連線至 Google API。

  • 機器檢查:

    • kubelet 已啟用,並在節點機器上執行。

    • containerd 已啟用,並在節點機器上執行。

    • 容器網路介面 (CNI) 健康狀態端點為良好。

    • Pod CIDR 不會與節點機器 IP 位址重疊。

    • kubeadm 個憑證尚未過期。
  • 節點網路檢查 (因負載平衡設定而異):

    • Kubernetes API 伺服器的 VIP 可供存取。

    • 可存取負載平衡器 VIP。

    • 節點可以透過必要通訊埠通訊。

    • etcd 事件執行個體已佈建,且符合通訊埠需求。

通過所有檢查後,Google Distributed Cloud 就會升級叢集。如要進一步瞭解如何升級叢集,請參閱「Google Distributed Cloud 叢集升級的最佳做法」和「叢集升級的生命週期和階段」。

視需要執行叢集升級預檢

bmctl check preflight 指令可讓您在升級叢集前執行預檢。在開始升級前,您可以執行下列預檢指令,確認叢集是否已準備好升級:

  1. 在叢集設定檔中更新叢集版本 (anthosBareMetalVersion)。

  2. 使用下列指令,檢查叢集是否已準備好升級,並執行預檢:

    bmctl check preflight --cluster CLUSTER_NAME --kubeconfig ADMIN_KUBECONFIG
    

    更改下列內容:

    • CLUSTER_NAME:要升級的叢集名稱。
    • ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。

    使用這個指令建立預檢來測試叢集升級時,系統會在管理員叢集中建立 PreflightCheck 自訂資源。

對現有叢集進行內部預檢

將 Kubernetes 資源套用至現有叢集時,Google Distributed Cloud 會自動執行內部預檢。如有任何檢查失敗,除非您明確略過檢查,否則 Google Distributed Cloud 不會變更任何相關節點。

套用 Kubernetes 資源時略過預檢

如要在將資源套用至現有叢集時忽略內部預檢,請在叢集設定檔中將 BypassPreflightCheck 欄位設為 true。

以下是叢集設定檔的一部分,顯示 bypassPreflightCheck 欄位設為 true:

apiVersion: v1
kind: Namespace
metadata:
  name: cluster-user1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: user1
  namespace: cluster-user1
spec:
  type: user
  bypassPreflightCheck: true
  # Anthos cluster version.
  anthosBareMetalVersion: 1.36.200-gke.118
...

執行最新預檢

發現已知問題時,預檢 (和健康狀態檢查) 會更新。如要指示 bmctl 從已安裝子版本的最新修補程式映像檔執行檢查,請使用 --check-image-version latest 選項旗標:

bmctl check preflight --cluster CLUSTER_NAME --check-image-version latest

將 CLUSTER_NAME 替換為要檢查的叢集名稱。

這有助於找出最近發現的已知問題,不必先建立或升級叢集。

您也可以對運作中的叢集執行最新健康狀態檢查,判斷是否正常運作。詳情請參閱「執行最新的健康狀態檢查」。

忽略自動預檢結果

如果您在建立或升級叢集前,視需要執行預檢,則可略過自動預檢。如要略過自動預檢,請在執行 bmctl create cluster 或 bmctl upgrade cluster 時,使用選用的 --force 旗標。

後續步驟