3.1 Group、Version、Resource核心数据结构
在整个Kubernetes体系架构中,资源是Kubernetes最重要的概念,可以说Kubernetes的生态系统都围绕着资源运作。Kubernetes系统虽然有相当复杂和众多的功能,但它本质上是一个资源控制系统——注册、管理、调度资源并维护资源的状态。
在Kubernetes庞大而复杂的系统中,只有资源是远远不够的,Kubernetes将资源再次分组和版本化,形成Group(资源组)、Version(资源版本)、Resource(资源)。Group、Version、Resource核心数据结构如图3-1所示。
● Group:被称为资源组,在Kubernetes API Server中也可称其为APIGroup。
● Version:被称为资源版本,在Kubernetes API Server中也可称其为APIVersions。
● Resource:被称为资源,在Kubernetes API Server中也可称其为APIResource。
● Kind:资源种类,描述Resource的种类,与Resource为同一级别。
图3-1 Group、Version、Resource核心数据结构
Kubernetes系统支持多个Group,每个Group支持多个Version,每个Version支持多个Resource,其中部分资源同时会拥有自己的子资源(即SubResource)。例如,Deployment资源拥有Status子资源。
资源组、资源版本、资源、子资源的完整表现形式为<group>/<version>/<resource>/<subresource>。以常用的Deployment资源为例,其完整表现形式为apps/v1/deployments/status。
另外,资源对象(Resource Object)在本书中也是一个常用概念,由“资源组+资源版本+资源种类”组成,并在实例化后表达一个资源对象,例如Deployment资源实例化后拥有资源组、资源版本及资源种类,其表现形式为<group>/<version>,Kind=<kind>,例如apps/v1,Kind=Deployment。
每一个资源都拥有一定数量的资源操作方法(即Verbs),资源操作方法用于Etcd集群存储中对资源对象的增、删、改、查操作。目前Kubernetes系统支持8种资源操作方法,分别是create、delete、deletecollection、get、list、patch、update、watch操作方法。
每一个资源都至少有两个版本,分别是外部版本(External Version)和内部版本(Internal Version)。外部版本用于对外暴露给用户请求的接口所使用的资源对象。内部版本不对外暴露,仅在Kubernetes API Server内部使用。
注意:资源版本与资源外部版本/内部版本属于不同的概念,请参考3.5.1节“资源外部版本与内部版本”。
Kubernetes资源也可分为两种,分别是Kubernetes Resource(Kubernetes内置资源)和Custom Resource(自定义资源)。开发者通过CRD(即Custom Resource Definitions)可实现自定义资源,它允许用户将自己定义的资源添加到Kubernetes系统中,并像使用Kubernetes内置资源一样使用它们。
更多关于Kubernetes资源组、资源版本、资源(资源种类)的内容,请参考3.6节“Kubernetes内置资源全图”。