1. Kubernetes 核心资源概述
Kuberneles 系统虽然有相当复杂和众多的功能,但它本质上是一个资源控制系统——注册、管理、调度资源并维护资源的状态。
Kubernetes 将资源再次分组和版本化 , 形成 Group (资源组〉、 Version (资源版本)、 Resource (资源)。
- Group : 被称为资源组,在 Kubernetes API Server 中也可称其为 APIGroup.
- Version : 被称为资源版本,在 Kuberneles API Server 中也可称其为 APIVersions 。
- Resource: 被称为资源,在 Kubernetes API Server 中也可称其为 APIResource 。
- Kind: 资源种类,描述 Resource 的种类,与 Resource 为同一级别。
1.1 三者的关系
Kubemetes 系统支持多个 Group ,每个 Group 支持多个 Version, 每个 Version 支持多个 Resource , 其中部分资源同时会拥有自己的子资源(即 SubResource) 。例如,Deployment 资源拥有 Status 子资源。
组织形式: 资源组、资源版本、资源、子资源的完整表现形式为: <group>/<version>/<resource>/<subresource>。以常用的 Deployment 资源为 例,其 完整表现形式为 apps/v1/deployment/status
另外 , 资源对象 ( Resource Object ) ,由“资源组+资源版本+资源种类”组成 , 并在实例化后表达一个资源对象 ,例如 Deployment 资源实例化后拥有资源组、资源版本及资源种类,其表现形式为 <group>/<version>,Kind=<kind> ,例如 apps/v1, Kind=Deployment.
1.2 资源操作
每一个资源都拥有一定数量的资源操作方法(即 Verbs ) , 资源操作方法用于 Etcd 集群存储中对资源对象的增、删、改、查操作。
目前 Kubemetes 系统支持 8 种资源操作方法,分别是:
- create
- delete
- deletecollection
- get
- list
- patch
- update
- watch
1.3 组合关系
可以通过 Group、Version、Resource 结构来标识一个资源的资源组名称、资源版本及资源名称。Group、Version、Resource 简称 GVR。
2. Group
2.1 资源组的特点
Group (资源组),在 Kubernetes API Server 中也可称其为 APIGroup。 Kubemetes系统中定义了许多资源组,这些资源组按照不同功能将资源进行了划分,资源组特点如下:
- 将众多资源按照功能划分成不同的资源组,并允许单独启用/禁用资源组。当然也可以单独启用/禁用资源组中的资源
- 支持不同资源组中拥有不同的资源版本。这方便组内的资源根据版本进行法代升级
- 支持同名的资源种类(即 Kind ) 存在于不同的资源组内
- 资源组与资源版本通过 Kubernetes API Server 对外暴露,允许开发者通过 HTTP 协议进行交互并通过动态客户端( 即 DynamicClient )进行资源发现
- 支持 CRD 自定义资源扩展
- 用户交互简单,例如在使用 kubectl 命令行工具时,可以不填写资源组名称。
2.2 资源组结构体的源码定义
资源组数据结构体的定义位于: staging/k8s.io/apimachinery/pkg/apis/meta/vl/types.go
评论