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都相应先后被删除。