k8s–基础–03–api


1、介绍

  1. API是系统声明式配置架构的基础。
  2. Kubectl命令行工具被用于创建、更新、删除、获取API对象。
  3. Kubernetes通过API资源存储自己的序列化状态(这些状态存储在etcd中)。
  4. Kubernetes被分成多个组件,各组件通过API相互交互。

1.1、描述了API的全部协议。

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md

1.2、描述了API的端点、资源类型和示例。

https://kubernetes.io/docs/reference/

1.3、描述了API的远程访问

https://kubernetes.io/docs/concepts/security/controlling-access/

1.4、API废弃流程

https://kubernetes.io/docs/reference/using-api/deprecation-policy/

1.5、API变更文档

https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md

1.6、API组


https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md

2、API变更

一般情况下,增加新的API资源和资源字段不会导致向下兼容性问题发生,但如果是需要删除一个已有的资源或者字段,那么必须通过API废弃流程来进行。可参考API变更文档,了解兼容性变更的要素以及如何变更API的流程

3、API 版本

Kubernetes支持多个API版本。每一个版本都在不同API路径下,例如

/api/v1
/apis/extensions/v1beta1。

我们选择在API级别进行版本化,而不是在资源或字段级别进行版本化,以确保API提供清晰、一致的系统资源和行为视图,并控制对已废止的API和实验性API的访问。

3.1、alpha:内部测试版本

  1. 版本名称包含了alpha (例如:v1alpha1)。
  2. 可能是有缺陷的。启用该功能可能会带来隐含的问题
  3. 默认情况是关闭的。
  4. 支持的功能可能在没有通知的情况下随时删除。
  5. API的更改可能会带来兼容性问题,但是在后续的软件发布中不会有任何通知。
  6. 由于bugs风险的增加和缺乏长期的支持,推荐在短暂的集群测试中使用。

3.1、beta-公测版本

  1. 版本名称包含了beta(例如:v2beta3)。
  2. 代码已经测试过。启用该功能被认为是安全的,功能默认已启用。
  3. 所有已支持的功能不会被删除,细节可能会发生变化。
  4. 对象的模式或语义可能会在后续的beta测试版或稳定版中以不兼容的方式进行更改。 发生这种情况时,我们将提供迁移到下一个版本的说明。 这可能需要删除、编辑和重新创建API对象。执行编辑操作时需要谨慎行事,这可能需要停用依赖该功能的应用程序。
  5. 建议仅用于非业务关键型用途,因为后续版本中可能存在不兼容的更改。 如果有多个可以独立升级的集群,则可以放宽此限制。

3.1、stable-稳定版本:

  1. 版本名称是vX,其中X是整数。
  2. 功能的稳定版本将出现在许多后续版本的发行软件中。

4、API组

为了更容易地扩展Kubernetes API,我们实现了API组。
API组在REST路径和序列化对象的apiVersion字段中指定。

4.1、目前有几个API组正在使用中:

  1. 核心组(通常被称为遗留组)
    1. 位于REST路径/api/v1
    2. 使用apiVersion:v1。
  2. 指定的组
    1. 位于REST路径/apis/ G R O U P N A M E / GROUP_NAME/ GROUPNAME/VERSION
    2. 使用apiVersion: G R O U P N A M E / GROUP_NAME/ GROUPNAME/VERSION(例如apiVersion:batch/v1)。
    3. 在Kubernetes API参考中可以看到支持的API组的完整列表。
      1. https://kubernetes.io/docs/reference/

4.2、社区支持使用以下两种方式来提供自定义资源对API进行扩展自定义资源

https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
  1. CustomResourceDefinition适用于具有非常基本的CRUD需求的用户。
    1. https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/
  2. 需要全套Kubernetes API语义的用户可以实现自己的apiserver,并使用聚合器为客户提供无缝的服务。
    1. https://kubernetes.io/docs/tasks/extend-kubernetes/configure-aggregation-layer/
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐