使用 Kubernetes API 對工作者節點進行除錯

如果您具有叢集的存取權,則可以在 Node 資源上使用 Kubernetes API 對工作者節點進行除錯。

在開始之前,請確定您在所有命名空間中擁有 Manager 服務存取角色,或群集的 Administrator 平台角色,該角色對應於 cluster-admin RBAC 角色。

  1. 存取您的 Red Hat OpenShift 叢集

  2. 列出叢集裡的工作者節點,並記下不在 Ready STATUS 中之工作者節點的 NAME。 請注意,NAME 是工作者節點的專用 IP 位址。

    oc get nodes
    
  3. 說明每一個工作者節點,並檢閱輸出中的 Conditions 區段。

    • Type: 可能影響工作者節點的狀況類型,例如記憶體或磁碟壓力。
    • LastTransitionTime: 最近更新狀態的時間。 使用此時間來識別工作者節點問題開始的時間,這可協助您進一步對問題進行疑難排解。
    oc describe node <name>
    
  4. 檢查工作節點的使用情況。

    1. 在前一個指令的 Allocated resources 輸出中,檢閱使用工作者節點 CPU 及記憶體資源的工作量。 您可能會注意到部分 Pod 未設定資源限制,且耗用的資源超出預期。 如果是這樣,請調整 Pod 的資源使用情形。
    2. 檢閱叢集中工作者節點的 CPU 及記憶體使用率百分比。 如果使用率持續超過 80%,請將更多工作者節點新增至叢集,以支援工作負載。
  5. 檢查叢集裡安裝的自訂許可控制器。 許可控制器通常會封鎖必要的 Pod 執行,這可能會讓工作者節點進入嚴重狀態。 如果您有自訂許可控制器,請嘗試使用 oc delete 移除它們。 然後,檢查工作者節點問題是否已解決。

    kubectl get mutatingwebhookconfigurations --all-namespaces
    
    kubectl get validatingwebhookconfigurations --all-namespaces
    
  6. 如果您已配置 日誌轉遞,請從下列路徑檢閱節點相關日誌。

    /var/log/kubelet.log
    /var/log/syslog
    /var/log/messages
    
  7. 請檢查工作量部署是否不會導致工作者節點問題。

    1. 使用問題來污染工作者節點。
      oc taint node NODEIP ibm-cloud-debug-isolate-customer-workload=true:NoExecute
      
    2. 請確定您已依照步驟 5 的說明來刪除任何自訂許可控制器。
    3. 重新啟動工作者節點。
      • 經典:重新載入 Worker 節點。
        ibmcloud oc worker reload -c <cluster_name_or_ID> --worker <worker_ID>
        
      • VPC:更換工作站節點。
        ibmcloud oc worker replace -c <cluster_name_or_ID> --worker <worker_ID> --update
        
    4. 等待工作者節點完成重新啟動。 如果工作者節點進入健全狀態,則問題可能是工作負載所造成。
    5. 在工作者節點上一次排定一個工作量,以查看導致問題的工作量。 若要排定工作量,請新增下列容錯。
      tolerations:
      - effect: NoExecute
        key: ibm-cloud-debug-isolate-customer-workload
        operator: Exists
      
    6. 在您識別導致問題的工作負載之後,請繼續 對應用程式部署進行除錯