Etcd 储存核心实现

​ Eted 集群是分布式KV存储集群,提供了可靠的强一致性服务发现。Etcd 集群存储 Kubernetes 系统的集群状态和元数据,其中包括所有 Kubemetes 资源对象信息、 资源对象状态、集群节点信息等。Kubernetes 将所有数据存储至 Etcd 集群前缀为 /registry 的目录下。

Etcd 存储架构设计

​ Kuberetes 系统对Etcd 存储进行了大量封装,其架构是分层的,而每一层的封 装设计又拥有高度的可扩展性。

image-20230628110238016

1. RESTStorage

​ 实现了RESTful 风格的对外资源存储服务的 API 接口。

2. RegistryStore

​ 实现了资源存储的通用操作,例如,在存储资源对象之前执行某个函数( 即BeforeFunc ) ,在存储资源对象之后执行某个函数 (即 After Func ) 。

3. Storage.Intertace

​ 通用存储接口,该接口定义了资源的操作方法 (即 Create 、Delete 、Watch 、WatchList.Get、GetToList 、List、GuaranteedUpdate、Count 、Versioner 等方法)。

4. CacherStorage

​ 带有缓存功能的资源存储对象,它是 Storage.Interface 通用存储接又的实现。 CacherStorage 缓存层的设计有利于 Eted 集群中的数据能够获得快速的响应,并与 Etcd 集群数据保持一致。

5. UnderlyingStorage

​ 底层存储,也被称为 BackendStorage (后端存储),是真正与 Etcd 集群交互的资源存储对象,CacherStorage 相当 UnderlyingStorage 的缓存层。UnderlyingStorage 同样也是 Storage.Interface 通用存储接又的实现。

Kube-apiserver 架构设计详解

kube-apiserver 组件负责将 Kubernetes 的 “资源组、资源版本、资源” 以 RESTful 风格的形式对外暴露并提供服务。该组件Kubernetes 系统集群中所有组件沟通的桥梁, 例如在创建Pod 资源对象时,所有组件都需要与kube-apiserver组件进行交互。下图是pod资源对象创建流程。

image-20230629164834345

​ kube-apiserver 为丰富周边工具和库生态系统,提供了三种HTTP Server 服务,用于将庞大的kube-apiserver 组件功能进行解耦,这了种HTTPServer 分别是 APIExtensionsServer、KubeAPIServer 、AggregatorServer。不同服务的应用场景不同, 提供的资源也不同,但它们都可以通过 kubectl 工具或接又进行资源管理。

image-20230628144222804

  • APIExtensionsServer: API 扩展服务(扩展器)。该服务提供了CRD (CustomResourceDefinitions )自定义资源服务,开发者可通过CRD 对Kubernetes资源进行扩展,例如,通过 crd-example 扩展 Kubernetes 资源。 该服务通过 CustomResourceDefinitions 对象进管理, 并通过 extensionsapiserver.Scheme 资源注册表管理CRD相关资源。
  • Aggregatorserver: API 聚合服务(聚合器)。该服务提供了AA (APIAggregator )聚合服务,开发者可通过AA对Kubernetes聚合服务进 行扩展,例如,metrics-server是Kubernetes 系统集群的核心监控数据的聚 合器,它是AggregatorServer 服务的扩展实现。API 聚合服务通过 APIAggregator 对象进行管理,并通过 aggregatorscheme.Scheme 资源注册表管理AA 相关资源
  • KubeAPIServer: API 核心服务。该服务提供了 Kubernetes 内置核心资源服务, 不允许开发者随意更改相关资源,例如,Pod、Service 等内置核心资源会由 Kubernetes 官方维护。API 核心服务通过Master 对象进行管理,并通过 legacyscheme. Scheme 资源注册表管理Master 相关资源。