边缘节点FAQ

本文介绍使用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 join-node: Install edge-hub failed: Copy file /tmp/edge-hub to /usr/bin/edge-hub fail: open /usr/bin/edge-hub: text file busy | 40009 | 40009

安装edge-hub失败,节点上已经存在edge-hub的二进制文件。

执行edgeadm reset命令清理节点后重新接入。

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诊断信息文件。