带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(十六)-阿里云开发者社区

开发者社区> 人民邮电出版社> 正文

带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理(十六)

简介: 带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.2Client-go 原理
+关注继续查看

2.2.8        Controller关于 Client-go典型场景


我们了解了Client-go的各个组件(Reflector、Informer、Indexer),Client-go中包含编写自定义Controller所使用的各种机制,这些机制在 Client-go库中的 Tools包和Util包中进行了定义。在 k8s中,可以利用 Client-go中提供的 Controller机制对所需资源的变化进行监控,根据资源状态的变化进行一系列操作。为加深对前面知识的理解,下面利用 Client-go工具实现一个简单的 Controller。


 

下面编写一个简易的 Controller,用于监听Pod 创建、删除信息,并将信息打印出来。Controller逻辑如下。

(1) 首先我们需要定义一个 Controller结构体,见代码清单 2-54

typeControllerstruct{

indexercache.Indexer//Indexer的引⽤

queue     workqueue.RateLimitingInterface//Workqueue的引⽤

informercache.Controller//Informer的引⽤


}

 

(2)  初始化一个 Controller,见代码清单 2-55

//将 WorkqueueInformerIndexer的引⽤作为参数返回⼀个新的Controller

funcNewController(queueworkqueue.RateLimitingInterface,indexercache.Indexer,informercache.Controller)*Controller{

return&Controller{informer:informer,indexer:indexer,queue:queue,

}

}


(3)  定义 Controller的工作流,见代码清单 2-56

func(c*Controller)Run(threadinessint,stopChchanstruct{}){deferruntime.HandleCrash()

deferc.queue.ShutDown()klog.Info("Startingpodcontroller")

//启动 Informer线程,Run函数做两件事情 :第⼀,运⾏⼀个 Reflector,并从 ListerWatcher

中获取对象的通知放到队列中(DeltaQueue);第⼆,从队列中取出对象并处理该对象相关业务goc.informer.Run(stopCh)

//等待缓存同步队列

if!cache.WaitForCacheSync(stopCh,c.informer.HasSynced){

runtime.HandleError(fmt.Errorf("Timeoutwaitngforcachestosync"))return

}

//启动多个Worker线程处理Workqueue中的Object


fori:=0;i<threadiness;i++{

gowait.Until(c.runWorker,time.Second,stopCh)

}

<-stopCh

klog.Info("StoppingPodcontroller")

}

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里巴巴的云原生与开发者 | 10月15号栖夜读
今天的首篇文章,讲述了 : 利用云原生技术构建应用简便快捷,部署应用轻松自如,运行应用按需伸缩。如今,云原生已经成为下一代技术发展的趋势。在 2019 杭州云栖大会开发者峰会上,阿里巴巴资深技术专家李响就为大家分享了阿里巴巴的云原生技术与开发者的那些故事。
2880 0
在linux,windows上安装ruby on rails开发环境
ruby是一个非常优秀的语言,ruby的精髓rails可以让web开发的效率成倍的提高,下面就介绍一下我搭建rails环境的过程。windows下搭建ruby rails web开发环境 本篇文章主要是在阿里云的服务器上搭建rails 1.
1825 0
Elasticsearch Top5典型应用场景
题记 刚接触Elasticsearch的朋友,或多或少会遇到一个问题,Elasticsearch在实际公司应用中除了搜索到底能做什么? 本文给出了答案。 除了“You Know, for Search”,Elasticsearch的使用会不断增长和变化。ObjectRocket作为一家托管云计算公司,已经在ObjectRocket平台上提供托管Elasticsearch一段时间了,并且能够看到我们客户之间的一些明确趋势以及他们如何使用该产品。以下是我们在平台上看到的Top5场景用例:
8 0
【云开发小课】云原生体系下Serverless弹性探索与实践
篇内容分享了云开发小课的云原生体系下serverless弹性探索与实践。
110 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载