本文介紹您在建立叢集、使用叢集、管理叢集等過程中可能遇到的常見問題及對應解決方案。
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節點為例。
登入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(杭州)地區下載。
執行以下命令,給診斷指令碼添加執行許可權。
chmod u+x /usr/local/bin/diagnose_k8s.sh
執行以下命令,進入指定目錄。
cd /usr/local/bin
執行以下命令,運行診斷指令碼。
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
執行如下命令,查看存放叢集診斷資訊的檔案。
ls -ltr | grep diagnose_1514939155.tar.gz
說明將diagnose_1514939155.tar.gz替換為現場環境產生的記錄檔名稱。
收集Windows節點診斷資訊
Windows系統的Worker節點,請下載並運行diagnose診斷指令碼,收集叢集診斷資訊,具體操作如下。
Windows系統僅充當Worker節點。
登入異常Worker節點,開啟運行視窗,輸入cmd,單擊確定,開啟命令列工具。
執行以下命令,進入PowerShell模式。
powershell
執行以下命令,下載並運行診斷指令碼。
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叢集出現的問題?
步驟一:檢查叢集節點
執行以下命令,查看叢集中的節點狀態,確認所有的Node節點都存在並且狀態是Ready。
執行以下命令,查看節點上的詳細資料以及節點上的事件。
替換
[$NODE_NAME]
為您的節點名稱。kubectl describe node [$NODE_NAME]
說明關於kubectl輸出的資訊解析,請參見Node status。
步驟二:檢查叢集組件
如果檢查完叢集Node節點後仍然無法確認問題,請繼續在控制平面上檢查叢集組件日誌。
執行以下命令,查看kube-system命名空間下所有的組件。
kubectl get pods -n kube-system
預期輸出如下。其中,以kube-開頭的Pod都是Kubernetes叢集的系統組件,coredns-開頭的是DNS外掛程式。預期輸出表明,組件狀態正常。如果組件狀態異常,請執行下一步。
執行以下命令,查看其日誌資訊,定位並解決問題。
替換
[$Component_Name]
為異常組件名稱。kubectl logs -f [$Component_Name] -n kube-system
步驟三:檢查kubelet組件
執行以下命令,查看kubelet的運行狀態。
systemctl status kubelet
如果您的kubelet運行狀態不是active (running),那麼您需要執行以下命令,進一步查看kubelet的日誌,定位並解決問題。
journalctl -u kubelet
叢集常見問題
下表羅列了一部分ACK叢集常見的故障原因以及處理方法。
故障情境 | 處理方法 |
API Server組件停止或Master組件停止:
| ACK組件本身有一定高可用的功能,建議您查看組件本身是否有異常。例如,ACK叢集的API Server預設使用CLB執行個體,您可以排查CLB狀態異常的原因。 |
API Server後端資料丟失:
| 若您建立了快照,在出現問題時,可以通過快照恢複正常的資料。若沒有建立快照,可聯絡我們。問題解決後,請參見以下方法預防該問題:
|
個別節點關機,即該節點上的所有Pod不再運行。 | 使用Deployment、StatefulSet、DaemonSet等工作負載建立Pod,而不是直接建立Pod,避免Pod無法調度到其他正常節點。 |
kubelet組件故障:
|
|
人為配置或其他問題。 | 若您建立了快照,在出現問題時,可以通過快照恢複正常的資料。若沒有建立快照,請聯絡我們反饋問題。問題解決後,周期性地為kubelet軟體所使用的資料卷建立快照。詳細資料,請參見使用雲端硬碟儲存快照。 |
如何建立訂用帳戶的節點,但使用隨用隨付的API Server CLB執行個體?
當您選擇叢集的付費類型為訂用帳戶時,節點池中的節點(即ECS執行個體)和API Server的CLB執行個體均會建立為訂用帳戶的執行個體。如果您希望使用訂用帳戶的節點,但API Server的CLB為隨用隨付,您可以參照以下流程實現:
建立叢集,且滿足以下配置項。關於建立叢集的配置項詳細說明,請參見建立ACK託管叢集。
付費類型:選擇隨用隨付,此時將為API Server建立一個私網CLB執行個體,預設為按使用量計費。
期望節點數:設定為0,表示暫無需建立節點。
準備訂用帳戶的ECS執行個體。如需建立,請參見快速購買ECS執行個體一鍵購買訂用帳戶執行個體。
將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的存取控制策略。