預檢

這項預防措施有助於在開始進行重大叢集作業 (例如建立或升級叢集) 前,找出問題。如果這些檢查在作業執行前自動執行,除非預檢全部通過,否則叢集不會有任何變更。您也可以視需要執行預檢。

這份文件將說明各項檢查、自動執行的情況、手動執行的時間和方式,以及如何解讀結果。

在 Google Distributed Cloud 中,您可以針對不同情況執行前置檢查:

  • 使用 bmctl 建立或升級叢集和節點集區資源時,Google Distributed Cloud 會執行預檢。如果檢查失敗,系統不會進行任何變更。您也可以略過這些檢查,或明確執行檢查。

  • 管理員或混合式叢集在使用者叢集上建立或更新 Kubernetes 資源時,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.53192.0.2.54:針對 IP 位址為 192.0.2.53192.0.2.54 的機器進行節點檢查 (OS 設定、資源和軟體設定)。
      • 192.0.2.53-gpc192.0.2.54-gcp:針對 IP 位址為 192.0.2.53192.0.2.54 的機器進行連線檢查 (Artifact Registry 和 Google API 存取權)。 Google Cloud
      • 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 版本。

    • 作業系統使用支援的核心版本。

    • 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 版本。

    • 作業系統使用支援的核心版本。

    • Ubuntu 的 Uncomplicated Firewall (UFW) 已停用。

    • 節點電腦符合最低 CPU 需求。

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

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

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

    • 在節點電腦上設定時間同步。

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

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

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

    * 控制層節點或負載平衡器節點皆未處於維護模式。

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

    • Artifact Registry,gcr.io,系統會檢查可存取性。如果叢集已設定為使用登錄鏡像,系統會略過這項檢查。

    • 可連線到 Google API。

  • 機器檢查:

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

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

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

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

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

    • 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.32.100-gke.106
...

執行最新的預檢檢查

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

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

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

這樣一來,您不必先建立或升級叢集,就能掌握最近發現的已知問題。

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

忽略自動預檢檢查結果

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

後續步驟