本文匯總了通過阿里雲Container ServiceKubernetes版使用ECI時的常見問題,包括ECI Pod、網路等問題。
ECI Pod
調度
網路
日誌
監控
如何建立GPU執行個體?
ECI支援指定ECS GPU規格來建立GPU執行個體,具體操作,請參見建立GPU執行個體。
如何查看ECI執行個體ID?
Kubernetes情境下,一個Pod對應一個ECI執行個體。您可以通過以下兩種方式查看ECI執行個體ID:
方式一:通過kubectl命令
通過
kubectl describe pod命令查看Pod詳情,在Pod詳情的Annotation中可以查看對應的ECI執行個體ID。k8s.aliyun.com/eci-instance-id欄位對應的值即為ECI執行個體ID,格式為eci-xxxx,樣本如下:
方式二:通過Elastic Container Instance控制台
在Elastic Container Instance控制台的容器組頁面,根據Pod名稱可以查詢對應的ECI執行個體,然後查看ECI執行個體ID。
容器組ID即ECI執行個體ID,格式為
eci-xxxx,樣本如下:
使用了鏡像緩衝,為什麼建立ECI Pod的速度還是很慢?
問題描述
在標準節點上建立一個Pod只需要兩到三秒,而建立ECI執行個體時使用了鏡像緩衝,Pod卻用了十幾秒才啟動。
問題說明
這種情況是正常的。因為在標準節點上建立Pod時,不需要單獨申請資源,可以直接在節點上建立容器,因此時間比較快。而在建立ECI執行個體時,系統需要申請資源,如果指定了多可用性區域,還需要在庫存不足時逐個嘗試各個可用性區域是否有庫存,因此時間相對會慢一些。
如果您指定了多可用性區域建立ECI執行個體,建議您把庫存比較多的可用性區域ID放在第一個,這樣可以避免由重試導致的啟動延遲。
建立ECI Pod後,Pod一直處於Pending狀態怎麼辦?
問題描述
建立Pod後幾個小時內,Pod一直處於為Pending狀態。查看Pod事件列表,顯示在掛載Volume時,由於串連API Server逾時導致失敗。
解決方案
該問題通常是由於執行個體與API Server網路不通導致,您可以按以下思路進行排查:
檢查Pod與叢集的API Server是否在同一個Virtual Private Cloud中。
如果為叢集SLB添加了存取控制,請確保已將Pod所處網段加入到存取控制清單中。
Pod顯示已調度至virtual-kubelet,但一直未成功,怎麼辦?
問題描述
在ACK+Virtual Node的情境下,可能會出現Pod顯示已經調度到virtual-kubelet節點,但是一直沒有新的事件更新的現象。 這種情況下,您需要擷取對應的virtual-kubelet日誌,根據報錯資訊進行問題排查。
如果有新的事件產生,您可以先根據產生的事件進行報錯分析和處理。
解決方案
在Container Service控制台的叢集頁面,單擊目錄集群操作列下的更多>通過 Cloud Shell 管理叢集。
運行以下命令擷取virtual-kubelet Pod名稱。
kubectl -n kube-system get pods
運行以下命令擷取對應Pod的日誌資訊。其中ack-virtual-node-controller-xxxxxxxxxx請替換為步驟2擷取的Pod名稱。
kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx
根據最新的日誌報錯進行處理,或者提供RequestID和報錯資訊,發起工單處理流程。

ACK+Virtual Node的情境下,kube-proxy、coredns被調度到了虛擬節點,啟動失敗怎麼辦?
kube-proxy、coredns調度的時候是忽略taints的,所以有可能被調度到虛擬節點上。此時,您可以編輯kube-proxy、coredns的YAML解決問題,需要增加的YAML如下:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet如何修改ECI Pod的ClusterDomain?
您可以修改VK對應的deployment,為容器增加環境變數CLUSTER_DOMAIN,從而修改VK建立的ECI Pod的ClusterDomain。建議您提交工單,聯絡阿里雲支援人員進行操作。
在ACK Serverless叢集的Ingress中設定了鑒權,但不生效是什麼原因?
問題描述
在 nginx-ingress 中設定了註解 nginx.ingress.kubernetes.io/auth-url ,但不生效。
問題解釋
ACK Serverless叢集中基於SLB的Ingress Controller,不支援設定鑒權URL。
ACK叢集是支援的。
叢集升級後,服務IP地址ping不通怎麼辦?
在2020年10月之前,每個Service IP會對應一張虛擬網卡,所以能ping通。但在2020年10月份之後,為了最佳化高並發,Service IP只存在ipvs的規則中,所以無法ping通(ipvs是基於IP+Port做資料轉寄的,所以ping包無法做轉寄)。
為什麼採集不到ECI執行個體日誌?
如果您在Pod中設定了Log Service的環境變數aliyun_logs_{Logstore名稱},但在Log Service中卻沒有找到ECI執行個體的日誌,可能是以下原因導致:
ECI執行個體已耗用時間太短
ECI執行個體啟動後,如果業務容器在20秒內執行完畢,這種情況下,Log Service可能還沒有來得及收集日誌,容器就已經退出且日誌相關的Volume已經被卸載,因此Log Service無法收集到日誌。
收集路徑(Path)錯誤
首次在Pod中指定環境變數收集日誌時,ECI會自動在Log Service中建立Logstore和Path,後續再次建立Pod時也只能使用該Path。如果使用了其他Path,則會導致Log Service收集不到日誌。如果您想要更換Path,可以將Logstore一起更換,此時ECI會自動在Log Service中建立新的Logstore。
ACK+Virtual Node的情境下,Prometheus如何擷取ECI Pod的監控指標?
Virtual Node和普通節點保持相容,Prometheus(ARMS Prometheus或自建開源Prometheus)會自動擷取Virtual Node管理的ECI Pod的基礎監控指標,您無需做額外配置。
關於ACK叢集如何部署Prometheus,請參見阿里雲Prometheus監控或開源Prometheus監控。