点胶喷嘴技术支持东莞网站建设,深圳网站设计平台,漳州网站建设厂家,做网站显示上次登录时间代码#xff08;接上篇#xff09;
EdgeCore中功能模块的启动
EdgeCore中功能模块的启动与中的CloudCore中功能模块的启动流程完全相同#xff0c;大家可以参考该部分。
组件源码分析
本节将对Kubernetes的核心组件的源码进行梳理和分析。这些组件包括控制节点的kube-apiser…接上篇
EdgeCore中功能模块的启动
EdgeCore中功能模块的启动与中的CloudCore中功能模块的启动流程完全相同大家可以参考该部分。
组件源码分析
本节将对Kubernetes的核心组件的源码进行梳理和分析。这些组件包括控制节点的kube-apiserver、kube-controller-manager、kube-scheduler计算节点的kube-let、kube-proxy。
配置文件读取
截至目前我们已经分析了KubeEdge源码整体架构以及KubeEdge项目中各组件的源码入口。本节将分析KubeEdge项目中CloudCore和EdgeCore组件都会用到的读取配置文件的逻辑。
配置文件读取流程剖析
KubeEdge各模块配置文件读取使用的库是相同的流程也是高度相似的。所以这里只对KubeEdge其中一个模块读取配置文件的流程进行深入剖析。关于其他模块的配置文件的读取读者可以在本节的基础上自行剖析。
1配置文件读取流程剖析
从CloudCore组件的cloudhub模块的配置初始化切入对KubeEdge的配置文件读取流程进行剖析具体如下所示。 KubeEdge/cloud/edge/pkg/cloudhub/cloudhub.go func (a *cloudHub) Start(c *beehiveContext.Context) { ... initHubConfig() ... }
initHubConfig()函数定义具体如下所示。 KubeEdge/cloud/pkg/cloudhub/cloudhub.go import( ... GitHub.com/KubeEdge/beehive/pkg/common/config ... ) func initHubConfig() { cafile, err : config.CONFIG.GetValue(cloudhub.ca).ToString() ... certfile, err : config.CONFIG.GetValue(cloudhub.cert).ToString() ... keyfile, err : config.CONFIG.GetValue(cloudhub.key).ToString() ... util.HubConfig.ProtocolUDS, _ config.CONFIG.GetValue(cloudhub.enable_uds).ToBool() util.HubConfig.Address, _ config.CONFIG.GetValue(cloudhub.address).ToString() util.HubConfig.Port, _ config.CONFIG.GetValue(cloudhub.port).ToInt() util.HubConfig.QuicPort, _ config.CONFIG.GetValue(cloudhub.quic_port).ToInt() util.HubConfig.MaxIncomingStreams, _ config.CONFIG.GetValue(cloudhub.max_incomingstreams).ToInt() util.HubConfig.UDSAddress, _ config.CONFIG.GetValue(cloudhub.uds_address).ToString() util.HubConfig.KeepaliveInterval, _ config.CONFIG.GetValue(cloudhub.keepalive-interval).ToInt() util.HubConfig.WriteTimeout, _ config.CONFIG.GetValue(cloudhub.write-timeout).ToInt() util.HubConfig.NodeLimit, _ config.CONFIG.GetValue(cloudhub.node-limit).ToInt() ... }
根据initHubConfig()函数定义和相关导入可知config是导入的package真正起作用的是config.CONFIG。config.CONFIG的定义如下所示。 KubeEdge/beehive/pkg/common/config/config.go // CONFIG conf var CONFIG archaius.ConfigurationFactory
上述代码中config.CONFIG是定义的一个archaius.ConfigurationFactory类型的全局变量。至此读者会疑惑只定义一个全局变量怎么读取配置文件肯定会有函数对这个全局变量进行赋值根据以往经验这样的全局变量会被所在文件的init()函数初始化。检查该变量所在文件的init()函数具体如下所示。 KubeEdge/beehive/pkg/common/config/config.go func init() { InitializeConfig() }
InitializeConfig()函数定义具体如下所示。 KubeEdge/beehive/pkg/common/config/config.go import ( ... archaius GitHub.com/go-chassis/go-archaius ... ) // config file only support .yml or .yaml ! func InitializeConfig() { once.Do(func() { err : archaius.Init() ... CONFIG archaius.GetConfigFactory() ms : memoryconfigsource.NewMemoryConfigurationSource() CONFIG.AddSource(ms) cmdSource : commandlinesource.NewCommandlineConfigSource() CONFIG.AddSource(cmdSource) envSource : envconfigsource.NewEnvConfigurationSource() CONFIG.AddSource(envSource) confLocation : getConfigDirectory() /conf _, err os.Stat(confLocation) if !os.IsExist(err) { os.Mkdir(confLocation, os.ModePerm) } err filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error { if f nil { return err } if f.IsDir() { return nil } ext : strings.ToLower(path.Ext(location)) if ext .yml || ext .yaml { archaius.AddFile(location) } return nil }) ... }) }
上述代码中 InitializeConfig()函数对config.CONFIG进行了赋值也是读取配置文件内容的真身。 「未完待续……」
点击下方标题可阅读技术文章
「连载」边缘计算一01-16边缘计算系统逻辑架构原理篇「连载」边缘计算二01-17边缘计算系统逻辑架构原理篇「连载」边缘计算三01-18边缘部分原理解析原理篇「连载」边缘计算四01-19边缘部分原理解析原理篇「连载」边缘计算五01-22边缘部分原理解析原理篇「连载」边缘计算六01-23边缘部分原理解析原理篇「连载」边缘计算七01-24边缘部分原理解析原理篇「连载」边缘计算八01-25边缘部分源码源码分析篇「连载」边缘计算九01-26边缘部分源码源码分析篇「连载」边缘计算十01-29边缘部分源码源码分析篇「连载」边缘计算十一01-30边缘部分源码源码分析篇