📜  Kubernetes-API

📅  最后修改于: 2020-11-01 04:15:22             🧑  作者: Mango


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 / …获取Pod

  • etcd中读取JSON并将其解组v6.Pod结构

  • 默认值应用于v6.Pod

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

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

  • v5.Pod被编组为JSON并发送给用户

此过程的含义是必须谨慎且向后兼容地进行API更改。

API版本控制

为了更轻松地支持多种结构,Kubernetes在不同的API路径(例如/ api / v1/ apsi / extensions / v1beta1)中都支持多个API版本

Kubernetes的版本控制标准在多个标准中定义。

字母水平

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

  • 这个版本可能有错误;启用的版本可能存在错误

  • 可以在任何时间删除对错误的支持。

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

Beta级别

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

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

  • 该功能的支持不会被删除;可能会有一些小的变化。

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

稳定水平

  • 版本名称为vX ,其中X为整数。

  • 对于许多后续版本,功能的稳定版本将出现在发行的软件中。