对Kubernetes API Server的相关术语进行介绍,后续会有新的文章对API请求流程、API Server的存储和扩展点等主题进行介绍。本篇是Kubernetes API Server系列第二篇。
术语解释
在简要概述了API Server和HTTP API空间及其属性之后,我们现在对文中使用的术语进行更正式的定义。像pod,service、endpoints、deployment等基元组成了Kubernetes类型的对象。我们使用以下术语:
Kind代表一个实体的类型。每个对象都有一个Kind字段,它告诉一个客户端(如kubectl或者oc)它具体代表的实体,如pod:
apiVersion: v1
kind: Pod
metadata:
name: webserver
spec:
containers:
– name: nginx
image: nginx:1.9
ports:
– containerPort: 80
有三种类型的Kind:
-
对象(Objects)表示系统中的一个持久实体。对象可能具有多个资源,客户端可以使用它们来执行特定的操作。例如:Pod和Namespace。
-
列表(Lists)是一个或多个种类的实体的资源集合。列表是一般元数据的有限集合。例如:PodLists和NodeLists。
-
特殊用途类别(Special purpose kinds)用于针对对象的特定操作,以及一些非持久化的实体(例如/binding或/status),发现使用APIGroup和APIResource,错误结果使用Status等。
API组(API Group):逻辑上关联的Kinds的集合。例如,所有批处理对象(batch objects)都在批处理API Group中,如Job和ScheduledJob。
版本(Version):每个API Group均存在多个版本。例如,一个组首先出现在v1alpha1中,然后升级到v1beta1,最后升级到v1。在某个版本(如v1beta1)中创建的对象,可以在每个兼容的版本(如v1)中检索到。API Server会进行无损的转换并返回所请求的版本中的对象。
资源(Resource):一个系统实体,以JSON格式通过HTTP进行发送和检索。资源可以暴露为单独的资源(如…/namespaces/default),或者资源集合(如…/jobs)。
使用API组(API Group)、版本(Version)和资源(Resource)可以唯一的定义一个HTTP路径:
更确切的说,Jobs的实际路是/apis/batch/v1/namespaces/$NAMESPACE/jobs。但是与类似节点(Node)这种资源相反,Jobs不是一个集群范围的资源。因此为了简洁,我们在路径中省略了$NAMESPACE这个字段。
需要注意的是Kinds不仅存在于不同的版本中,也可能同时存在于不同的API组之中。例如,Deployment最早处于扩展组(extension group)中,是alpha版本的Kind,后来Deployment升级到了GA版本,并位于自己的组apps.k8s.io中。因此,要唯一的识别Kind,需要同时使用API组(API Group)、版本(Version)和类型名称(Kind name)。
本文转移K8S技术社区-深度解析 | K8S API Server之专业术语