「连载」边缘计算(十六)02-19:边缘部分源码(源码分析篇)

news/2024/5/19 14:03:47 标签: 边缘计算, 人工智能

(接上篇)

edgecontroller剖析

edgecontroller功能模块启动函数的具体内容如下所示。

KubeEdge/cloud/pkg/edgecontroller/controller.go

// Start controller

func (ctl *Controller) Start(c *beehiveContext.Context) {

var ctx context.Context

config.Context = c

ctx, ctl.cancel = context.WithCancel(context.Background())

initConfig()

upstream, err := controller.NewUpstreamController()

if err != nil {

klog.Errorf("new upstream controller failed with error: %s", err)

os.Exit(1)

}

upstream.Start(ctx)

downstream, err := controller.NewDownstreamController()

if err != nil {

klog.Warningf("new downstream controller failed with error: %s", err)

os.Exit(1)

}

downstream.Start(ctx)

}

从以上edgecontroller的启动函数Start()定义中,可以清晰地看出cloudhub在启动时主要做了如下几件事。

1)接收beehiveContext.Context的通信框架实例,并保存(config.Context = c);

2)初始化edgecontroller的配置(initHubConfig());

3) 实例化并启动UpstreamController

4)实例化并启动DownstreamController。

下面深入分析UpstreamController和DownstreamController都具体做了哪些事。

UpstreamController

顺着UpstreamController的实例化函数找到UpstreamController struct定义,具体如下所示。

KubeEdge/cloud/pkg/edgecontroller/upstream.go

// UpstreamController subscribe messages from edge and sync to k8s api server

type UpstreamController struct {

kubeClient   *Kubernetes.Clientset

messageLayer messagelayer.MessageLayer

// message channel

nodeStatusChan            chan model.Message

podStatusChan             chan model.Message

secretChan                chan model.Message

configMapChan             chan model.Message

serviceChan               chan model.Message

endpointsChan             chan model.Message

persistentVolumeChan      chan model.Message

persistentVolumeClaimChan chan model.Message

volumeAttachmentChan      chan model.Message

queryNodeChan             chan model.Message

updateNodeChan            chan model.Message

}

至此,读者可能疑惑UpstreamController是不是负责处理edge节点上报的nodeStatuspodStatus、secret、configMap、service、endpoints、persistentVolume、persistentVolumeClaim、volumeAttachment等资源的信息。恭喜你猜对了,UpstreamController的作用就在于此。

DownstreamController

顺着DownstreamController的实例化函数找到DownstreamController struct定义,具体如下所示。

KubeEdge/cloud/pkg/edgecontroller/downstream.go

// DownstreamController watch Kubernetes api server and send change to edge

type DownstreamController struct {

kubeClient   *Kubernetes.Clientset

messageLayer messagelayer.MessageLayer

podManager *manager.podManager

configmapManager *manager.ConfigMapManager

secretManager *manager.SecretManager

nodeManager *manager.NodesManager

serviceManager *manager.ServiceManager

endpointsManager *manager.EndpointsManager

lc *manager.LocationCache

}

DownstreamController的功能是监听cloud端pod、configmap、secret、node、service和endpoints等资源的事件,并下发到edge节点。

devicecontroller剖析

devicecontroller功能模块启动函数的具体内容如下所示。

KubeEdge/cloud/pkg/devicecontroller/module.go

// Start controller

func (dctl *DeviceController) Start(c *beehiveContext.Context) {

var ctx context.Context

config.Context = c

ctx, dctl.cancel = context.WithCancel(context.Background())

initConfig()

downstream, err := controller.NewDownstreamController()

if err != nil {

klog.Errorf("New downstream controller failed with error: %s", err)

os.Exit(1)

}

upstream, err := controller.NewUpstreamController(downstream)

if err != nil {

klog.Errorf("new upstream controller failed with error: %s", err)

os.Exit(1)

}

downstream.Start(ctx)

// wait for downstream controller to start and load deviceModels and devices

// TODO think about sync

time.Sleep(1 * time.Second)

upstream.Start(ctx)

}

devicecontroller的启动函数和edgecontroller的启动函数的逻辑基本相同,所以对于devicecontroller的剖析,读者可以参考edgecontrller剖析。

到此,KubeEdge源码分析系列之CloudCore就全部结束了。大家在阅读KubeEdge的源码时,一定要时刻提醒自己CloudCore中的模块之间时可以通过beehive的context消息通信框架相互通信。

 「未完待续……

 点击下方标题可阅读技术文章


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

相关文章

Kubernetes基础(二十二)-K8S的PV/PVC/StorageClass详解

1 概述 先来个一句话总结:PV、PVC是K8S用来做存储管理的资源对象,它们让存储资源的使用变得可控,从而保障系统的稳定性、可靠性。StorageClass则是为了减少人工的工作量而去自动化创建PV的组件。所有Pod使用存储只有一个原则:先规…

设计模式二:代理模式

1、什么是动态代理 可能很多小伙伴首次接触动态代理这个名词的时候,或者是在面试过程中被问到动态代理的时候,不能很好的描述出来,动态代理到底是个什么高大上的技术。不方,其实动态代理的使用非常广泛,例如我们平常使…

3个密码学相关的问题

一、离散对数问题(Discrete Logarithm Problem, DLP) 问题描述:给定 有限阿贝尓群 G中的2个元素a和b,找出最小的正整数x满足:b a ^^ x (或者证明这样的x不存在)。 二、阶数问题(O…

JavaSpringBoot中,Mybatis plus 语法展示

目录 语法展示 基础的增删改查 分页查询 语法指导 删除操作 条件操作 语法展示 Mapper public interface UserMapper extends BaseMapper<User> {} public interface UserService extends IService<User> {} Service public class UserServiceImpl extends…

java面试多线程篇

文章说明 在文章中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表权重越大&#xff0c;最多五颗星&#xff08;☆☆☆☆☆&#xff09; 最少一颗星&#xff08;☆&#xff09; 1.线程的基础知识 1.1 线程和进程的区别&#xff1f; 难易程度&#xff1a;☆☆…

Kafka数据清理机制

Apache Kafka中数据清理机制涉及的主要概念有两个&#xff1a;基于时间或大小的日志保留策略&#xff0c;以及日志压缩。这些特性允许Kafka管理其存储空间&#xff0c;保留有用的数据&#xff0c;同时清除过时或重复的数据。 基于时间或大小的日志保留策略 日志保留策略配置参…

有事休假店铺无人看守怎么办?智能远程视频监控系统保卫店铺安全

在春节期间&#xff0c;很多自营店主也得到了久违的假期&#xff0c;虽然很多店主都是长期在店铺中看守&#xff0c;但遇到春节这样的日子&#xff0c;多数人还是选择回乡休假。面对店主休假或有事不能管理店铺时&#xff0c;传统的监控虽然可以做到单一的监控&#xff0c;却仍…

BOSS直聘招聘经验

招聘低端兼职岗位。流量很大&#xff0c;来的人通常实力也不足。 招聘高端兼职岗位。流量不多。来的人通常具备一定实力。 招聘高薪职位&#xff0c;流量一般&#xff0c;会有有实力的勾搭。 招聘低薪职位&#xff0c;流量一般。通常没什么实力。