貔貅云原生

貔貅云原生

EdgeCore 与 EdgeMesh 实现云边互通

251
0
0
2024-05-23
EdgeCore 与 EdgeMesh 实现云边互通

EdgeCore 与 EdgeMesh 实现云边互通

能力有限,不讨论原理只分享部署过程,具体可看官网

KubeEdge官网

image-jegv.png

环境准备

核心节点(公网) 主机名 cloudcore  内网IP 10.16.0.90       公网IP 118.184.183.116

边缘节点(内网) 主机名 edgecore   内网IP 192.168.159.136

核心节点在公有云服务器,边缘节点能够访问核心节点 IP 就行,单向通信

这里安装的 Kubernetes 版本 1.20.15,Keadm 版本 1.12.1,keadm 1.14 版本后不支持 docker 作为容器运行时,请自行选择版本

安装EdgeCore

注意:边缘节点不需要安装 kubelet、kubeadm 等 Kubernetes 组件,只需要安装对应容器运行时,这里安装 docker 就行

在所有节点下载 keadm

wget https://github.com/kubeedge/kubeedge/releases/download/v1.12.1/keadm-v1.12.1-linux-amd64.tar.gz
tar -zxvf keadm-v1.12.1-linux-amd64.tar.gz
cp keadm-v1.12.1-linux-amd64/keadm/keadm /usr/local/bin/keadm

Master 节点下载镜像,这一步是官网文档可以不操作

docker run --rm kubeedge/installation-package:v1.12.1 cat /usr/local/bin/keadm > /usr/local/bin/keadm && chmod +x /usr/local/bin/keadm

Master 节点执行 init 操作

[root@cloudcore ~]#  keadm init --advertise-address="118.184.183.116" --profile version=v1.12.1

边缘节点执行 join 操作

## token 需要在 Master 节点执行 keadm gettoken 获取

[root@cloudcore ~]#  keadm join --cloudcore-ipport=118.184.183.116:10000 --token=27a37ef16159f7d3be8fae95d588b79b3adaaf92727b72659eb89758c66ffda2.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTAyMTYwNzd9.JBj8LLYWXwbbvHKffJBpPd5CyxqapRQYDIXtFZErgYE --kubeedge-version=v1.12.1

验证

## 边缘节点已经注册到集群

[root@cloudcore ~]# kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
cloudcore   Ready    control-plane,master   16h   v1.20.15
edge        Ready    agent,edge             16h   v1.22.6-kubeedge-v1.12.1

总结

KubeEdge 本身不支持核心应用访问边缘,但却适合在核心节点发布应用到边缘,简化了对边缘的管理以及发布

如果需要云边互通需要部署 EdgeMesh


安装 EdgeMesh

EdgeMesh官网

image-rhhn.png

部署需要仔细研究 EdgeMesh 官网 前置准备 工作,特别是步骤 3

前置准备

Master 节点下载github 项目

git clone https://github.com/kubeedge/edgemesh.git

Master 节点去除污点并且打标签

## 去除 Master 节点污点

kubectl taint nodes --all node-role.kubernetes.io/master-


## 给 Kubernetes API 服务添加过滤标签
## 正常情况下你不会希望 EdgeMesh 去代理 Kubernetes API 服务,因此需要给它添加过滤标签

kubectl label services kubernetes service.edgemesh.kubeedge.io/service-proxy-name=""

Master 节点修改 cloudcore ConfigMap 文件

## 把 dynamicController 改为 true,配置完成后,重启 cloudcore

kubectl edit cm cloudcore -n kubeedge

modules:
  ...
  dynamicController:
    enable: true

边缘节点修改 edgecore 配置文件

## 打开 metaServer 模块

vi /etc/kubeedge/config/edgecore.yaml
modules:
  ...
  metaManager:
    metaServer:
      enable: true


## 配置 clusterDNS 和 clusterDomain,这里默认 169.254.96.16

vi /etc/kubeedge/config/edgecore.yaml
modules:
  ...
  edged:
    ...
    tailoredKubeletConfig:
      ...
      clusterDNS:
      - 169.254.96.16
      clusterDomain: cluster.local

边缘节点重启 edgecore

systemctl restart edgecore

Master 节点执行 apply 操作

cd edgemesh
kubectl apply -f build/crds/istio/
kubectl apply -f build/agent/resources/

验证

执行 edgemesh 验证案例

## apply 测试用例

cd edgemesh
kubectl apply -f examples/test-pod.yaml
kubectl apply -f examples/hostname.yaml


## 进入核心节点 pod 访问边缘节点

[root@cloudcore ~]# kubectl exec -it alpine-test sh
/ # curl hostname-svc:12345
hostname-edge-84cb45ccf4-9lb8z

总结

EdgeMesh 可以让核心通过 svc 访问边缘节点,具体原理就是打洞与代理,但所有网络压力都在核心节点,估计按量计费流量费挺贵