REST API是Kubernetes系统的重要部分,组件之间的所有操作和通信均由API Server处理的REST API调用,大多数情况下,API定义和实现都符合标准的HTTP REST格式,可以通过 kubectl命令管理工具或其他命令行工具来执行。
API 版本
为了在兼容旧版本的同时不断升级新的API,Kubernetes支持多种API版本,每种API版本都有不同的API路径,例如/api/v1或 /apis/extensions/v1beta1。
API版本规则是通过基于API level选择版本,而不是基于资源和域级别选择,是为了确保API能够描述一个清晰的连续的系统资源和行为的视图,能够控制访问的整个过程和控制实验性API的访问。
- JSON和Protobuf序列化模式遵循相同的模式变化原则,以下所有描述都涵盖了这两种模式。
需要注意,API版本和软件的版本没有直接关系,不同API版本有不同程度稳定性,API文档中详细描述了每个级别的标准。
-
Alpha级别:
- 包含alpha名称的版本(例如v1alpha1)。
- 该软件可能包含错误。启用一个功能可能会导致bug。默认情况下,功能可能会被禁用。
- 随时可能会丢弃对该功能的支持,恕不另行通知。
- API可能在以后的软件版本中以不兼容的方式更改,恕不另行通知。
- 该软件建议仅在短期测试集群中使用,因为错误的风险增加和缺乏长期支持。
-
Beta级别:
- 包含beta名称的版本(例如v2beta3)。
- 该软件经过很好的测试。启用功能被认为是安全的。默认情况下功能是开启的。
- 细节可能会改变,但功能在后续版本不会被删除
- 对象的模式或语义在随后的beta版本或Stable版本中可能以不兼容的方式发生变化。如果这种情况发生时,官方会提供迁移操作指南。这可能需要删除、编辑和重新创建API对象。
- 该版本在后续可能会更改一些不兼容地方,所以建议用于非关键业务,如果你有多个可以独立升级的集群,你也可以放宽此限制。
- 大家使用过的Beta版本后,可以多给社区反馈,如果此版本在后续更新后将不会有太大变化。
-
Stable级别:
- 该版本名称命名方式:vX这里X是一个整数。
- Stable版本的功能特性,将出现在后续发布的软件版本中。
API groups
API groups使得Kubernetes API的扩展更加方便。API groups是在REST路径和序列化对象的apiVersion字段中被指定。
目前,有几个API groups在使用:
- 核心(also called legacy)组,REST路径在/api/v1,但此路径不是固定的,v1是当前的版本。与之相对应的代码里面的apiVersion字段的值为v1。
- Named Groups,REST路径被指定在/apis/$GROUP_NAME/$VERSION中,并使用apiVersion: $GROUP_NAME/$VERSION(例如apiVersion: batch/v1)。在Kubernetes API参考引用中可以看到API Groups的完整列表。
使用自定义资源扩展API的两种方法:
- CustomResourceDefinition为有基本CRUD需求用户提供。
- 即将推出:需要有完整的Kubernetes API语义的用户,可以实现自定义的api server,并使用聚合器来无缝连接客户端。
启用API Groups
可以使用--runtime-config 在api server上设置来启用或禁用某些资源和API Groups。--runtime-config可以使用逗号分隔值。例如,要禁用batch / v1,set --runtime-config=batch/v1=false, to enable batch/v2alpha1, set --runtime-config=batch/v2alpha1。该标签接受逗号分隔的一组key = value对,描述了运行时的api server配置。
提示:启用和禁用Groups或资源需要重新启动apiserver和controller-manager确保--runtime-config更改生效。
启用组中的资源
DaemonSets,Deployments,HorizontalPodAutoscalers,Ingress,Jobs和ReplicaSets,都是默认启用的。可以通过--runtime-config在api server上设置来启用其他扩展资源。--runtime-config接受逗号来分隔值。例如,要禁用deployments和 jobs,请设置 --runtime-config=extensions/v1beta1/deployments=false,extensions/v1beta1/jobs=false