這項預防措施可協助您在開始進行重大叢集作業 (例如建立或升級叢集) 前,找出問題。如果這些檢查在作業前自動執行,除非預檢全數通過,否則叢集不會有任何變更。您也可以視需要執行預檢。
這份文件將說明各項檢查、自動執行的情況、手動執行的時間和方式,以及如何解讀結果。
在 Google Distributed Cloud 中,您可以針對不同情況執行前置檢查:
使用
bmctl建立或升級叢集和節點集區資源時,Google Distributed Cloud 會執行預檢。如果檢查失敗,系統不會進行任何變更。您也可以略過這些檢查,或明確執行檢查。管理員或混合式叢集在使用者叢集上建立或更新 Kubernetes 資源時,Google Distributed Cloud 也會執行內部預檢。系統會在將變更套用至受影響的使用者叢集前執行檢查。如果檢查失敗,系統不會進行任何變更。
PreflightCheck 自訂資源
執行預檢時,Google Distributed Cloud 會建立PreflightCheck自訂資源。PreflightCheck 自訂資源會持續存在,並提供預檢活動和結果的記錄。
如要擷取 PreflightCheck 自訂資源,請按照下列步驟操作:
取得特定叢集執行的預檢清單:
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擷取特定
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:節點檢查 (OS 設定、資源和軟體設定),適用於 IP 位址為192.0.2.53和192.0.2.54的機器。192.0.2.53-gpc和192.0.2.54-gcp:針對 IP 位址為192.0.2.53和192.0.2.54的機器進行連線檢查 (Artifact Registry 和 Google API 存取權)。 Google CloudGcp: 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 位址重疊。
kubeadm憑證尚未過期。
節點網路檢查 (視負載平衡設定而異):
Kubernetes API 伺服器的 VIP 可存取。
可存取負載平衡器 VIP。
節點可以在必要連接埠上通訊。
已佈建
etcd事件執行個體,且符合通訊埠需求。
所有檢查通過後,Google Distributed Cloud 就會升級叢集。如要進一步瞭解如何升級叢集,請參閱「Google Distributed Cloud 叢集升級最佳做法」和「叢集升級的生命週期和階段」。
隨需執行叢集升級預檢
bmctl check preflight 指令可讓您在升級叢集前執行預檢。開始升級前,您可以執行下列預檢指令,確認叢集是否已準備好升級:
更新叢集設定檔中的叢集版本 (
anthosBareMetalVersion)。使用下列指令檢查叢集是否已準備好升級,並執行預檢:
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.33.100-gke.89
...
執行最新的預檢檢查
系統偵測到已知問題時,會更新預檢檢查 (和健康狀態檢查)。如要讓 bmctl 從已安裝次要版本的最新修補程式映像檔執行檢查,請使用 --check-image-version latest 選項旗標:
bmctl check preflight --cluster CLUSTER_NAME --check-image-version latest
將 CLUSTER_NAME 替換為要檢查的叢集名稱。
這樣一來,您不必先建立或升級叢集,就能掌握最近發現的已知問題。
您也可以對運作中的叢集執行最新的健康狀態檢查,判斷叢集是否正常運作。詳情請參閱「執行最新的健康檢查」一文。
忽略自動預檢檢查結果
如果您在建立或升級叢集前,依需求執行預檢,可以略過自動預檢。如要略過自動預檢檢查,請在執行 bmctl create cluster 或 bmctl upgrade cluster 時使用選用的 --force 標記。