全部產品
Search
文件中心

Container Service for Kubernetes:叢集管理FAQ

更新時間:Jan 08, 2026

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

如何將自建的Kubernetes叢集遷移到ACK上來?

ACK提供了遷移方案,支援將自建Kubernetes叢集平滑遷移至ACK叢集,並盡量確保遷移期間對業務無影響。具體流程,請參見Kubernetes遷移方案概述

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版本及以下的叢集。更多運行時的對比資訊,請參見containerd、安全沙箱、Docker運行時的對比。將ACK叢集升級至v1.24及更高版本時,需將節點容器運行時從Docker遷移到containerd。具體操作,請參見將節點容器運行時從Docker遷移到containerd

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

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

  • 身份鑒別

  • 存取控制

  • 安全審計

  • 入侵防範

  • 惡意代碼防範

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

ACK叢集是否支援Istio?

支援。您可以使用阿里雲Service MeshASM。ASM是完全相容社區Istio的服務網格產品,控制面全託管,讓您更專註於業務應用的開發部署ASM適配ACK節點的各種作業系統以及叢集中部署的各類網路外掛程式。您可以將建立好的ACK叢集添加到ASM執行個體中,使用ASM提供的流量管理、故障處理、統一監控和日誌管理等功能。具體操作,請參見添加叢集到ASM執行個體。關於ASM涉及的計費,請參見ASM計費說明

如何收集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節點,開啟命令列工具。

  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、檢查叢集節點

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

    kubectl get nodes

    預期輸出類似如下。p

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

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

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

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

    kubectl describe node [$NODE_NAME]
    說明

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

2、檢查叢集組件

如果檢查完叢集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

3、檢查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軟體所使用的資料卷建立快照。詳細資料,請參見為單個雲端硬碟儲存卷建立快照

使用RAM使用者操作ACK叢集時,如何進行精細化授權?

  1. 預設情況下,RAM使用者或RAM角色沒有使用雲端服務OpenAPI的任何許可權,您需要為其授予Container Service的系統許可權AliyunCSFullAccess或所需的自訂許可權才能使用ACK並管理ACK叢集,請參見使用RAM授予叢集及雲資源存取權限

  2. 基於Kubernetes RBAC機制,需使用RBAC為叢集內資源操作授權,RAM使用者才能管理叢集的內部資源,例如建立Deployment、Service等。

    針對需要細粒度控制資源讀寫權限的情境,請參見使用自訂RBAC限制叢集內資源操作通過自訂ClusterRole和Role實現更精細化的RBAC許可權配置。

  3. 使用RAM使用者存取控制台時,還需配置對應的雲端服務許可權後才能正常使用,例如通過控制台查看節點池伸縮活動、查看叢集監控大盤等,請參見Container Service控制台許可權依賴

配置叢集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的存取控制策略

ACK託管叢集的控制面是如何確保高可用的?

ACK託管叢集的控制面由阿里雲側託管,並提供節點與節點池、工作負載、負載平衡等資料面維度高可用推薦配置,以構建穩定、安全、可靠的叢集和應用架構,詳情請參見叢集高可用架構推薦配置

ACK託管叢集的API Server網域名稱能否跨VPC解析?

ACK叢集的API Server網域名稱(apiserver.<cluster-id>.<region-id>.cs.aliyuncs.com)預設通過內網DNS解析(PrivateZone)解析,其解析記錄僅在叢集所在的VPC內生效,無法在另一個VPC中被正常解析。

若需跨VPC解析,可參見跨帳號關聯VPC完成阿里雲帳號的添加,然後提交工單,提供VPC資訊以完成綁定。

為何ACK託管叢集的API Server網域名稱解析失敗?

ACK會將ACK託管叢集的API Server網域名稱註冊到內網DNS解析(PrivateZone)。當節點使用自訂DNS伺服器,即非阿里雲預設的100.100.2.136100.100.2.138時,可能出現API Server網域名稱解析失敗的問題。

此時,需將API Server網域名稱(apiserver.<cluster-id>.<region-id>.cs.aliyuncs.com)解析上遊伺服器(Upstream)設定為100.100.2.136100.100.2.138

如果自訂DNS伺服器與ACK託管叢集處於不同VPC,請進一步提交工單完成跨VPC解析配置。

ACK託管叢集API Server自動建立的CLB執行個體是否支援複用?

不可以。API Server的內網CLB是存取控制面的核心入口,專用於API Server。任何複用或修改該CLB執行個體配置(如添加監聽、修改後端伺服器組等)的操作,都可能導致API Server訪問異常,進而影響整個叢集的穩定性。請勿對該CLB執行個體進行任何修改。

如何訪問Master節點?

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

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

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

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

ACK專有叢集的Master節點可以移除或新增嗎?有哪些是高危操作?

不可以。自行增加或減少ACK專有叢集的Master節點都可能導致叢集無法使用,且不可恢複。

對於ACK專有叢集的Master節點,錯誤的操作可能導致Master節點不可用,甚至叢集不可用。自行更換Master或etcd 認證、自行修改核心組件、刪除或格式化節點/etc/kubernetes等核心目錄資料、重裝作業系統等均屬於高危操作,詳情請參見叢集相關高危操作

ACK專有叢集API Server提示api/v1/namespaces/xxx/resourcequotes": x509: certificate has expired or is not yet valid: current time XXX is after xxx怎麼辦?

問題現象

當您在ACK專有叢集中建立Pod時,API Server返回認證到期的錯誤,或kube-controller-manager的日誌或Event中顯示認證到期的錯誤。報錯資訊如下。

"https://localhost:6443/api/v1/namespaces/xxx/resourcequotes": x509: certificate has expired or is not yet valid: current time XXX is after XXX
"https://[::1]:6443/api/v1/namespaces/xxx/resourcequotes": x509: certificate has expired or is not yet valid: current time XXX is after XXX

問題原因

在Kubernetes中,API Server內建了用於其內部LoopbackClient服務端工作的認證。該認證在社區版本中有效期間為1年且無法自動輪轉,只有當API Server Pod發生重啟時,才會自動輪轉更新。如果Kubernetes版本長時間未升級(超過 1 年),內部認證會到期,導致 API 請求失敗。詳細資料,請參見#86552

為了降低社區版本中認證有效期間較短帶來的穩定性風險,ACK在1.24及以上版本的叢集中調整了該內建認證的預設到期時間,有效期間延長至10年。具體變更內容及影響範圍請參見【產品變更】ACK叢集API Server內部認證有效時間長度變更公告

解決方案

您可以登入Master節點,執行以下命令,查詢LoopbackClient認證到期時間。

其中,XX.XX.XX.XX為Master節點的本地IP。

curl --resolve apiserver-loopback-client:6443:XX.XX.XX.XX -k -v https://apiserver-loopback-client:6443/healthz 2>&1 |grep expire
  • 對於已到期或即將到期的1年期認證叢集,請參見手動升級叢集將叢集升級至1.24或以上版本。推薦遷移至ACK託管叢集Pro版熱遷移ACK專有叢集至ACK託管叢集Pro版)。

  • 對於短期無法操作升級的ACK專有叢集,請逐一登入Master節點,手動重啟API Server,以產生新的有效認證。

    • containerd節點

      crictl pods | grep kube-apiserver- | awk '{print $1}' | xargs -I '{}' crictl stopp {}
    • Docker節點

      docker ps | grep kube-apiserver- | awk '{print $1}' | xargs -I '{}' docker restart {}