# k8s API 概述
REST API 是 k8s 系统的重要部分,组件之间的所有操作和通信均由 API Server 处理的 REST API 调用,大多数情况下,API 定义和实现都符合标准的 HTTP REST 格式,可以通过 kubectl 命令管理工具或其他命令行工具来执行。
# API 版本
为了在兼容旧版本的同时不断升级新的 API,k8s 支持多种 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 使得 k8s 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)。在 k8s API 参考引用中可以看到 API Groups 的完整列表。
使用自定义资源扩展 API 的两种方法:
- CustomResourceDefinition 为有基本 CRUD 需求用户提供。
- 即将推出:需要有完整的 k8s 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