Etcd 储存核心实现
Eted 集群是分布式KV存储集群,提供了可靠的强一致性服务发现。Etcd 集群存储 Kubernetes 系统的集群状态和元数据,其中包括所有 Kubemetes 资源对象信息、 资源对象状态、集群节点信息等。Kubernetes 将所有数据存储至 Etcd 集群前缀为 /registry 的目录下。
Etcd 存储架构设计
Kuberetes 系统对Etcd 存储进行了大量封装,其架构是分层的,而每一层的封 装设计又拥有高度的可扩展性。
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资源对象创建流程。
kube-apiserver 为丰富周边工具和库生态系统,提供了三种HTTP Server 服务,用于将庞大的kube-apiserver 组件功能进行解耦,这了种HTTPServer 分别是 APIExtensionsServer、KubeAPIServer 、AggregatorServer。不同服务的应用场景不同, 提供的资源也不同,但它们都可以通过 kubectl 工具或接又进行资源管理。
- 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 相关资源。