Kubernetes将API分割为多个逻辑组合,称为API群组,它们支持单独启用或禁用,并能够再次分解。API Server支持在不同的群组中使用不同的版本,允许各组以不同的速度演进,而且也支持同一群组同时存在不同的版本,如apps/v1、apps/v1beta2和apps/v1beta1,也因此能够不同的群组中使用同名的资源类型,从而能在稳定版本的群组及新的实验群组中以不同的特性同时使用同一个资源类型。群组化管理的API使得其可以更轻松地进行扩展。当前系统的API Server上的相关信息可通过kubectl api-versions命令获取。
kubectl api-versions
admissionregistratioin.k8s.io/v1beta1
...
apps/v1
...
k8s的API以层级结构组织在一起,每个API群组表现为一个以/apis为根路径的REST路径,不过核心群组core有一个专用的简化路径/api/v1。常用API群组可归为如下两类:
核心群组:REST路径为/api/v1,在资源的配置信息apiVersion字段中引用时可以不指定路径,而仅给出版本,如apiVersioin:v1
命名的群组:REST路径为/apis/$GROUP_NAME/$VERSION
,例如/apis/apps/v1,它在apiVersioin字段中引用的格式为"apiVersion:$GROUP_NAME/$VERSION
",如apiVersion:apps/v1
总结起来,名称空间级别的每个资源类型在API中的URL路径表示都可简单抽象为形如"/apis/<group>/<version>/namespaces/<namespace>/<kind-plural>
"的路径,如default名称空间中Deployment类型的路径为/apis/apps/v1/namespaces/default/deployments,通过此路径可获取到default名称空间中所有Deployment对象的列表:
kubectl get --raw /apis/apps/v1/namespaces/default/deployments | jq .
{
"kind": "DeploymentList",
...
}
k8s API仅接受及响应JSON格式的数据(JSON对象),同时为了方便,也允许用户提供YAML格式的POST对象,但API Server需要事先自行将其转换为JSON格式后方能提交。通过kubectl get TYPE/NAME -o yaml命令获取任何一个对象的YAML格式的配置清单,或使用Kubectl get TYPE/NAME -o json命令获取JSON格式的配置清单。