這項預防措施有助於在開始進行重大叢集作業 (例如建立或升級叢集) 前,找出問題。如果這些檢查在作業執行前自動執行,除非預檢全部通過,否則叢集不會有任何變更。您也可以視需要執行預檢。
這份文件將說明各項檢查、自動執行的情況、手動執行的時間和方式,以及如何解讀結果。
在 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
:針對 IP 位址為192.0.2.53
和192.0.2.54
的機器進行節點檢查 (OS 設定、資源和軟體設定)。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 位址重疊。
節點網路檢查 (視負載平衡設定而異):
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.32.100-gke.106
...
執行最新的預檢檢查
系統偵測到已知問題時,會更新預檢檢查 (和健康狀態檢查)。如要讓 bmctl
從已安裝次要版本的最新修補程式映像檔執行檢查,請使用 --check-image-version latest
選項旗標:
bmctl check preflight --cluster CLUSTER_NAME --check-image-version latest
將 CLUSTER_NAME
替換為要檢查的叢集名稱。
這樣一來,您不必先建立或升級叢集,就能掌握最近發現的已知問題。
您也可以對運作中的叢集執行最新的健康狀態檢查,判斷叢集是否正常運作。詳情請參閱「執行最新的健康檢查」一文。
忽略自動預檢檢查結果
如果您在建立或升級叢集前,依需求執行預檢,可以略過自動預檢。如要略過自動預檢檢查,請在執行 bmctl create cluster
或 bmctl upgrade cluster
時使用選用的 --force
標記。