預檢可讓您在執行建立或升級叢集等重大叢集作業前,找出問題。在作業前自動執行檢查時,Google Distributed Cloud 會封鎖叢集修改作業,直到所有驗證通過為止。您也可以視需要執行檢查,或在叢集管理工作流程中略過檢查。
當您使用 bmctl 建立或升級叢集和節點集區時,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: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 指令可讓您在升級叢集前執行預檢。在開始升級前,您可以執行下列預檢指令,確認叢集是否已準備好升級:
在叢集設定檔中更新叢集版本 (
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.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 旗標。