全部產品
Search
文件中心

Container Service for Kubernetes:叢集管理FAQ

更新時間:Aug 10, 2024

本文介紹您在建立叢集、使用叢集、管理叢集等過程中可能遇到的常見問題及對應解決方案。

Alibaba Cloud Linux作業系統的叢集相容CentOS的容器鏡像嗎?

相容。更多資訊,請參見Alibaba Cloud Linux 3

建立叢集選擇了containerd容器運行時,是否可以改為Docker?

叢集建立後,容器運行時不可更改。您可以建立不同類型運行時的節點池,節點池與節點池的運行時可以不同。更多資訊,請參見建立節點池

如需將節點容器運行時從Docker遷移到containerd。具體操作,請參見將節點容器運行時從Docker遷移到containerd

說明

v1.24及之後的叢集版本不再支援將Docker作為內建容器運行時。請在v1.24及之後的叢集中使用containerd作為節點池運行時。

容器運行時containerd、Docker、安全沙箱有什麼區別?

Container Service for Kubernetes支援containerd、Docker、安全沙箱三種運行時。推薦您使用containerd運行時。Docker運行時僅支援v1.22版本及以下的叢集;安全沙箱運行時僅支援v1.24版本及以下的叢集。更多運行時的對比資訊,請參見如何選擇Docker運行時、Containerd運行時、或者安全沙箱運行時?。將ACK叢集升級至v1.24及更高版本時,需將節點容器運行時從Docker遷移到containerd。具體操作,請參見將節點容器運行時從Docker遷移到containerd

Container ServiceACK通過等保三級認證了嗎?

您可以為您的叢集開啟等保加固、設定基準檢查策略,基於Alibaba Cloud Linux實現等保2.0三級版以及配置等保合規的基準檢查,以便滿足以下等保合規要求:

  • 身份鑒別

  • 存取控制

  • 安全審計

  • 入侵防範

  • 惡意代碼防範

更多資訊,請參見ACK等保加固使用說明

誤刪了ACK專有叢集的一個Master節點後,還能升級叢集嗎?

不能。刪除ACK專有叢集的Master節點後,無法添加Master節點,也無法進行叢集的版本升級。您可以重新建立ACK專有叢集

如何訪問Master節點?

  • ACK專有叢集:具體操作,請參見通過SSH串連ACK專有叢集的Master節點

  • ACK託管叢集ACK託管叢集下控制面節點完全託管,您無法登入到控制面節點的終端。如果需要登入到控制面節點,您可以考慮使用ACK專有叢集

如何收集Kubernetes叢集診斷資訊?

當Kubernetes叢集出現問題或者節點異常時,您可通過Container ServiceACK提供的一鍵故障診斷功能,輔助您定位叢集中出現的問題,詳情請參見使用叢集診斷

如果叢集診斷功能無法滿足需求,您需要分別在Master節點和異常的Worker節點上收集Kubernetes叢集的診斷資訊時,請根據下文步驟收集Linux節點或Windows節點的診斷資訊。

收集Linux節點診斷資訊

不同節點所使用的作業系統有所限制,Worker節點可以使用Linux系統和Windows系統,Master節點只能使用Linux系統,以下方法同時適用於Linux系統的Master和Worker節點,該操作以Master節點為例。

  1. 登入Kubernetes叢集的Master節點,執行以下命令,下載診斷指令碼。

    curl -o /usr/local/bin/diagnose_k8s.sh http://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/diagnose/diagnose_k8s.sh
    說明

    Linux節點的診斷指令碼僅支援從華東1(杭州)地區下載。

  2. 執行以下命令,給診斷指令碼添加執行許可權。

    chmod u+x /usr/local/bin/diagnose_k8s.sh
  3. 執行以下命令,進入指定目錄。

    cd /usr/local/bin
  4. 執行以下命令,運行診斷指令碼。

    diagnose_k8s.sh

    系統顯示類似如下,每次執行診斷指令碼,產生的記錄檔名稱不同,本文以diagnose_1514939155.tar.gz為例,現場以實際環境為準。

    ......
    + echo 'please get diagnose_1514939155.tar.gz for diagnostics'
    please get diagnose_1514939155.tar.gz for diagnostics
    + echo '請上傳 diagnose_1514939155.tar.gz'
    請上傳 diagnose_1514939155.tar.gz
  5. 執行如下命令,查看存放叢集診斷資訊的檔案。

    ls -ltr | grep diagnose_1514939155.tar.gz
    說明

    將diagnose_1514939155.tar.gz替換為現場環境產生的記錄檔名稱。

收集Windows節點診斷資訊

Windows系統的Worker節點,請下載並運行diagnose診斷指令碼,收集叢集診斷資訊,具體操作如下。

說明

Windows系統僅充當Worker節點。

  1. 登入異常Worker節點,開啟運行視窗,輸入cmd,單擊確定,開啟命令列工具。

  2. 執行以下命令,進入PowerShell模式。

    powershell
  3. 執行以下命令,下載並運行診斷指令碼。

    Windows節點的診斷指令碼支援從所屬地區下載,請根據叢集所在地區替換命令列中的[$Region_ID]

    Invoke-WebRequest -UseBasicParsing -Uri http://aliacs-k8s-[$Region_ID].oss-[$Region_ID].aliyuncs.com/public/pkg/windows/diagnose/diagnose.ps1 | Invoke-Expression

    預期輸出如下,表示收集診斷資訊成功。

    INFO: Compressing diagnosis clues ...
    INFO: ...done
    INFO: Please get diagnoses_1514939155.zip for diagnostics
    說明

    diagnoses_1514939155.zip檔案會儲存在指令碼執行時所在目錄。

如何排查ACK叢集出現的問題?

步驟一:檢查叢集節點

  1. 執行以下命令,查看叢集中的節點狀態,確認所有的Node節點都存在並且狀態是Ready。

    kubectl get nodes

    預期輸出類似如下。p

    • 如果所有的節點都存在並且狀態是Ready,表明叢集節點沒有問題。

    • 如果節點異常,請執行步驟2

  2. 執行以下命令,查看節點上的詳細資料以及節點上的事件。

    替換[$NODE_NAME]為您的節點名稱。

    kubectl describe node [$NODE_NAME]
    說明

    關於kubectl輸出的資訊解析,請參見Node status

步驟二:檢查叢集組件

如果檢查完叢集Node節點後仍然無法確認問題,請繼續在控制平面上檢查叢集組件日誌。

  1. 執行以下命令,查看kube-system命名空間下所有的組件。

    kubectl get pods -n kube-system

    預期輸出如下。1其中,以kube-開頭的Pod都是Kubernetes叢集的系統組件,coredns-開頭的是DNS外掛程式。預期輸出表明,組件狀態正常。如果組件狀態異常,請執行下一步。

  2. 執行以下命令,查看其日誌資訊,定位並解決問題。

    替換[$Component_Name]為異常組件名稱。

    kubectl logs -f [$Component_Name] -n kube-system

步驟三:檢查kubelet組件

  1. 執行以下命令,查看kubelet的運行狀態。

    systemctl status kubelet
  2. 如果您的kubelet運行狀態不是active (running),那麼您需要執行以下命令,進一步查看kubelet的日誌,定位並解決問題。

    journalctl -u kubelet

叢集常見問題

下表羅列了一部分ACK叢集常見的故障原因以及處理方法。

故障情境

處理方法

API Server組件停止或Master組件停止:

  • 不能建立、停止、更新Pod、Service、Deployment等資源。

  • 已有的Pod和Service仍然能夠正常工作,除非該Pod或Service需要調用ACK的介面,例如Kubernetes Dashboard。

ACK組件本身有一定高可用的功能,建議您查看組件本身是否有異常。例如,ACK叢集的API Server預設使用CLB執行個體,您可以排查CLB狀態異常的原因。

API Server後端資料丟失:

  • API Server不能再啟動。

  • 已有的Pod和Service仍然能夠正常工作,除非該Pod或Service需要調用ACK的介面,例如Kubernetes Dashboard。

  • 需要恢複或重建API Server的資料才能啟動API Server

若您建立了快照,在出現問題時,可以通過快照恢複正常的資料。若沒有建立快照,可聯絡我們。問題解決後,請參見以下方法預防該問題:

個別節點關機,即該節點上的所有Pod不再運行。

使用Deployment、StatefulSet、DaemonSet等工作負載建立Pod,而不是直接建立Pod,避免Pod無法調度到其他正常節點。

kubelet組件故障:

  • 不能在異常kubelet節點上建立Pod。

  • kubelet可能錯誤地刪除了某些Pod。

  • 節點被標記為unhealthy

  • Deployment或Replication Controller在其他節點建立了新的Pod。

  • 若您建立了快照,在出現問題時,可以通過快照恢複正常的資料。若沒有建立快照,請聯絡我們反饋問題。問題解決後,周期性地為kubelet軟體所使用的資料卷建立快照。詳細資料,請參見使用雲端硬碟儲存快照

  • 使用Deployment、StatefulSet、DaemonSet等工作負載建立Pod,而不是直接建立Pod,避免Pod無法調度到其他正常節點。

人為配置或其他問題。

若您建立了快照,在出現問題時,可以通過快照恢複正常的資料。若沒有建立快照,請聯絡我們反饋問題。問題解決後,周期性地為kubelet軟體所使用的資料卷建立快照。詳細資料,請參見使用雲端硬碟儲存快照

如何建立訂用帳戶的節點,但使用隨用隨付的API Server CLB執行個體?

當您選擇叢集的付費類型為訂用帳戶時,節點池中的節點(即ECS執行個體)和API Server的CLB執行個體均會建立為訂用帳戶的執行個體。如果您希望使用訂用帳戶的節點,但API Server的CLB為隨用隨付,您可以參照以下流程實現:

  1. 建立叢集,且滿足以下配置項。關於建立叢集的配置項詳細說明,請參見建立ACK託管叢集

    • 付費類型:選擇隨用隨付,此時將為API Server建立一個私網CLB執行個體,預設為按使用量計費。

    • 期望節點數:設定為0,表示暫無需建立節點。

  2. 準備訂用帳戶的ECS執行個體。如需建立,請參見快速購買ECS執行個體一鍵購買訂用帳戶執行個體

  3. 將ECS執行個體添加至節點池。操作的使用限制、注意事項、操作流程以及常見問題,請參見添加已有節點

配置叢集API Server的SLB存取控制策略時需要允許存取哪些IP網段?

API Server的SLB的ACL控制規則必須允許存取以下網段。

  • Container Service for Kubernetes管控的網段100.104.0.0/16。

  • 叢集Virtual Private Cloud的主網段及附加網段(如有),或叢集節點所在的交換器vSwitch網段。

  • 其他需訪問API Server串連端點的用戶端出口網段。

  • ACK Edge叢集還需允許存取邊緣節點出口網段。

  • ACK靈駿叢集還需允許存取靈駿VPD網段。

配置存取控制策略白名單時,務必將以上允許存取網段添加到白名單;配置存取控制策略黑名單時,請勿將以上允許存取網段添加到黑名單。

更多資訊,請參見配置叢集API Server的存取控制策略