2

Kubernetes APIServer CRD 架构设计源码阅读 | 云原生社区

 3 years ago
source link: https://cloudnative.to/blog/kubernetes-apiserver-crd/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

大家好,我是杨鼎睿,这一次给大家带来的是 API Server 的源码阅读。包括之前的 etcd 源码阅读,整个 API Server 共 109 张源码及源码图,文章最后有 API Server 系列目录。欢迎大家的阅读。

本文研究了 CRD 部分的源码,配备源码进行进一步理解,可以加深理解,增强相关设计能力。

ResourceConfig

Default Configuration

image.png

开启的资源配置及禁用的版本

image.png

Extend

image.png

开启选型如下

image.png

Runtime Support

image.png

三者如下图所示

api-extension-server-runtime-support.svg

Storage

Custom Resource Definitions

api-extension-server-rest-storage.svg

Store 展开后如下图所示

api-extension-server-rest-store.svg

State Transition

Landscape

SharedInformerFactory 用于创建 SharedIndexInformer,后者会周期性的使用 Clientset 连接版本为 v1beta1 或 v1 的 API Extension Services,获取到状态变更后,通知各自的 ResourceEventHandler。在此,还有一些问题需要深入挖掘:

  • SharedInformerFactory 如何区分不同类型的资源状态变更
  • ResourceEventHandler 是否能同时关注不同类型资源状态的变更
  • 资源状态变更是如何获取到的

api-extension-server-shared-informer-relations.svg

Clientset

Clientset 功能相对简单,将可用的 API Extension Services 进行封装,每个 RESTClient 都连接在 “Loopback” 地址上,并向不同的服务发送请求。

api-extension-server-clientset.svg

SharedInformerFactory

Relationship

api-extension-server-shared-informer-workflow.svg

Add Informers

api-extension-server-add-informer.svg

Management

EstablishingController

EstablishingController 启动后,会启动一个定时执行任务,这个任务每秒检查队列里是否有新的 Key 值,如果有,则更新 Server 端对应资源状态为 Established

api-extension-server-establishing-controller.svg

sync 代码如下

image.png

CRD Handler

api-extension-server-crd-controller.svg

CRD Handler 向 SharedIndexInformer 注册事件处理,Watch 的对象类型 Update 时,则有可能是状态变为 Established 状态,需要向 EstablingController 发送。

CRD Handler 处理请求时,首先检查缓存是否包含请求对象,如果有,返回缓存对象;如果没有,则向 Server 请求,并更改缓存状态。

CRD Controller

api-extension-server-crd-controller.svg

[3] API Server


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK