對叢集 Autoscaler 進行除錯

請檢視可用於除錯叢集自動擴展器並找出故障根本原因的各項選項。

開始之前: 存取 Red Hat OpenShift 叢集

步驟 1:檢查版本

  1. 驗證叢集 Autoscaler 附加程式已安裝且備妥。
    ibmcloud oc cluster addon ls --cluster CLUSTER_NAME
    
    輸出範例
    Name                 Version   Health State   Health Status   
    cluster-autoscaler   1.0.4     normal         Addon Ready
    
  2. 將叢集裡執行的版本與叢集 Autoscaler 附加程式 變更日誌 中的最新版本相比較。
  3. 如果您的版本已過時,請將最新叢集 Autoscaler 版本部署至叢集。

步驟 2: 檢查配置

請檢查是否已正確配置叢集 Autoscaler。

  1. 取得叢集 Autoscaler ConfigMap的 YAML 配置檔。

    oc get cm iks-ca-configmap -n kube-system -o yaml > iks-ca-configmap.yaml
    
  2. 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 }]
    
  3. 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 的性能。

  1. 取得叢集自動擴展器的 Pod。 若狀態並非「執行中」,請描述該 Pod。

    oc get pods -n kube-system | grep ibm-iks-cluster-autoscaler
    
  2. 說明叢集 Autoscaler Pod。 如需其他疑難排解資訊,請檢閱 事件 一節。

    oc describe pod -n kube-system <pod_name>
    
  3. 檢閱 指令 區段,以檢查 自訂叢集 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 的日誌中搜尋相關訊息,例如 lastScaleDownFailTimeFinal 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。

  1. 編輯 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
    
  2. enabled 參數設為 false,並儲存您的變更。

  3. 再次編輯 iks-ca-configmap。 將 enabled 參數設為 true,並儲存您的變更。

    oc edit cm iks-ca-configmap -n kube-system
    
  4. 在停用並重新啟用叢集 Autoscaler 之後,如果您的叢集仍未調整,您可以編輯 iks-ca-configmap 中的 minSizemaxSize 參數。 有時,編輯 minSizemaxSize 工作者參數會順利重新啟動叢集 Autoscaler。

    oc edit cm iks-ca-configmap -n kube-system
    
  5. 編輯 minSizemaxSize 參數,並儲存您的變更。

步驟 7:檢查問題是否已解決

監視叢集裡的叢集 Autoscaler 活動,以查看問題是否已解決。 如果您仍然遇到問題,請參閱 意見、問題和支援