本文发布时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

在 1.16 中删除的已弃用 API:你需要了解的内容

随着 Kubernetes API 的发展,API 会定期进行重组或升级。当 API 发展时,旧的 API 将被弃用并最终删除。

v1.16 版本将停止提供以下已弃用的 API 版本,转而使用更新、更稳定的 API 版本

  • extensions/v1beta1 API 版本中的 NetworkPolicy 将不再提供
    • 迁移到使用 networking.k8s.io/v1 API 版本,该版本自 v1.8 起可用。可以通过新版本检索/更新现有的持久化数据。
  • extensions/v1beta1 API 版本中的 PodSecurityPolicy
    • 迁移到使用 policy/v1beta1 API,该版本自 v1.10 起可用。可以通过新版本检索/更新现有的持久化数据。
  • extensions/v1beta1apps/v1beta2 API 版本中的 DaemonSet 将不再提供
    • 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。可以通过新版本检索/更新现有的持久化数据。
    • 值得注意的更改
      • 删除了 spec.templateGeneration
      • 现在需要 spec.selector,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级
      • spec.updateStrategy.type 现在默认为 RollingUpdate (extensions/v1beta1 中的默认值为 OnDelete)
  • extensions/v1beta1apps/v1beta1apps/v1beta2 API 版本中的 Deployment 将不再提供
    • 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。可以通过新版本检索/更新现有的持久化数据。
    • 值得注意的更改
      • 删除了 spec.rollbackTo
      • 现在需要 spec.selector,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级
      • spec.progressDeadlineSeconds 现在默认为 600 秒 (extensions/v1beta1 中的默认值是没有截止时间)
      • spec.revisionHistoryLimit 现在默认为 10 (apps/v1beta1 中的默认值为 2extensions/v1beta1 中的默认值是保留所有)
      • maxSurgemaxUnavailable 现在默认为 25% (extensions/v1beta1 中的默认值为 1)
  • apps/v1beta1apps/v1beta2 API 版本中的 StatefulSet 将不再提供
    • 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。可以通过新版本检索/更新现有的持久化数据。
    • 值得注意的更改
      • 现在需要 spec.selector,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级
      • spec.updateStrategy.type 现在默认为 RollingUpdate (apps/v1beta1 中的默认值为 OnDelete)
  • extensions/v1beta1apps/v1beta1apps/v1beta2 API 版本中的 ReplicaSet 将不再提供
    • 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。可以通过新版本检索/更新现有的持久化数据。
    • 值得注意的更改
      • 现在需要 spec.selector,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级

v1.22 版本将停止提供以下已弃用的 API 版本,转而使用更新、更稳定的 API 版本

  • extensions/v1beta1 API 版本中的 Ingress 将不再提供
    • 迁移到使用 networking.k8s.io/v1beta1 API 版本,该版本自 v1.14 起可用。可以通过新版本检索/更新现有的持久化数据。

如何操作

Kubernetes 1.16 计划于 2019 年 9 月发布,所以请务必立即审核您的配置和集成!

  • 更改 YAML 文件以引用较新的 API
  • 更新自定义集成和控制器以调用较新的 API
  • 更新第三方工具(入口控制器、持续交付系统)以调用较新的 API

迁移到新的 Ingress API 只需要更改 API 路径 - API 字段保持不变。但是,迁移其他资源(例如 Deployment)将需要根据更改的字段进行一些更新。您可以使用 kubectl convert 命令自动转换现有对象:kubectl convert -f <file> --output-version <group>/<version>

例如,要将较旧的 Deployment 转换为 apps/v1,您可以运行:kubectl convert -f ./my-deployment.yaml --output-version apps/v1。请注意,这可能会使用非理想的默认值。要了解有关特定资源的更多信息,请查看 Kubernetes API 参考

您可以通过启动禁用上述资源的 apiserver 来测试您的集群,以模拟即将到来的删除。将以下标志添加到 apiserver 启动参数

--runtime-config=apps/v1beta1=false,apps/v1beta2=false,extensions/v1beta1/daemonsets=false,extensions/v1beta1/deployments=false,extensions/v1beta1/replicasets=false,extensions/v1beta1/networkpolicies=false,extensions/v1beta1/podsecuritypolicies=false

想了解更多?

弃用会在 Kubernetes 发布说明中宣布。您可以在 1.141.15 中查看这些公告。

您可以在我们的 弃用策略文档 中阅读更多关于 Kubernetes API 和其他 Kubernetes 组件的弃用策略的信息。弃用策略因组件(例如,主要 API 与管理 CLI)和成熟度(alpha、beta 或 GA)而异。

这些细节也曾在 Kubernetes 1.14 和 1.15 发布时在 kubernetes-dev 邮件列表中发布过。来自 Jordan Liggitt

In case you missed it in the 1.15.0 release notes, the timelines for deprecated resources in the extensions/v1beta1, apps/v1beta1, and apps/v1beta2 API groups to no longer be served by default have been updated:

* NetworkPolicy resources will no longer be served from extensions/v1beta1 by default in v1.16. Migrate to the networking.k8s.io/v1 API, available since v1.8. Existing persisted data can be retrieved/updated via the networking.k8s.io/v1 API.
* PodSecurityPolicy resources will no longer be served from extensions/v1beta1 by default in v1.16. Migrate to the policy/v1beta1 API, available since v1.10. Existing persisted data can be retrieved/updated via the policy/v1beta1 API.
* DaemonSet, Deployment, StatefulSet, and ReplicaSet resources will no longer be served from extensions/v1beta1, apps/v1beta1, or apps/v1beta2 by default in v1.16. Migrate to the apps/v1 API, available since v1.9. Existing persisted data can be retrieved/updated via the apps/v1 API.

To start a v1.15.0 API server with these resources disabled to flush out dependencies on these deprecated APIs, and ensure your application/manifests will work properly against the v1.16 release, use the following --runtime-config argument:

--runtime-config=apps/v1beta1=false,apps/v1beta2=false,extensions/v1beta1/daemonsets=false,extensions/v1beta1/deployments=false,extensions/v1beta1/replicasets=false,extensions/v1beta1/networkpolicies=false,extensions/v1beta1/podsecuritypolicies=false