深度解析 | K8S 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路径:


深度解析 | K8S API Server之专业术语



更确切的说,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)。



上一篇:数字图像与机器视觉基础补充(1)


下一篇:Django 小实例S1 简易学生选课管理系统 6 实现登录逻辑