Kubernetes(以后简称k8s)集群通过提供一系列 API(基于OpenAPI规范),使用户可以简易查询与操作 k8s的资源对象状态。其关键在于k8s的控制平面中的kube-apiserver
组件以HTTP API形式将API暴露出来。即 用户与集群中的对象都是通过kube-apiserver提供的API进行通讯的。
k8s的HTTP API支持JSON和Protobuf 序列化语法来传参
API版本
为了平缓地进行添加或修改API,k8s设计了API版本的概念,即新的API或资源字段是在新的API版本上变更的,所以它能保持频繁的更新。
对应到k8s的配置文件上,API版本对应的关键字是apiVersion
比如每个k8s可接受的配置文件都要以apiVersion开头,举例如下:
apiVersion: v1
API级别
apiVersion分为三种级别,分别为可能会有bug随时变更特性的alpha
、经测试等待提建议与即时修正的beta
、稳定不变更的stable
alpha与beta版本的名称中分别包含两者的级别,举例,v1alpha1、v1beta3等;而stable版本仅由v与数字组成,如v1
API分组
为了简化扩展API方式,k8s使用API Groups(API组)进行标识。即通过指定REST URL来设置序列化对象的apiVersion值
。当前支持两类API Groups:
Core Groups(核心组)
:无分组标识,通常作为通用组,例:使用/api/v1
设置为apiVersion: v1
Named Groups(命名组)
:使用/apis/$GROUP_NAME/$VERSION
设置为apiVersion: $GROUP_NAME/$VERSION
,举例为batch/v1
开关API分组
通过--runtime-config
来开关相应的分组,举例:
-
禁用batch/v1,只需设置
--runtime-config=batch/v1=false
; -
开启使用batch/v2alpha1,设置
--runtime-config=batch/v2alpha1
即可。
此标记支持同时传入一系列用逗号分离的key=value对来动态修改运行中的配置
注意:开关API分组需重启kube-apiserver与kube-controller-manager以获取runtime-config配置的值
开启extensions/v1beta1组
在extensions/v1beta1的API组下的组件(DaemonSets, Deployments, StatefulSet, NetworkPolicies, PodSecurityPolicies and ReplicaSets)默认都是禁用的,开启deployments和daemonsets只需设置--runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/daemonsets=true
注意:为了通用性,个别资源的开关仅支持
extensions/v1beta1
持久化
所有的API资源对象都被序列化保存在etcd中