全部產品
Search
文件中心

Elastic Container Instance:常見問題

更新時間:Jul 06, 2024

本文匯總了通過阿里雲Container ServiceKubernetes版使用ECI時的常見問題,包括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,樣本如下:

    查看執行個體ID

  • 方式二:通過Elastic Container Instance控制台

    Elastic Container Instance控制台容器組頁面,根據Pod名稱可以查詢對應的ECI執行個體,然後查看ECI執行個體ID。

    容器組ID即ECI執行個體ID,格式為eci-xxxx,樣本如下:

    容器組頁面.png

使用了鏡像緩衝,為什麼建立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日誌,根據報錯資訊進行問題排查。

說明

如果有新的事件產生,您可以先根據產生的事件進行報錯分析和處理。

解決方案

  1. 在Container Service控制台的叢集頁面,單擊目錄集群操作列下的更多>通過 Cloud Shell 管理叢集

  2. 運行以下命令擷取virtual-kubelet Pod名稱。

    kubectl -n kube-system get pods

    faq-vk-log-4

  3. 運行以下命令擷取對應Pod的日誌資訊。其中ack-virtual-node-controller-xxxxxxxxxx請替換為步驟2擷取的Pod名稱。

    kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx

    faq-vk-log-5

  4. 根據最新的日誌報錯進行處理,或者提供RequestID和報錯資訊,發起工單處理流程。

    faq-vk-log-6

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監控