2.3.5 Kube-APIServer 架构
通常,Kubernetes API 中的每种资源都需要处理 REST 请求和管理对象的存储。核心的 Kubernetes API 服务处理内建的资源,如 Pod 或 Service。如果想为集群添加自定义资源对象,有以下两种方法可以实现。
(1) CRD 是最简单的方式,创建自定义资源对象的时候不需要编程。通常情况下,会将这个自定义资源与一个自定义资源的 Controller 结合使用,这就对外提供了一个真正的声明式 API。Controller 会同步自定义资源的当前状态和期望状态。
(2) Aggregation 可以让用户通过开发和部署单独的 APIServer 来实现自定义资源对象,核心的 Kube-APIServer 会将请求转发到 APIServer 处理,所有客户端都可以连接。
Kube-APIServer 提供了 3 种服务,分别是 APIExtensionsServer、KubeAPIServer和 AggregatorServer,它们为上述的应用场景提供不同的资源。
(1) APIExtensionsServer:用 户 可 以 通 过 CRD 的 方 式 扩 展 Kubernetes 的 服 务,APIExtensions Server 处理 CRD 和 CR 的 REST 请求,如果创建未经定义的 CR,则会返回404 的状态码。
(2) KubeAPIServer:这个服务是 Kubernetes 的核心服务,负责处理内置资源,如 Pod、Deployment 和 Service 等。
(3) AggregatorServer:用 户 可 以 通 过 Aggregation 方 式 扩 展 Kubernetes 的 服 务,Aggregator Server 负责将用户的请求转发给单独部署的各个 APIServer。
2.4 本章小结
本章介绍了 Operator 的原理:CRD 和 Controller。CRD 为我们提供了一种在 Kubernetes中扩展自定义资源的方式。Controller 用于监控自定义资源,当资源更新后,Controller会收到消息,执行具体的逻辑,将资源的实际状态调整到资源更新之后的期望状态。
本 章 还 介 绍了 Client-go:Client-go 库中包含了实现 Controller 的所有机制;KubeAPIServer:所有资源的操作请求都要通过 APIServer,要经过认证、鉴权和准入控制步骤进行处理。
如何快速实现自己的 Controller ?用户可以使用 Kubebuilder 构建 API、Controllers 和 Admission WebHooks,实现对 Kubernetes 的扩展。第 3 章将介绍 Kubebuilder。