当前位置: 首页 > news >正文

那个网站教宝妈做辅食公司页面设计

那个网站教宝妈做辅食,公司页面设计,做app要不要建网站,怎么网站设计背景 这半年一直做k8s相关的工作,一直接触client-go controller-runtime kubebuilder,但是很少有文章将这三个的区别说明白,直接用框架是简单,但是出了问题就是黑盒,这不符合我的理念,所以这篇文章从头说起…

背景

这半年一直做k8s相关的工作,一直接触client-go controller-runtime kubebuilder,但是很少有文章将这三个的区别说明白,直接用框架是简单,但是出了问题就是黑盒,这不符合我的理念,所以这篇文章从头说起

sample-controller

官方的sample-controller,就是最简单controller,这个项目就用了client-go来实现controller
在这里插入图片描述
这是一张在网上被玩烂的图,特别的好,分为上下两部分,上面就是client-go的informer机制(informer机制网上一大堆我就不说了,一句话总结所谓的 Informer,就是一个自带缓存和索引机制,可以触发 Handler 的客户端库),下面就是实现controller的思路。我主要说下半部分(6)调度event handler,就是调用AddFunction、UpdateFunction、DeleteFunction,这几个方法做了什么事呢?(7)就是将对象的key放到了workqueue工作队列中(8)就是不断的从工作队列读取key(9)就是根据key从indexer中取对象,然后做处理。所以说如果自己写controller就要去实现下半部分。

controller-runtime

在这里插入图片描述
controller-runtime,我的理解就是方便用户去写custom controller的,让用户的关注点只关心写处理逻辑,也就是reconciler,在看一下之前的那一张图(6)(7)(8)都是固定的套路,只有handle object这一步才是处理逻辑,所以controller干的事就是帮用户处理了(6)(7)(8)。congtroller中引入了几个新的概念:
Manager:需要管理器来创建和启动控制器(可以有多个控制器与管理器关联),sample-controller中需要自己controller := NewController和controller.Run,现在manager帮你干了,你只需要写run里面的东西

Reconciler:用户需要关心的地方,也就上图handle object那部分。上图(9)部分

Cache:之前你的代码需要操作informer,现在不需要了,直接操作cache就可以,前面我也说过Informer就是一个自带缓存和索引机制,可以触发 Handler 的客户端库

Controller: 一方面向 Informer 注册 eventHandler,另一方面从队列中获取数据。controller 将从队列中获取数据并执行用户自定义的 Reconciler 功能。上图(6)(7)(8)部分

我把上图用大白话说一下,controller向informer注册event handler(AddFunction、UpdateFunction、DeleteFunction,这些handler就是将对象的key写到工作队列中),cache负责把informer启动起来,让informer list、watch k8s,当有对象发生变化了informer调用之前注册进来的event handler,将对象的key放到work queue工作队列中,controller不断的从work queue工作队列中获取对象的key,然后调用用户自己写的Reconciler程序。Reconciler的逻辑就是拿着key从cache中获取到对象,然后将对象协调成期望的状态。

在这里插入图片描述
上面这张图总结了哪部分是client-go,哪部分是controller-runtime,哪部分是需要用户自己写代码的地方,可以看出来只需要关心绿色的部分,其实也就是之前handle object那部分,剩下的controller-runtime都帮你干了,看着图细想一下,首先是manager的client和cache,你写的哪个控制器都是在和k8s的api进行交互,所以一个是和k8s连接的客户端,一个是k8s对象的缓存数据,controller 负责注册event handler,并且从workqueue中读取对象,最后负责调用用户自己写的reconciler。

kubebuilder

kubebuilder是对controller的进一层封装,我们用代码说话

下面是controller-runtime的main

func main() {mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{})// in a real controller, we'd create a new scheme for thiserr = api.AddToScheme(mgr.GetScheme())if err != nil {setupLog.Error(err, "unable to add scheme")os.Exit(1)}err = ctrl.NewControllerManagedBy(mgr).For(&api.ChaosPod{}).Owns(&corev1.Pod{}).Complete(&reconciler{Client: mgr.GetClient(),scheme: mgr.GetScheme(),})if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {setupLog.Error(err, "problem running manager")os.Exit(1)}
}

下面是kubebuilder的main

func main() {mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{Scheme:                 scheme,})if err = (&controller.abcReconciler{Client: mgr.GetClient(),Scheme: mgr.GetScheme(),}).SetupWithManager(mgr); err != nil {setupLog.Error(err, "unable to create controller", "controller", "abcCluster")os.Exit(1)}setupLog.Info("starting manager")if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {setupLog.Error(err, "problem running manager")os.Exit(1)}
}

有没有感觉非常的像,貌似多了一个SetupWithManager,点进去看一下

func (r *abcReconciler) SetupWithManager(mgr ctrl.Manager) error {return ctrl.NewControllerManagedBy(mgr).For(&infrastructurev1alpha1.Abc{}).Complete(r)
}

仔细对比一下,是不是发现就是controller runtime里面的NewControllerManagedBy,我没有再仔细看下去,但是我觉得就是又对controller封装了一下,提供给了开发者更简单的使用方式。

总结

具体的可以边用边看,但是思路一定要理清,不然上来就用kubebuilder出了问题真的不知道发生了什么。

http://www.khdw.cn/news/55404.html

相关文章:

  • 新疆交通建设管理局网站管网人员优化是什么意思
  • 工信部企业网站认证页优化软件
  • 苏州公司网站建设百度刷排名百度快速排名
  • 信誉好的武进网站建设免费的网络推广有哪些
  • 企业做网站还是做平台好产品软文案例
  • 中国做网站知名的公司怎么提高百度搜索排名
  • 视频网站管理系统常见的网站推广方法
  • 电商网站更适合排名怎么优化快
  • 有哪些小公司网站新手如何做网上销售
  • 网站页面报价公司全网推广
  • 定制网站要多少钱搜索引擎关键词的工具
  • 做网站步骤百度联系方式
  • 2017年政府网站建设seo外包一共多少钱
  • 西藏城乡住房建设厅网站企业培训课程名称大全
  • wordpress最大负载seo入门书籍推荐
  • 做网站的公司算外包公司吗青岛seo霸屏
  • 找最新游戏做视频网站seo关键词的优化技巧
  • 网站开发目前用的是什么语言网络营销模式案例
  • 公司网站手机版模板宁阳网站seo推广
  • 网站要精细是什么意思网络营销的具体形式种类
  • 上海网站审核客服公司可以免费发外链的论坛
  • 凡科网可以免费做网站吗谷歌seo价格
  • 微网站和web网站首页个人网络销售平台
  • 网站品牌形象设计怎么做广告营销案例100例
  • 网站管理系统后台seo品牌
  • 网站建设是属于虚拟产品吗网站推广多少钱一年
  • 广州网站建设流程关键词seo价格
  • 自己做的网站怎么添加文档网络营销策划方案格式
  • 个人建立网站东莞营销网站建设直播
  • 怎么查看什么公司做的网站吗日本网站源码