「连载」边缘计算(三十三)03-15:边缘部分源码(源码分析篇)

news/2024/5/19 16:17:41 标签: 边缘计算, microsoft, 人工智能, oracle, 数据库

(接上篇)

初始化porxy,具体如下所示。

KubeEdge/edgemesh/pkg/proxy/proxy.go

// Init: init the proxy. create virtual device and assign ips, etc..

func Init() {

go func() {

unused = make([]string, 0)

addrByService = &addrTable{}

c := context.GetContext(context.MsgCtxTypeChannel)

metaClient = client.New(c)

//create virtual network device

for {

err := vdev.CreateDevice()

if err == nil {

break

}

klog.Warningf("[L4 Proxy] create Device is failed : %s", err)

//there may have some exception need to be fixed on OS

time.Sleep(2 * time.Second)

}

//configure vir ip

ipPoolSize = 0

expandIpPool()

//open epoll

ep, err := poll.CreatePoll(pollCallback)

if err != nil {

vdev.DestroyDevice()

klog.Errorf("[L4 Proxy] epoll is open failed : %s", err)

return

}

epoll = ep

go epoll.Loop()

klog.Infof("[L4 Proxy] proxy is running now")

}()

}

Init()函数主要做3件事情。

1)创建获得pod原数据的client;

2)创建和维护虚拟网络设备;

3)通过epoll管理代理进程。

CreateDevice()函数先判断虚拟网络设备edge0是否存在,如果存在就将其删除并重建;如果不存在就直接创建虚拟网络设备edge0。

启动服务

server.Start()定义具体内容如下所示。

KubeEdge/edgemesh/pkg/server/server.go

func Start() {

//Initialize the resolvers

r := &resolver.MyResolver{"http"}

resolver.RegisterResolver(r)

//Initialize the handlers

config.GlobalDefinition = &model.GlobalCfg{}

config.GlobalDefinition.Panel.Infra = "fake"

opts := control.Options{

Infra:   config.GlobalDefinition.Panel.Infra,

Address: config.GlobalDefinition.Panel.Settings["address"],

}

config.GlobalDefinition.Ssl = make(map[string]string)

control.Init(opts)

opt := registry.Options{}

registry.DefaultServiceDiscoveryService = edgeregistry.NewServiceDiscovery(opt)

myStrategy := mconfig.CONFIG.GetConfigurationByKey("mesh.loadbalance.strategy-name").(string)

loadbalancer.InstallStrategy(myStrategy, func() loadbalancer.Strategy {

switch myStrategy {

case "RoundRobin":

return &loadbalancer.RoundRobinStrategy{}

case "Random":

return &loadbalancer.RandomStrategy{}

default:

return &loadbalancer.RoundRobinStrategy{}

}

})

//Start dns server

go DnsStart()

//Start server

StartTCP()

}

Start()函数做了3件事情:

1)初始化resolvers、handlers。初始化的resolvers、handlers在TCP服务处理连接的过程中被使用。

2)启动 DNS服务。该DNS服务主要为节点内的应用做域名解析。

3)启动TCP服务。该TCP服务在节点间做流量代理。

通过一个for循环接收通信管道中关于edgemesh的信息并处理,具体如下所示。

KubeEdge/edgemesh/pkg/module.go

//Start sets context and starts the controller

func (em *EdgeMesh) Start(c *context.Context) {

...

// we need watch message to update the cache of instances

for {

if msg, ok := em.context.Receive(constant.ModuleNameEdgeMesh); ok == nil {

proxy.MsgProcess(msg)

klog.Infof("get message: %v", msg)

continue

}

}

}

未完待续……     


http://www.niftyadmin.cn/n/5429882.html

相关文章

后勤管理系统|基于SSM 框架+vue+ Mysql+Java+B/S架构技术的后勤管理系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 前台首页功能 员工注册、员工登录 个人中心 公寓信息 员工功能模块 员工积分管理 管理员登录 ​编辑管理员功能模块 个人信息 ​编辑员工管理 公寓户型管理 ​编辑公寓信息管理 系统结构设计 数据库设计 luwen参考 概述 源码获取 文末获取源…

鸿蒙 Harmony 初体验

前言 看现在网上传得沸沸扬扬的鸿蒙,打算弄个 hello world 玩一下, 不然就跟不上时代的发展了 环境安装 我的环境 Windows 11 家庭中文版HarmonyOS SDK (API 9)DevEco Studio (3.1.1 Release)Node.js (16.19.1) 开发IDE下载 官方下载链接 配置 nodejs 这里帮…

②【Docker】安装Docker可视化工具——Portainer

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ②【Docker】安装Docker可视化工具——Portain…

RK3588开发笔记-PCIE扩展SATA芯片JMB582调试笔记

目录 前言 一、JMB582介绍 二、原理图连接 三、设备树配置 总结 前言 在RK35

学习Android的第二十八天

目录 Android Service (服务) 线程 Service (服务) Service 相关方法 Android 非绑定 Service startService() 启动 Service 验证 startService() 启动 Service 的调用顺序 Android 绑定 Service bindService() 启动 Service 验证 BindService 启动 Service 的顺序 …

产品经理能否带中国AI突破重围?

Photo by Ryan Loughlin on Unsplash 大模型开启新的AI时代之后,寻求机会的人们反而感受到一种更为强烈的撕裂感。 一方面,技术的革新让人感觉机会无处不在;另一方面,在庞大而混沌的创业机会面前,又感觉到无所适从。 …

Qt 的d指针

Qt 的 d 指针,也称作 pimpl(pointer to implementation)是一种常用于 C 库设计的技术,它用于隐藏类的私有数据和实现细节,以保持二进制兼容性并减少头文件的依赖。这种技术在 Qt 库中被广泛应用。 d 指针的核心思想是将…

【Java基础】IO流(二)字符集知识

目录 字符集知识 1、GBK字符集 2、Unicode字符集(万国码) 3、乱码 4、Java中编码和解码的方法 字符集知识 字符(Character):在计算机和电信技术中,一个字符是一个单位的字形、类字形单位或符号的基本信…