EdgeCore 与 EdgeMesh 实现云边互通
2024-05-23
EdgeCore 与 EdgeMesh 实现云边互通
能力有限,不讨论原理只分享部署过程,具体可看官网
环境准备
核心节点(公网) 主机名 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 官网 前置准备 工作,特别是步骤 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 访问边缘节点,具体原理就是打洞与代理,但所有网络压力都在核心节点,估计按量计费流量费挺贵