Kubeedge - 3: 部署安装EdgeMesh

什么是EdgeMesh

  • EdgeMesh 作为 KubeEdge 集群的数据面组件,为应用程序提供了简单的服务发现与流量代理功能,从而屏蔽了边缘场景下复杂的网络结构
  • KubeEdge 基于 Kubernetes 构建,将云原生容器化应用程序编排能力延伸到了边缘。但是,在边缘计算场景下,网络拓扑较为复杂,不同区域中的边缘节点往往网络不互通,并且应用之间流量的互通是业务的首要需求,而 EdgeMesh 正是对此提供了一套解决方案

为什么要使用EdgeMesh

EdgeMesh 满足边缘场景下的新需求(如边缘资源有限、边云网络不稳定、网络结构复杂等),即实现了高可用性、高可靠性和极致轻量化:

  • 高可用性
    • 利用 LibP2P 提供的能力,来打通边缘节点间的网络
    • 将边缘节点间的通信分为局域网内和跨局域网
      • 局域网内的通信:直接通信
      • 跨局域网的通信:打洞成功时 Agent 之间建立直连隧道,否则通过中继转发流量
  • 高可靠性 (离线场景)
    • 元数据通过 KubeEdge 边云通道下发,无需访问云端 apiserver
    • EdgeMesh 内部集成轻量的节点级 DNS 服务器,服务发现不依赖云端 CoreDNS
  • 极致轻量化
    • 每个节点有且仅有一个 Agent,节省边缘资源

用户价值

  • 使用户具备了跨越不同局域网边到边/边到云/云到边的应用互访能力
  • 相对于部署 CoreDNS + Kube-Proxy + CNI 这一套组件,用户只需要在节点部署一个 Agent 就能完成目标

EdgeMesh能力

关键功能

功能 子功能 实现度
服务发现 /
流量治理 HTTP
TCP
Websocket
HTTPS
UDP
负载均衡 随机
轮询
会话保持
边缘网关 外部访问
多网卡监听
跨子网通信 跨边云通信
跨局域网边边通信
边缘CNI 跨子网Pod通信 +

注:

  • EdgeMesh 版本所支持的功能
  • + EdgeMesh 版本不具备的功能,但在后续版本中会支持
  • - EdgeMesh 版本不具备的功能,或已弃用的功能

部署安装EdgeMesh

前置准备

  • 步骤1: 去除 K8s master 节点的污点
    kubectl taint nodes --all node-role.kubernetes.io/master-
  • 步骤2: 给 Kubernetes API 服务添加过滤标签
    kubectl label services kubernetes service.edgemesh.kubeedge.io/service-proxy-name=""
  • 步骤3 启用 KubeEdge 的边缘 Kube-API 端点服务启用 KubeEdge 的边缘 Kube-API 端点服

启用 KubeEdge 的边缘 Kube-API 端点服务

  • 步骤1: 在云端,开启 dynamicController 模块,配置完成后,需要重启 cloudcore


    # 使用yaml文件
    vim /etc/kubeedge/config/cloudcore.yaml
    modules:
    ...
    dynamicController:
    enable: true
    ...
    # 如果使用容器
    kubectl edit cm cloudcore -n kubeedge
    # 修改 dynamicController :false 为 true
  • 步骤2: 在边缘节点,打开 metaServer 模块(如果你的 KubeEdge < 1.8.0,还需关闭旧版 edgeMesh 模块),配置完成后,需要重启 edgecore

    vim /etc/kubeedge/config/edgecore.yaml
    modules:
    ...
    edgeMesh:
    enable: false
    ...
    metaManager:
    metaServer:
    enable: true
    ...
  • 步骤3: 在边缘节点,配置 clusterDNS 和 clusterDomain,配置完成后,需要重启 edgecore

    vim /etc/kubeedge/config/edgecore.yaml
    modules:
    ...
    edged:
    clusterDNS: 169.254.96.16
    clusterDomain: cluster.local
    ...

    如果 KubeEdge >= v1.12.0,请这样配置:

        vim /etc/kubeedge/config/edgecore.yaml
    modules:
    ...
    edged:
    ...
    tailoredKubeletConfig:
    ...
    clusterDNS:
    - 169.254.96.16
    clusterDomain: cluster.local
    ...
  • 步骤4: 最后,在边缘节点,测试边缘 Kube-API 端点功能是否正常

    • 需要等待一会,curl 127.0.0.1:10550/api/v1/services获取数据

Heml安装EdgeMesh

  • Helm 3安装EdgeMesh比较简单
    # Heml安装脚本
    wget https://get.helm.sh/helm-v3.5.3-linux-amd64.tar.gz
    tar zxf helm-v3.5.3-linux-amd64.tar.gz
    cp -pr linux-amd64/helm /usr/local/bin/
    helm version
    安装EdgeMesh:
  • 执行命令可以查看你设置的配置
    kubectl -n kubeedge edit configmap edgemesh-agent-cfg
  • 其中agent.relayNodes[0].nodeName=<?>,是中继节点设置,你可以只指定为当前节点
  • relayNodes[0].advertiseAddress=<?> 是当前的节点的ip
    helm install edgemesh --namespace kubeedge \
    --set agent.image=kubeedge/edgemesh-agent:v1.12.0 \
    --set agent.relayNodes[0].nodeName=k8s-node1,agent.relayNodes[0].advertiseAddress="{xxx}" \
    https://raw.githubusercontent.com/kubeedge/edgemesh/release-1.12/build/helm/edgemesh.tgz