弃用 API 迁移指南
随着 Kubernetes API 的发展,API 会定期重新组织或升级。当 API 发展时,旧的 API 会被弃用,并最终被移除。此页面包含您在从弃用的 API 版本迁移到更新、更稳定的 API 版本时需要了解的信息。
按版本移除的 API
v1.32
v1.32 版本将停止提供以下弃用的 API 版本的服务
流量控制资源
flowcontrol.apiserver.k8s.io/v1beta3 版本的 FlowSchema 和 PriorityLevelConfiguration 将不再在 v1.32 中提供服务。
- 迁移清单和 API 客户端以使用 flowcontrol.apiserver.k8s.io/v1 API 版本,该版本自 v1.29 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- flowcontrol.apiserver.k8s.io/v1 中的显著变化
- PriorityLevelConfiguration
spec.limited.nominalConcurrencyShares字段仅在未指定时默认值为 30,显式值为 0 不会更改为 30。
- PriorityLevelConfiguration
v1.29
v1.29 版本停止提供以下弃用的 API 版本的服务
流量控制资源
flowcontrol.apiserver.k8s.io/v1beta2 版本的 FlowSchema 和 PriorityLevelConfiguration 自 v1.29 起不再提供服务。
- 迁移清单和 API 客户端以使用 flowcontrol.apiserver.k8s.io/v1 API 版本(自 v1.29 起可用)或 flowcontrol.apiserver.k8s.io/v1beta3 API 版本(自 v1.26 起可用)。
- 所有现有的持久化对象都可以通过新 API 访问
- flowcontrol.apiserver.k8s.io/v1 中的显著变化
- PriorityLevelConfiguration
spec.limited.assuredConcurrencyShares字段已重命名为spec.limited.nominalConcurrencyShares,并且仅在未指定时默认值为 30,显式值为 0 不会更改为 30。
- PriorityLevelConfiguration
- flowcontrol.apiserver.k8s.io/v1beta3 中的显著变化
- PriorityLevelConfiguration
spec.limited.assuredConcurrencyShares字段已重命名为spec.limited.nominalConcurrencyShares
- PriorityLevelConfiguration
v1.27
v1.27 版本停止提供以下弃用的 API 版本的服务
CSIStorageCapacity
storage.k8s.io/v1beta1 版本的 CSIStorageCapacity 自 v1.27 起不再提供服务。
- 迁移清单和 API 客户端以使用 storage.k8s.io/v1 API 版本,该版本自 v1.24 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
v1.26
v1.26 版本停止提供以下弃用的 API 版本的服务
流量控制资源
flowcontrol.apiserver.k8s.io/v1beta1 版本的 FlowSchema 和 PriorityLevelConfiguration 自 v1.26 起不再提供服务。
- 迁移清单和 API 客户端以使用 flowcontrol.apiserver.k8s.io/v1beta2 API 版本。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
HorizontalPodAutoscaler
autoscaling/v2beta2 版本的 HorizontalPodAutoscaler 自 v1.26 起不再提供服务。
- 迁移清单和 API 客户端以使用 autoscaling/v2 API 版本,该版本自 v1.23 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
targetAverageUtilization已替换为target.averageUtilization和target.type: Utilization。请参阅 基于多个指标和自定义指标的自动缩放。
v1.25
v1.25 版本停止提供以下弃用的 API 版本的服务
CronJob
batch/v1beta1 版本的 CronJob 自 v1.25 起不再提供服务。
- 迁移清单和 API 客户端以使用 batch/v1 API 版本,该版本自 v1.21 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
EndpointSlice
discovery.k8s.io/v1beta1 版本的 EndpointSlice 自 v1.25 起不再提供服务。
- 迁移清单和 API 客户端以使用 discovery.k8s.io/v1 API 版本,该版本自 v1.21 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- discovery.k8s.io/v1 中的显著变化
- 使用每个 Endpoint 的
nodeName字段,而不是弃用的topology["kubernetes.io/hostname"]字段 - 使用每个 Endpoint 的
zone字段,而不是弃用的topology["topology.kubernetes.io/zone"]字段 topology已替换为deprecatedTopology字段,该字段在 v1 中不可写
- 使用每个 Endpoint 的
Event
events.k8s.io/v1beta1 版本的 Event 自 v1.25 起不再提供服务。
- 迁移清单和 API 客户端以使用 events.k8s.io/v1 API 版本,该版本自 v1.19 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- events.k8s.io/v1 中的显著变化
type限制为Normal和WarninginvolvedObject已重命名为regarding- 在创建新的 events.k8s.io/v1 事件时,
action、reason、reportingController和reportingInstance是必需的 - 使用
eventTime,而不是弃用的firstTimestamp字段(已重命名为deprecatedFirstTimestamp,并且不允许在新的 events.k8s.io/v1 事件中使用) - 使用
series.lastObservedTime,而不是弃用的lastTimestamp字段(已重命名为deprecatedLastTimestamp,并且不允许在新的 events.k8s.io/v1 事件中使用) - 使用
series.count,而不是弃用的count字段(已重命名为deprecatedCount,并且不允许在新的 events.k8s.io/v1 事件中使用) - 使用
reportingController,而不是弃用的source.component字段(已重命名为deprecatedSource.component,并且不允许在新的 events.k8s.io/v1 事件中使用) - 使用
reportingInstance,而不是弃用的source.host字段(已重命名为deprecatedSource.host,并且不允许在新的 events.k8s.io/v1 事件中使用)
HorizontalPodAutoscaler
autoscaling/v2beta1 版本的 HorizontalPodAutoscaler 自 v1.25 起不再提供服务。
- 迁移清单和 API 客户端以使用 autoscaling/v2 API 版本,该版本自 v1.23 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
targetAverageUtilization已替换为target.averageUtilization和target.type: Utilization。请参阅 基于多个指标和自定义指标的自动缩放。
PodDisruptionBudget
policy/v1beta1 版本的 PodDisruptionBudget 自 v1.25 起不再提供服务。
- 迁移清单和 API 客户端以使用 policy/v1 API 版本,该版本自 v1.21 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- policy/v1 中的显著变化
- 在
policy/v1PodDisruptionBudget 中写入的空spec.selector({})会选择命名空间中的所有 Pod(在policy/v1beta1中,空spec.selector不会选择任何 Pod)。在任一 API 版本中,未设置的spec.selector不会选择任何 Pod。
- 在
PodSecurityPolicy
policy/v1beta1 API 版本中的 PodSecurityPolicy 自 v1.25 起不再提供服务,并且 PodSecurityPolicy 准入控制器将被移除。
迁移到 Pod 安全准入 或 第三方准入 Webhook。有关迁移指南,请参阅 从 PodSecurityPolicy 迁移到内置 Pod 安全准入控制器。有关弃用更多信息,请参阅 PodSecurityPolicy 弃用:过去、现在和未来。
RuntimeClass
node.k8s.io/v1beta1 API 版本中的 RuntimeClass 自 v1.25 起不再提供服务。
- 迁移清单和 API 客户端以使用 node.k8s.io/v1 API 版本,该版本自 v1.20 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
v1.22
v1.22 版本停止提供以下弃用的 API 版本的服务
Webhook 资源
admissionregistration.k8s.io/v1beta1 版本的 MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 自 v1.22 起不再提供服务。
- 迁移清单和 API 客户端以使用 admissionregistration.k8s.io/v1 API 版本,该版本自 v1.16 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
webhooks[*].failurePolicy默认值已从Ignore更改为Fail(适用于 v1)webhooks[*].matchPolicy默认值已从Exact更改为Equivalent(适用于 v1)webhooks[*].timeoutSeconds默认值已从30s更改为10s(适用于 v1)webhooks[*].sideEffects默认值已移除,该字段已变为必需,并且仅允许None和NoneOnDryRun(适用于 v1)webhooks[*].admissionReviewVersions默认值已移除,该字段已变为必需(适用于 v1)(AdmissionReview 支持的版本为v1和v1beta1)- 通过
admissionregistration.k8s.io/v1创建的对象,webhooks[*].name在列表中必须是唯一的
CustomResourceDefinition
apiextensions.k8s.io/v1beta1 版本的 CustomResourceDefinition 自 v1.22 起不再提供服务。
- 迁移清单和 API 客户端以使用 apiextensions.k8s.io/v1 API 版本,该版本自 v1.16 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
spec.scope不再默认设置为Namespaced,必须显式指定spec.version在 v1 中已移除;请使用spec.versions代替。spec.validation在 v1 中已移除;请使用spec.versions[*].schema代替。spec.subresources在 v1 中已移除;请使用spec.versions[*].subresources代替。spec.additionalPrinterColumns在 v1 中已移除;请使用spec.versions[*].additionalPrinterColumns代替。spec.conversion.webhookClientConfig在 v1 中已移至spec.conversion.webhook.clientConfig。spec.conversion.conversionReviewVersions在 v1 中已移至spec.conversion.webhook.conversionReviewVersions。- 在创建 v1 CustomResourceDefinition 对象时,
spec.versions[*].schema.openAPIV3Schema现在是必需的,并且必须是 结构化模式。 - 在创建 v1 CustomResourceDefinition 对象时,
spec.preserveUnknownFields: true不允许;它必须在模式定义中指定为x-kubernetes-preserve-unknown-fields: true。 - 在
additionalPrinterColumns项目中,JSONPath字段在 v1 中已重命名为jsonPath(修复了 #66531)。
APIService
从 v1.22 开始,不再提供 apiregistration.k8s.io/v1beta1 API 版本的 APIService。
- 迁移清单和 API 客户端以使用 apiregistration.k8s.io/v1 API 版本,该版本自 v1.10 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
TokenReview
从 v1.22 开始,不再提供 authentication.k8s.io/v1beta1 API 版本的 TokenReview。
- 迁移清单和 API 客户端以使用 authentication.k8s.io/v1 API 版本,该版本自 v1.6 起可用。
- 无显著变化
SubjectAccessReview 资源
从 v1.22 开始,不再提供 authorization.k8s.io/v1beta1 API 版本的 LocalSubjectAccessReview、SelfSubjectAccessReview、SubjectAccessReview 和 SelfSubjectRulesReview。
- 迁移清单和 API 客户端以使用 authorization.k8s.io/v1 API 版本,该版本自 v1.6 起可用。
- 显著变化
spec.group在 v1 中已重命名为spec.groups(修复了 #32709)。
CertificateSigningRequest
从 v1.22 开始,不再提供 certificates.k8s.io/v1beta1 API 版本的 CertificateSigningRequest。
- 迁移清单和 API 客户端以使用 certificates.k8s.io/v1 API 版本,该版本自 v1.19 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
certificates.k8s.io/v1中的显著变化- 对于请求证书的 API 客户端
spec.signerName现在是必需的(参见 已知的 Kubernetes 签名者),并且不允许通过certificates.k8s.io/v1API 创建对kubernetes.io/legacy-unknown的请求。spec.usages现在是必需的,不能包含重复的值,并且必须只包含已知的用途。
- 对于批准或签署证书的 API 客户端
status.conditions不能包含重复的类型。status.conditions[*].status现在是必需的。status.certificate必须是 PEM 编码的,并且只包含CERTIFICATE块。
- 对于请求证书的 API 客户端
Lease
从 v1.22 开始,不再提供 coordination.k8s.io/v1beta1 API 版本的 Lease。
- 迁移清单和 API 客户端以使用 coordination.k8s.io/v1 API 版本,该版本自 v1.14 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
入口
从 v1.22 开始,不再提供 extensions/v1beta1 和 networking.k8s.io/v1beta1 API 版本的 Ingress。
- 迁移清单和 API 客户端以使用 networking.k8s.io/v1 API 版本,该版本自 v1.19 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
spec.backend已重命名为spec.defaultBackend。- 后端
serviceName字段已重命名为service.name。 - 数字后端
servicePort字段已重命名为service.port.number。 - 字符串后端
servicePort字段已重命名为service.port.name。 - 每个指定的路径现在都需要
pathType。选项包括Prefix、Exact和ImplementationSpecific。要匹配未定义的v1beta1行为,请使用ImplementationSpecific。
IngressClass
从 v1.22 开始,不再提供 networking.k8s.io/v1beta1 API 版本的 IngressClass。
- 迁移清单和 API 客户端以使用 networking.k8s.io/v1 API 版本,该版本自 v1.19 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
RBAC 资源
从 v1.22 开始,不再提供 rbac.authorization.k8s.io/v1beta1 API 版本的 ClusterRole、ClusterRoleBinding、Role 和 RoleBinding。
- 迁移清单和 API 客户端以使用 rbac.authorization.k8s.io/v1 API 版本,该版本自 v1.8 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
PriorityClass
从 v1.22 开始,不再提供 scheduling.k8s.io/v1beta1 API 版本的 PriorityClass。
- 迁移清单和 API 客户端以使用 scheduling.k8s.io/v1 API 版本,该版本自 v1.14 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
存储资源
从 v1.22 开始,不再提供 storage.k8s.io/v1beta1 API 版本的 CSIDriver、CSINode、StorageClass 和 VolumeAttachment。
- 迁移清单和 API 客户端以使用 storage.k8s.io/v1 API 版本。
- CSIDriver 自 v1.19 起在 storage.k8s.io/v1 中可用。
- CSINode 自 v1.17 起在 storage.k8s.io/v1 中可用。
- StorageClass 自 v1.6 起在 storage.k8s.io/v1 中可用。
- VolumeAttachment 自 v1.13 起在 storage.k8s.io/v1 中可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 无显著变化
v1.16
v1.16 版本停止提供以下已弃用的 API 版本。
NetworkPolicy
从 v1.16 开始,不再提供 extensions/v1beta1 API 版本的 NetworkPolicy。
- 迁移清单和 API 客户端以使用 networking.k8s.io/v1 API 版本,该版本自 v1.8 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
守护进程集
从 v1.16 开始,不再提供 extensions/v1beta1 和 apps/v1beta2 API 版本的 DaemonSet。
- 迁移清单和 API 客户端以使用 apps/v1 API 版本,该版本自 v1.9 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
spec.templateGeneration已移除。spec.selector现在是必需的,并且在创建后不可变;使用现有的模板标签作为选择器以实现无缝升级。spec.updateStrategy.type现在默认为RollingUpdate(extensions/v1beta1中的默认值为OnDelete)。
Deployment
从 v1.16 开始,不再提供 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API 版本的 Deployment。
- 迁移清单和 API 客户端以使用 apps/v1 API 版本,该版本自 v1.9 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
spec.rollbackTo已移除。spec.selector现在是必需的,并且在创建后不可变;使用现有的模板标签作为选择器以实现无缝升级。spec.progressDeadlineSeconds现在默认为600秒(extensions/v1beta1中的默认值为无截止日期)。spec.revisionHistoryLimit现在默认为10(apps/v1beta1中的默认值为2,extensions/v1beta1中的默认值为保留所有)。maxSurge和maxUnavailable现在默认为25%(extensions/v1beta1中的默认值为1)。
StatefulSet
从 v1.16 开始,不再提供 apps/v1beta1 和 apps/v1beta2 API 版本的 StatefulSet。
- 迁移清单和 API 客户端以使用 apps/v1 API 版本,该版本自 v1.9 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
spec.selector现在是必需的,并且在创建后不可变;使用现有的模板标签作为选择器以实现无缝升级。spec.updateStrategy.type现在默认为RollingUpdate(apps/v1beta1中的默认值为OnDelete)。
副本集
从 v1.16 开始,不再提供 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API 版本的 ReplicaSet。
- 迁移清单和 API 客户端以使用 apps/v1 API 版本,该版本自 v1.9 起可用。
- 所有现有的持久化对象都可以通过新 API 访问
- 显著变化
spec.selector现在是必需的,并且在创建后不可变;使用现有的模板标签作为选择器以实现无缝升级。
PodSecurityPolicy
从 v1.16 开始,不再提供 extensions/v1beta1 API 版本的 PodSecurityPolicy。
- 迁移清单和 API 客户端以使用 policy/v1beta1 API 版本,该版本自 v1.10 起可用。
- 请注意,policy/v1beta1 API 版本的 PodSecurityPolicy 将在 v1.25 中移除。
操作步骤
测试禁用已弃用的 API
您可以通过启动禁用特定 API 版本的 API 服务器来测试您的集群,以模拟即将到来的移除。将以下标志添加到 API 服务器启动参数中
--runtime-config=<group>/<version>=false
例如
--runtime-config=admissionregistration.k8s.io/v1beta1=false,apiextensions.k8s.io/v1beta1,...
定位已弃用 API 的使用情况
使用 1.19+ 中提供的客户端警告、指标和审计信息 来定位已弃用 API 的使用情况。
迁移到非已弃用的 API
更新自定义集成和控制器以调用非已弃用的 API。
更改 YAML 文件以引用非已弃用的 API。
您可以使用
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 参考。
注意
kubectl convert工具默认情况下未安装,尽管它曾经是kubectl本身的一部分。有关更多详细信息,您可以阅读 内置子命令的弃用和移除问题。要了解如何在您的计算机上设置
kubectl convert,请访问适合您操作系统的页面:Linux、macOS 或 Windows。