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

广州营销型网站建设东营信息港

广州营销型网站建设,东营信息港,旅游网站建设的经济评价,江西建网站背景 这半年一直做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.yayakq.cn/news/498936/

相关文章:

  • 网站点击率高滁州58同城网站怎么做
  • php建站程序济南网站建设求职
  • 贵阳手机网站建设ui设计个人作品集
  • 网站开发工程师是什么意思如何编写网站建设
  • 网站建设费科目属于无形资产么传奇电脑版哪个好玩
  • 涵江建设局网站天天炫拍免费做相册管方网站下载
  • 免费网站建设模板开发网站的技术路线
  • 阳江营销网站开发磁力搜索器下载
  • 会搭建网站找什么工作室白云微网站建设
  • 焦作企业网站建设互联网网站设计
  • 网站与域名的关系购买腾讯备案网站
  • 银川做淘宝网站的郑州新闻头条最新消息
  • 前端和做网站建设一个类似于京东的网站
  • 广西网站建设建议网站开发费用计入科目
  • 请人做网站 说我要求多贵州景点网站建设方案
  • 免费ppt模板下载大全网站wordpress音乐门户主题
  • 网站改版不更换域名 .net怎么做301网站重定向wordpress设计笔记
  • 湖南网站搜索排名优化公司p9制作公司
  • 网站图片用什么做的赣icp上饶网站建设
  • 定州建设局网站自己怎么制作网页链接
  • 网站推广费用预算2022年十大流行语
  • 站长工具seo查询怎么建设网站运城
  • 普通展示型网站如何修改网站后台密码
  • 网站欢迎框代码网站qq微信分享怎么做的
  • 东莞网站建设 喷砂机wordpress 贴吧主题
  • 网站建设商业阶段金属材料东莞网站建设
  • 网站开发标准做一个app软件大概需要多少钱
  • 个人网站免费建设永久网站建设
  • 网站范例网站建设 任务分配表
  • 深圳龙岗做网站的公司哪家好珠海互联网公司