Kubernetes API是集群系统的重要组成部分,k8s中的各种资源对象的数据通过API接口被提交到后端的持久化存储(如etcd),而各部件之间通过该API接口实现解耦,kubectl通过API接口实现管理。

在Kubernetes中,大多数的API定义和实现符合标准的HTTP REST格式,同时也为某些非标准的REST行为实现了附加的API接口,比如Watch某个资源的变化、进入容器执行某个操作等。有些API接口并不返回单一的JSON对象,而是返回诸如JSON对象流(Stream)或非结构化的文本日志数据等。

Kubernetes使用swagger-ui提供API在线查询功能,运行在Master节点上的API Server进程提供swagger-ui访问地址

http://<master-ip>:<master-port>/swagger-ui/

API对象

在Kubernetes API中,顶层元素由kind、apiVersion、metadata、spec和status等组成。

kind

kind表明对象类别:

  • 对象(objects):系统中的永久资源(实体),如Pod、RC、Service、Namespace及Node等。客户端可以对这些对象创建、修改、删除和获取。

  • 列表(list):一个或多个资源类别的集合,如PodLists、ServiceLists、NodeLists。大部分定义在系统中的对象都会返回资源集合,某些对象可能是单例对象(singletons),如当前用户、系统默认用户等,而不存在列表

  • 简单类别(simple):作用在对象上的特殊行为和非持久实体,如Binding、Status。

apiVersion

apiVersion表明API版本号,当前版本默认只支持v1

Metadata

Metadata是资源对象的元数据定义,是集合类的元素类型,kubernetes的每个资源对象必须包含3种Metadata:

  • namespace:对象所属的命名空间,默认为default

  • name:对象名字,在命名空间是唯一的

  • uid:系统为每个对象生成的唯一ID

每种对象还应该包含的重要元数据:

  • labels:标签,用于对象组织和分类

  • annotations:注解,为Kubernetes内部进程或某些外部工具使用,用于存储和获取关于该对象的特定元数据

  • resourceVersion:识别资源内部版本号的字符串,客户端可用来判断资源是否改变

  • creationTimestamp:系统记录创建对象时的时间戳

  • deletionTimestamp:系统记录删除对象时的时间戳

  • selfLink:通过API访问自身的URL

spec

spec是集合类的元素类型,用户对需要管理的对象进行详细描述,并被保存到etcd中。

spec既包括用户提供的默认设置、默认值、属性初始化值,也包括在对象创建过程中由其他相关组件创建或修改的对象属性。

如果spec被删除,则对象将会从系统删除。

status

status用于记录对象在系统中的当前状态信息。以Pod为例,status信息主要包括conditions、containerStatuses、hostIP、phase、podIP、startTime等

  • phase:描述对象的生命周期阶段,包括Pending、Running、Active、Terminated等

  • condition:表示条件,由条件类型和状态值组成,目前仅有Ready,对应True、False、Unknown

API版本

为了在兼容旧版本的同时不断升级新的API,Kubernetes提供多版本API支持能力,每个版本的API通过版本号路径前缀进行区分,如/api/v1beta3.

2015年6月4日,Kubernetes v1版本API正式发布,而对应的v1beta1、v1beta2、v1beta3都相应先后被删除。

results matching ""

    No results matching ""