全部產品
Search
文件中心

Container Service for Kubernetes:邊緣節點FAQ

更新時間:Sep 15, 2024

本文介紹使用ACK Edge叢集的邊緣節點時可能遇到的常見問題以及對應的解決方案。

ACK Edge組件如何區分雲上節點和雲下節點(邊緣節點)?

ACK Edge通過節點的label alibabacloud.com/is-edge-worker來判斷是否是邊緣節點。

節點加入雲端節點池或邊緣節點池時,會自動攜帶is-edge-worker標籤。若is-edge-worker取值為true,表示該節點為邊緣節點;取值為false,則表示該節點為雲上節點。

專線環境下如何接入邊緣節點?

ACK Edge叢集在專線環境下接入邊緣節點,請注意以下要求。更多資訊,請參見ACK Edge叢集在專線情境下的特殊配置說明

  • 選擇邊緣節點池類型時,選擇專用型,然後通過添加節點操作產生節點接入指令碼。

    專用型節點池的具體資訊,請參見建立邊緣節點池

    說明

    ACK Edge叢集版本為1.22及以上時,不支援通過配置節點接入指令碼中的inDedicatedNetwork參數實現專線接入。若您叢集版本低於1.22,請及時升級版本。

  • 在專線情境下接入邊緣節點時,接入過程與雲產品之間通過內網地址進行互動,您需要確保節點與相關雲產品的網路已打通,包括OSS、ACR、SLB等。

GPU節點如何接入?

  • 在接入節點前,需要先安裝好GPU Driver。

  • 驅動版本相關資訊,請參見ACK支援的NVIDIA驅動版本列表

  • 產生節點接入指令碼時,需配置gpuVersion參數。當前支援的GPU版本如下:

      系統架構

      GPU型號

      邊緣Kubernetes叢集版本

      AMD64/x86_64

      Nvidia_Tesla_T4

      ≥1.16.9-aliyunedge.1

      AMD64/x86_64

      Nvidia_Tesla_P4

      ≥1.16.9-aliyunedge.1

      AMD64/x86_64

      Nvidia_Tesla_P100

      ≥1.16.9-aliyunedge.1

      AMD64/x86_64

      Nvidia_Tesla_V100

      ≥1.18.8-aliyunedge.1

      AMD64/x86_64

      Nvidia_Tesla_A100

      ≥1.20.11-aliyunedge.1

      AMD64/x86_64

      Nvidia_Tesla_A10

      ≥1.20.11-aliyunedge.1

      AMD64/x86_64

      Nvidia_L20

      ≥1.26.3-aliyun.1

      AMD64/x86_64

      Nvidia_L40

      ≥1.26.3-aliyun.1

      image.png

  • 該參數配置完成後,接入工具會自動安裝nvidia-containerd-runtime,關於nvidia-containerd-runtime更多資訊,請參見nvidia-containerd-runtime

如何處理接入指令碼執行失敗的問題?

當指令碼執行時出現問題,請參考以下常見問題列表進行處理。若出現以下表格中不存在的問題,請收集節點診斷資訊後,提交工單排查處理。關於如何收集邊緣節點診斷資訊,請參見如何收集ACK Edge叢集節點的診斷資訊?

接入失敗資訊

失敗原因

處理建議

The os XXX unsupport

當前邊緣節點的系統版本不支援。

關於支援的邊緣節點的系統列表,請參見添加邊緣節點

invalid nodeName

節點名稱不合法。

  1. 節點名稱只能由英文小寫字母、中劃線(-)和半形句號(.)組成。

  2. 節點名稱不能超過253個字元。

  3. 節點名稱不能以localhost開頭。

Node route overlaps with service cidr

節點的路由表網段與叢集建立時配置的Pod CIDR或Service CIDR衝突。

重新建立叢集,請注意配置Pod CIDR與Service CIDR,需避免與邊緣節點的NameServer地址以及路由表網段衝突。

response error msg: TOKEN_EXPIRED

接入Token到期。

  1. 重建節點接入指令碼。

  2. 檢查節點系統時間是否正常。

A node named XXX is already exist in the cluster

叢集中已存在同名的節點。

下線叢集中的同名節點。

error run phase join-node: failed to get cluster info: failed to get cluster-info configmap, Get "https://xx.xxx.xx.xx:6443/api/v1/namespaces/kube-public/configmaps/cluster-info": dial tcp xx.xxx.xx.xx:6443: i/o timeout

擷取叢集cluster-info失敗。

edgeadm接入邊緣節點時需要通過該地址訪問APIServer, 請檢查API Server負載平衡(SLB)ACL規則是否限制了該地址的訪問。

error run phase post-check: timed out waiting for the condition

系統組件啟動失敗。

  1. 請重新下載edgeadm工具,並執行edgeadm reset後重新接入,確保您使用的是最新版本的edgeadm。

  2. 檢查邊緣節點是否能正常訪問依賴的公網地址。相關地址清單請參見網路管理概述

  3. 收集邊緣節點診斷資訊,並提交工單排查,關於如何收集診斷資訊,請參見如何收集ACK Edge叢集節點的診斷資訊?

升級ACK Edge叢集時,邊緣節點升級失敗如何處理?

升級邊緣節點池時,若未返回升級成功結果(This node has been upgraded successfully,請參考以下內容排查處理。

升級失敗資訊

可能原因

處理建議

edgeadm version xxxx does not match cluster version

升級工具版本與叢集版本不匹配。

  1. 檢查叢集控制面是否已經完成升級。

  2. 檢查TARGET_CLUSTER_VERSION參數是否填寫正確。

node has already been upgraded to xxx

節點已經是升級後的目標版本。

如果確認節點上還有組件沒有完成升級,請保留日誌並提交工單處理。

kubelet target version xxxx does not match cluster version xxxx

指定的kubelet升級的版本與叢集控制面版本不匹配

  1. 如果指定了kubelet-version參數,請檢查該參數是否填寫正確(與叢集控制面版本一致)。

  2. 如果沒有指定該參數,請提交工單處理。

Parameter currentVersion cann't null

使用了老版本的edgeadm。

  1. 請檢查edgeadm版本是否為最新版本。

  2. 當前支援的叢集升級範圍為1.18升級到1.20版本、1.20升級到1.22版本。

upgrade kubelet failed at phase install, recover to previous state.

error run phase upgrade: xxxx

升級失敗,且已自動復原到之前的狀態,節點狀態不受影響。

請保留日誌並提交工單處理。

upgrade kubelet failed at phase install, recover to previous state

recover kubelet failed, err: xxx

error run phase upgrade: xxxx

升級失敗,且自動復原失敗,節點狀態會受到影響。

請保留日誌並提交工單處理。

如何收集ACK Edge叢集節點的診斷資訊?

ACK Edge叢集的節點出現異常時,您可以參見以下步驟收集叢集節點的診斷資訊,以供資料分析使用。

  1. 登入到ACK Edge叢集的異常節點。

  2. 執行如下命令,下載診斷指令碼。

    curl -o /usr/local/bin/diagnose_edge_node.sh https://aliacs-k8s-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/public/diagnose/diagnose_k8s.sh
  3. 執行如下命令,給診斷指令碼添加執行許可權。

    chmod u+x /usr/local/bin/diagnose_edge_node.sh
  4. 執行如下命令,進入指定目錄。

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

    ./diagnose_edge_node.sh

    預期輸出如下。每次執行診斷指令碼產生的診斷資訊檔名稱不同,本樣本以diagnose_1578310147.tar.gz為例,具體以實際環境為準。

    ......
    + echo 'please get diagnose_1578310147.tar.gz for diagnostics'
    please get diagnose_1578310147.tar.gz for diagnostics
    + echo '請提交 diagnose_1578310147.tar.gz 給支援人員'
    請提交 diagnose_1578310147.tar.gz 給支援人員
  6. 執行ll命令,確認存在diagnose_1578310147.tar.gz診斷資訊檔。