Kubernetes API

    Kubernetes 控制面的核心是 。 API 服务器负责提供 HTTP API,以供用户、集群中的不同部分和集群外部组件相互通信。

    Kubernetes API 使你可以查询和操纵 Kubernetes API 中对象(例如:Pod、Namespace、ConfigMap 和 Event)的状态。

    大部分操作都可以通过 kubectl 命令行接口或类似 这类命令行工具来执行, 这些工具在背后也是调用 API。不过,你也可以使用 REST 调用来访问这些 API。

    如果你正在编写程序来访问 Kubernetes API, 可以考虑使用客户端库之一。

    完整的 API 细节是用 OpenAPI 来表述的。

    Kubernetes API 服务器通过 端点提供聚合的 OpenAPI v2 规范。 你可以按照下表所给的请求头部,指定响应的格式:

    Kubernetes 为 API 实现了一种基于 Protobuf 的序列化格式,主要用于集群内部通信。 关于此格式的详细信息,可参考 Kubernetes Protobuf 序列化设计提案。 每种模式对应的接口描述语言(IDL)位于定义 API 对象的 Go 包中。

    特性状态: Kubernetes v1.24 [beta]

    发现端点 被提供用来查看可用的所有组、版本列表。 此列表仅返回 JSON。这些组、版本以下面的格式提供:

    为了改进客户端缓存,相对的 URL 会指向不可变的 OpenAPI 描述。 为了此目的,API 服务器也会设置正确的 HTTP 缓存标头 (Expires 为未来 1 年,和 Cache-Controlimmutable)。 当一个过时的 URL 被使用时,API 服务器会返回一个指向最新 URL 的重定向。

    Kubernetes API 服务器会在端点 /openapi/v3/apis/<group>/<version>?hash=<hash> 发布一个 Kubernetes 组版本的 OpenAPI v3 规范。

    请参阅下表了解可接受的请求头部。

    OpenAPI v3 查询的合法请求头部值
    头部可选值说明
    Accept-Encodinggzip不提供此头部也是可接受的
    Acceptapplication/com.github.proto-openapi.spec.v3@v1.0+protobuf主要用于集群内部使用
    application/json默认
    application/json 形式返回

    Kubernetes 通过将序列化状态的对象写入到 中完成存储操作。

    为了更容易消除字段或重组资源的呈现方式,Kubernetes 支持多个 API 版本,每个版本位于不同的 API 路径, 例如 /api/v1/apis/rbac.authorization.k8s.io/v1alpha1

    版本控制是在 API 级别而不是在资源或字段级别完成的,以确保 API 呈现出清晰、一致的系统资源和行为视图, 并能够控制对生命结束和/或实验性 API 的访问。

    为了更容易演进和扩展其 API,Kubernetes 实现了 , 这些 API 组可以被启用或禁用

    例如,假设针对相同的资源有两个 API 版本:v1v1beta1。 如果你最初使用其 API 的 v1beta1 版本创建了一个对象, 你稍后可以使用 v1beta1v1 API 版本来读取、更新或删除该对象, 直到 v1beta1 版本被废弃和移除为止。此后,你可以使用 API 继续访问和修改该对象。

    任何成功的系统都要随着新的使用案例的出现和现有案例的变化来成长和变化。 为此,Kubernetes 已设计了 Kubernetes API 来持续变更和成长。 Kubernetes 项目的目标是 不要 给现有客户端带来兼容性问题,并在一定的时期内维持这种兼容性, 以便其他项目有机会作出适应性变更。

    一般而言,新的 API 资源和新的资源字段可以被频繁地添加进来。 删除资源或者字段则要遵从 API 废弃策略

    Kubernetes 对维护达到正式发布(GA)阶段的官方 API 的兼容性有着很强的承诺,通常这一 API 版本为 v1。 此外,Kubernetes 保持与 Kubernetes 官方 API 的 Beta API 版本持久化数据的兼容性, 并确保在该功能特性已进入稳定期时数据可以通过 GA API 版本进行转换和访问。

    如果你采用一个 Beta API 版本,一旦该 API 进阶,你将需要转换到后续的 Beta 或稳定的 API 版本。 执行此操作的最佳时间是 Beta API 处于弃用期,因为此时可以通过两个 API 版本同时访问那些对象。 一旦 Beta API 结束其弃用期并且不再提供服务,则必须使用替换的 API 版本。

    说明:

    尽管 Kubernetes 也努力为 Alpha API 版本维护兼容性,在有些场合兼容性是无法做到的。 如果你使用了任何 Alpha API 版本,需要在升级集群时查看 Kubernetes 发布说明, 如果 API 确实以不兼容的方式发生变更,则需要在升级之前删除所有现有的 Alpha 对象。

    关于 API 版本分级的定义细节,请参阅 页面。

    1. 你可以使用来以声明式方式定义 API 服务器如何提供你所选择的资源 API。
    • 了解如何通过添加你自己的 来扩展 Kubernetes API。
    • 控制 Kubernetes API 访问页面描述了集群如何针对 API 访问管理身份认证和鉴权。
    • 通过阅读 了解 API 端点、资源类型以及示例。
    • 阅读 API 变更(英文) 以了解什么是兼容性的变更以及如何变更 API。