對叢集 Autoscaler 進行除錯
請檢視可用於除錯叢集自動擴展器並找出故障根本原因的各項選項。
開始之前: 存取 Red Hat OpenShift 叢集。
步驟 1:檢查版本
- 驗證叢集 Autoscaler 附加程式已安裝且備妥。
輸出範例ibmcloud oc cluster addon ls --cluster CLUSTER_NAMEName Version Health State Health Status cluster-autoscaler 1.0.4 normal Addon Ready - 將叢集裡執行的版本與叢集 Autoscaler 附加程式 變更日誌 中的最新版本相比較。
- 如果您的版本已過時,請將最新叢集 Autoscaler 版本部署至叢集。
步驟 2: 檢查配置
請檢查是否已正確配置叢集 Autoscaler。
-
取得叢集 Autoscaler ConfigMap的 YAML 配置檔。
oc get cm iks-ca-configmap -n kube-system -o yaml > iks-ca-configmap.yaml -
在
data.workerPoolsConfig.json欄位中,檢查是否使用每個工作者節點儲存區的大小下限及上限來啟用正確的工作者節點儲存區。"name": "<worker_pool_name>": ConfigMap 中工作者節點儲存區的名稱必須與叢集中工作者節點儲存區的名稱完全相同。 多個工作者節點儲存區必須以逗點區隔。 若要檢查叢集工作者節點儲存區的名稱,請執行ibmcloud oc worker-pool ls -c <cluster_name_or_ID>。"minSize": 2: 一般而言,minSize必須是2或以上。"maxSize": 3:maxSize必須等於或大於minSize。"enabled": true: 將值設為true,以啟用自動調整工作者節點儲存區的大小。
data: workerPoolsConfig.json: | [{"name": "default", "minSize": 2, "maxSize": 3, "enabled": true }] -
在
metadata.annotations.workerPoolsConfigStatus欄位中,檢查 FAILED CODE 錯誤訊息。 請遵循錯誤訊息中的任何回復步驟。 例如,您可能會收到類似下列的訊息,其中您必須對叢集所在的資源群組具有正確的許可權。annotations: workerPoolsConfigStatus: '{"1:3:default":"FAILED CODE: 400 ... \"description\":\"Unable to validate the request with resource group manager.\",\"type\":\"Authentication\\"recoveryCLI\":\"To list available resource groups, run ''ibmcloud resource groups''. Make sure that your cluster and the other IBM Cloud resources that you are trying to use are in the same resource group. Verify that you have permissions to work with the resource group. If you think that the resource group is set up correctly and you still can't use it, contact IBM Cloud support.\"}"}'
步驟 3: 檢閱叢集 Autoscaler 狀態
檢閱叢集 Autoscaler 的狀態。
oc describe cm -n kube-system cluster-autoscaler-status
status: 檢閱狀態訊息,以取得其他疑難排解資訊 (如果有的話)。Health: 檢閱叢集 Autoscaler 的整體性能是否有任何錯誤或失敗。ScaleUp: 檢閱擴增活動的狀態。 一般而言,如果備妥並登錄的工作者節點數目相符,則擴增會具有NoActivity,因為您的工作者節點儲存區具有足夠的工作者節點。ScaleDown: 檢閱縮減活動的狀態。 如果叢集 Autoscaler 識別NoCandidates,則不會縮減您的工作者節點儲存區,因為沒有任何工作者節點可以在不從工作負載中移除所要求的資源的情況下移除。Events: 檢閱事件以取得其他疑難排解資訊 (如果有的話)。
健全叢集 Autoscaler 狀態的範例
Data
====
status:
----
Cluster-autoscaler status at 2020-02-04 19:51:50.326683568 +0000 UTC:
Cluster-wide:
Health: Healthy (ready=2 unready=0 notStarted=0 longNotStarted=0 registered=2longUnregistered=0)
LastProbeTime: 2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
ScaleUp: NoActivity (ready=2 registered=2)
LastProbeTime: 2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
ScaleDown: NoCandidates (candidates=0)
LastProbeTime: 2020-02-04 19:51:50.324437686 +0000 UTC m=+9022588.836540262
LastTransitionTime: 2019-10-23 09:36:25.741087445 +0000 UTC m=+64.253190008
Events: none
步驟 4: 檢查叢集 Autoscaler Pod
檢查叢集 Autoscaler Pod 的性能。
-
取得叢集自動擴展器的 Pod。 若狀態並非「執行中」,請描述該 Pod。
oc get pods -n kube-system | grep ibm-iks-cluster-autoscaler -
說明叢集 Autoscaler Pod。 如需其他疑難排解資訊,請檢閱 事件 一節。
oc describe pod -n kube-system <pod_name> -
檢閱 指令 區段,以檢查 自訂叢集 Autoscaler 配置 是否符合您的預期,例如
scale-down-delay-after-add值。Command: ./cluster-autoscaler --v=4 --balance-similar-node-groups=true --alsologtostderr=true --stderrthreshold=info --cloud-provider=IKS --skip-nodes-with-local-storage=true --skip-nodes-with-system-pods=true --scale-down-unneeded-time=10m --scale-down-delay-after-add=10m --scale-down-delay-after-delete=10m --scale-down-utilization-threshold=0.5 --scan-interval=1m --expander=random --leader-elect=false --max-node-provision-time=120m
步驟 5: 搜尋 Pod 日誌
在叢集 Autoscaler Pod 的日誌中搜尋相關訊息,例如 lastScaleDownFailTime、Final scale-up plan 或 叢集 Autoscaler 事件之類的失敗訊息。
如果您的群集 autoscaler pod 不健康,無法串流日誌,請檢查您的 IBM Cloud Logs 範例是否有 pod 日誌。 請注意,如果您的群集管理員沒有 為您的群集啟用 IBM Cloud Logs,您可能沒有任何日誌可供檢閱。
oc logs -n kube-system <pod_name> -c ibm-iks-cluster-autoscaler > logs.txt
步驟 6:重新啟動 Pod
如果您找不到任何失敗或錯誤訊息,且已啟用記載功能,請重新啟動叢集 Autoscaler Pod。 部署會重建 Pod。
oc delete pod -n kube-system <pod_name>
步驟 6: 停用並重新啟用
選用項目: 如果您已完成除錯步驟,但叢集仍未調整,則可以透過編輯配置對映來停用並重新啟用 autoscaler。
-
編輯
iks-ca-configmap。oc edit cm iks-ca-configmap -n kube-system輸出範例:
apiVersion: v1 data: workerPoolsConfig.json: | [{"name": "default", "minSize": 2, "maxSize": 5, "enabled": true }] kind: ConfigMap metadata: annotations: workerPoolsConfigStatus: '{"2:5:default":"SUCCESS"}' creationTimestamp: "2020-03-24T17:44:35Z" name: iks-ca-configmap namespace: kube-system resourceVersion: "40964517" selfLink: /api/v1/namespaces/kube-system/configmaps/iks-ca-configmap uid: 11a1111a-aaaa-1a11-aaa1-aa1aaaa11111 -
將
enabled參數設為false,並儲存您的變更。 -
再次編輯
iks-ca-configmap。 將 enabled 參數設為true,並儲存您的變更。oc edit cm iks-ca-configmap -n kube-system -
在停用並重新啟用叢集 Autoscaler 之後,如果您的叢集仍未調整,您可以編輯
iks-ca-configmap中的minSize或maxSize參數。 有時,編輯minSize及maxSize工作者參數會順利重新啟動叢集 Autoscaler。oc edit cm iks-ca-configmap -n kube-system -
編輯
minSize或maxSize參數,並儲存您的變更。
步驟 7:檢查問題是否已解決
監視叢集裡的叢集 Autoscaler 活動,以查看問題是否已解決。 如果您仍然遇到問題,請參閱 意見、問題和支援。