Kubernetes - API

Kubernetes API是系统声明性配置架构的基础. Kubectl 命令行工具可用于创建,更新,删除和获取API对象. Kubernetes API是Kubernetes不同组件之间的沟通者.

向Kubernetes添加API

向Kubernetes添加新API将为Kubernetes添加新功能,这将增加Kubernetes的功能.但是,它还会增加系统的成本和可维护性.为了在成本和复杂性之间建立平衡,有一些为它定义的集合.

添加的API应该对50%以上的用户有用.没有其他方法可以在Kubernetes中实现该功能.在Kubernetes的社区会议中讨论了特殊情况,然后添加了API.

API更改

为了提高Kubernetes的能力,变化不断引入系统.它是由Kubernetes团队完成的,用于向Kubernetes添加功能,而不会删除或影响系统的现有功能.

为了演示一般过程,这里是一个(假设的)示例 :

  • 用户将Pod对象POST到/api/v7beta1/...

  • 将JSON解组为 v7beta1.Pod 结构

  • 默认值应用于 v7beta1.Pod

  • v7beta1.Pod 转换为 api.Pod 结构

  • 验证 api.Pod ,并将任何错误返回给用户

  • api.Pod 转换为v6.Pod(因为v6是最新的稳定版本)

  • v6.Pod 编组为JSON并写入 etcd

现在我们已经存储了Pod对象,用户可以在任何支持的API版本中获取该对象.例如 :

  • 用户从/api/v5/...

  • JSON从 etcd unmarshalled 读入 v6.Pod 结构

  • 默认值适用于 v6.Pod

  • v6.Pod 转换为api.Pod结构

  • api.Pod 转换为 v5.Pod 结构

  • v5.Pod 正在编组转换为JSON并发送给用户

此过程的含义是必须小心地向后兼容地进行API更改.

API版本控制

为了更容易支持多种结构,Kubernetes支持多个不同API路径的API版本,例如/api/v1 /apsi/extensions/v1beta1

Kubernetes的版本标准在多个标准中定义.

Alpha等级

  • 此版本包含alpha(例如v1alpha1)

  • 此版本可能有错误;启用的版本可能有错误

  • 任何时候都可以删除对错误的支持.

  • 建议仅在短期测试中使用,因为支持可能不会一直存在.

Beta Level

  • 版本名称包含beta(例如v2beta3)

  • 代码已经过全面测试,启用的版本应该是稳定的.

  • 不会删除该功能的支持;可能会有一些细微的变化.

  • 建议仅用于非关键业务用途,因为后续版本可能会发生不兼容的更改.

稳定水平

  • 版本名称为 vX 其中 X 是一个整数.

  • 功能的稳定版本将出现在已发布的软件中许多后续版本.