本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
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/v1beta1 和 apps/v1beta2 API 版本中的 DaemonSet 不再提供
- 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。现有持久化数据可以通过新版本检索/更新。
- 主要变化
spec.templateGeneration
已移除spec.selector
现在是必需的,并且创建后不可变;使用现有模板标签作为选择器以实现无缝升级spec.updateStrategy.type
现在默认为RollingUpdate
(extensions/v1beta1
中的默认值为OnDelete
)
- extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API 版本中的 Deployment 不再提供
- 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。现有持久化数据可以通过新版本检索/更新。
- 主要变化
spec.rollbackTo
已移除spec.selector
现在是必需的,并且创建后不可变;使用现有模板标签作为选择器以实现无缝升级spec.progressDeadlineSeconds
现在默认为600
秒(extensions/v1beta1
中的默认值为无截止日期)spec.revisionHistoryLimit
现在默认为10
(apps/v1beta1
中的默认值为2
,extensions/v1beta1
中的默认值为保留所有)maxSurge
和maxUnavailable
现在默认为25%
(extensions/v1beta1
中的默认值为1
)
- apps/v1beta1 和 apps/v1beta2 API 版本中的 StatefulSet 不再提供
- 迁移到使用 apps/v1 API 版本,该版本自 v1.9 起可用。现有持久化数据可以通过新版本检索/更新。
- 主要变化
spec.selector
现在是必需的,并且创建后不可变;使用现有模板标签作为选择器以实现无缝升级spec.updateStrategy.type
现在默认为RollingUpdate
(apps/v1beta1
中的默认值为OnDelete
)
- extensions/v1beta1、apps/v1beta1 和 apps/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
- 更新第三方工具(Ingress 控制器、持续交付系统)以调用新的 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
想了解更多?
废弃的 API 会在 Kubernetes 发行说明中公布。您可以在 1.14 和 1.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