kubeedge 源码分析之 cloudcore 主流程

309 阅读1分钟

cloudcore 是 kubeedge 的核心云端部分,包含三个模块:cloudhub,edgecontroller,devicecontroller

cloudhub 是一个负责监听云端改动,缓存和发送消息给 edgehub 的 web 服务器. edgecontroller 是一个 k8s 的扩展控制器,用于管理边缘节点和 pods 元信息,以便数据可以发送到一个特定节点. devicecontroller 是一个扩展的 k8s 控制器,用于管理设备,以便设备元信息/状态可以在云端和边缘端之间同步.

cloud/cmd/cloudcore/cloudcore.go 中

func main() {
	command := app.NewCloudCoreCommand()
    ...
	if err := command.Execute(); err != nil {
		os.Exit(1)
	}
}

cloud/cmd/cloudcore/app/server.go 中

func NewCloudCoreCommand() *cobra.Command {
    ...
    registerModules(config)
    ...
    core.Run()
    ...
}

func registerModules(c *v1alpha1.CloudCoreConfig) {
	cloudhub.Register(c.Modules.CloudHub, c.KubeAPIConfig)
	edgecontroller.Register(c.Modules.EdgeController, c.KubeAPIConfig, "", false)
	devicecontroller.Register(c.Modules.DeviceController, c.KubeAPIConfig)
	synccontroller.Register(c.Modules.SyncController, c.KubeAPIConfig)
	cloudstream.Register(c.Modules.CloudStream)
}

vendor/github.com/kubeedge/beehive/pkg/core/core.go 中

func StartModules() {
	beehiveContext.InitContext(beehiveContext.MsgCtxTypeChannel)

	modules := GetModules()
	for name, module := range modules {
		beehiveContext.AddModule(name)
		beehiveContext.AddModuleGroup(name, module.Group())
		go module.Start()
	}
}

func GracefulShutdown() {
	c := make(chan os.Signal)
	signal.Notify(c, syscall.SIGINT, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGKILL,
		syscall.SIGQUIT, syscall.SIGILL, syscall.SIGTRAP, syscall.SIGABRT)
	select {
	case s := <-c:
		beehiveContext.Cancel()
		modules := GetModules()
		for name, _ := range modules {
			beehiveContext.Cleanup(name)
		}
	}
}

func Run() {
	StartModules()
	GracefulShutdown()
}