带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(九)-阿里云开发者社区

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

带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(九)

简介: 带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析
+关注继续查看

3.3.5       Cache

 

1. Cache是什么

 

Kubernetes是典型的 Server-Client的架构,APIServer 作为集群统一的操作入口,任何对资源所做的操作(包括增删改查)都必须经过 APIServer。为了减轻 APIServer的压力,Controller-runtime 抽象出一个 Cache层,Client端对 APIServer 数据的读取和监听操作都将通过 Cache层来进行。

Cache 接口的实现见代码清单3-44。

typeCacheinterface{client.Reader


Informers


}

 

Cache接口定义了如下两个接口。

(1)  client.Reader:用于从 Cache中获取及列举 Kubernetes集群的资源。

(2)   Informers:可为不同的 GVK创建或获取对应的 Informer,并将 Index添加到对应的 Informer中。

2. Cache的初始化

 

在 ControllerManager的初始化启动过程中,将会构建 Cache层,以供 Manager使用。在用户没有指定 Cache初始化函数的前提下,将使用 Controller-runtime默认提供的Cache初始化函数,本节将依据默认提供的函数,阐述 Cache初始化的流程。

Controller-runtime提供的Cache初始化函数位于 pkg/cache/cache.go#L111下,完整的初始化流程如图 3-5所示。


image.png

 

 

图 3—5Cache 初始化流程

 

(1)  设置默认参数:若 Scheme为空, 则设置为 scheme.Scheme;若 Mapper为空, 则 通 过apiutil.NewDiscoveryRESTMapper基 于 Discovery的 信 息 构 建 出 一 个RESTMapper,用于管理所有 Object 的信息;若同步时间为空,则将 Informer的同步时间设置为 10小时。

(2)初始化 InformersMap,为 3种不同类型的Object(structured、unstructured、metadata-only)分别构建 InformersMap。

(3)初始化 specificInformersMap:该接口通过 Object与 GVK的组合信息创建并缓存 Informers。

(4)定义 List-Watch函数:为 3种不同类型的Object实现 List-Watch函数,通过该函数可对GVK进行 List和 Watch操作。

通过Cache的初始化流程,我们可以看出 Cache主要创建了InformersMap,Scheme中的每个GVK都会创建对应的Informer,再通过informersByGVK的Map,实现GVK到Informer的映射;每个Informer都会通过List-Watch函数对相应的GVK进行List和Watch操作。

3. Cache的启动

 

Cache启动的核心是启动创建的所有Informer(见代码清单3-45)。

func(ip*specificInformersMap)Start(ctxcontext.Context){


func(){

...

//Starteachinformer

for_,informer:=rangeip.informersByGVK{goinformer.Informer.Run(ctx.Done())

}

...


}

 

Informer 的启动流程主要包含以下3个步骤,具体实现细节可参考2.2.6节。

(1)  初始化 DeltaFIFO队列。

(2)  创建内部 Controller:配置 DeltaFIFO 队列和事件的处理函数。

(3)  启动 Controller:创建 Reflector,负责监听 APIServer上指定的 GVK,将 Add、Update、Delete变更事件写入 DeltaFIFO 队列中,作为变更事件的生产者;Controller中的事件处理函数HandleDeltas() 会消费这些变更事件,负责将更新写入本地 Indexer,同时将这些 Add、Update、Delete事件分发给之前注册的监听器。

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

相关文章
JavaWeb网站性能优化的相关技术
  一、提高服务器并发处理能力   我们总是希望一台服务器在单位时间内能处理的请求越多越好,这也成了web服务器的能力高低的关键所在。服务器之所以可以同时处理多个请求,在于操作系统通过多执行流体系设计,使得多个任务可以轮流使用系统资源,这些资源包括CPU、内存以及I/O等。这就需要选择一个合适的并发策略来合理利用这些资源,从而提高服务器的并发处理能力。这些并发策略更多的应用在apache、nginx、lighttpd等底层web server软件中。   二、Web组件分离   这里所说的web组件是指web服务器提供的所有基于URL访问的资源,包括动态内容,静态网页,图片,样式表,脚
8 0
Java编程——Redis详解
  Redis简介   Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。   Redis 与其他 key - value 缓存产品有以下三个特点:   Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis支持数据的备份,即master-slave模式的数据备份。Redis 优势:性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型 –
6 0
无服务器计算的机器学习,出路在哪里?(一)
本文重点关注了基于无服务器计算的机器学习的最新研究进展,并通过四篇研究论文表明了无服务器 ML 框架在执行机器学习任务时性能远优于经典的基于粗粒度的 VM 集群的ML框架。
3 0
Java-Redis笔记
  Redis   1. 概念: redis是一款高性能的NOSQL系列的非关系型数据库   1.1.什么是NOSQL   NoSQL(NoSQL=Not Only SQL),意即“不仅仅是SQL”,是一项全新的数据库理念,泛指非关系型的数据库。   随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
7 0
2020年要过去了,这些新技术带来的问题还在
2020 年是 AI 逐渐深入生活,倒逼各行业数字化转型的一年。与此同时,随着新技术的产生,也开始带来不少麻烦与问题。如何正确理解新技术,并像解题一样,解决与之相伴的新问题,成为一项考验。
4 0
【期末复习】计算机网络 谢希仁版(五)运输层(重点)
目录 运输层 1. 网络进程间的通信,端口号,套接字,在网络上唯一标识一个进程 2. UDP 与 TCP 2.1 端口 2.2 UDP 2.2.1 概述 2.2.2 首部格式 2.3 TCP 2.3.1 特点 3. TCP 报文段首部 4. TCP 连接建立,连接释放 4.1 TCP 连接建立,三次握手 4.2 TCP 连接释放,四次挥手 5. 可靠传输 5.1 工作原理 5.1.1 停止等待协议 5.1.2 连续ARQ协议 5.2 具体实现 5.2.1 以字节为单位的滑动窗口 5.2.2 超时重传时间的选择 5.2.3 选择确认SACK 6. TCP 窗口机制 7. TCP 的超时重传时间计
4 0
我与ECS
作为一名计算机专业的学生!服务器是基本刚需!学习docker!学习redis!学习运维!学习云部署!学习ngix!我只能说!ECS是真的香!
9 0
NLP携手Transformer跨界计算机视觉!DETR:目标检测新范式
自 Transformer 被提出以来,便席卷了整个 NLP 领域。其实,它还可以用来进行目标检测。Facebook AI 的研究者首先推出了 Transformer 视觉版本——Detection Transformer(DETR),填补了 Transformer 用于目标检测的空白,对标超越 Faster RCNN。基于 DETR,研究者们提出了多种优化版本进行目标检测任务,效果还不错。
4 0
使用Java程序消费SAP Leonardo的机器学习API
使用Java程序消费SAP Leonardo的机器学习API
4 0
Java 并发与高并发知识学习
  一、并发与高并发基本概念   并发:   从业务上简单解释就是多个用户(编码层面就是多个线程)共同竞争(修改或读取)一个资源,并发问题更多体现在业务代码操作数据上,例如:秒杀场景,瞬间会有大量用户共同抢购一个商品,这时候如果没有并发控制,则极有可能出现超卖情况,即库存被扣成了负数。   从操作系统以及硬件层面解释并发:有多个线程运行在CPU上,当在单核处理上运行的时候,多个线程在单核处理上交替执行(伪并行),不断的从内存中换入换出,在多核处理器上每个线程会被分配到某一个内核上运行(并行),我觉得更适合叫并行计算。
8 0
472
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载