随着 Kubernetes API 的演进,API 会定期进行重组或升级。当 API 演进时,旧的 API 会被弃用并最终移除。本页面包含从弃用的 API 版本迁移到更新、更稳定 API 版本时所需的信息。
v1.32 版本停止提供以下已弃用的 API 版本
从 v1.32 开始,FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta3 API 版本不再提供服务。
spec.limited.nominalConcurrencyShares 字段仅在未指定时默认为 30,若显式设置为 0 则不会被更改为 30。v1.29 版本停止提供以下已弃用的 API 版本
从 v1.29 开始,FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta2 API 版本不再提供服务。
spec.limited.assuredConcurrencyShares 字段重命名为 spec.limited.nominalConcurrencyShares,且仅在未指定时默认为 30,若显式设置为 0 则不会被更改为 30。spec.limited.assuredConcurrencyShares 字段重命名为 spec.limited.nominalConcurrencySharesv1.27 版本停止提供以下已弃用的 API 版本
从 v1.27 开始,CSIStorageCapacity 的 storage.k8s.io/v1beta1 API 版本不再提供服务。
v1.26 版本停止提供以下已弃用的 API 版本
从 v1.26 开始,FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.26 开始,HorizontalPodAutoscaler 的 autoscaling/v2beta2 API 版本不再提供服务。
targetAverageUtilization 已被 target.averageUtilization 和 target.type: Utilization 取代。请参阅基于多指标和自定义指标的自动扩缩容。v1.25 版本停止提供以下已弃用的 API 版本
从 v1.25 开始,CronJob 的 batch/v1beta1 API 版本不再提供服务。
从 v1.25 开始,EndpointSlice 的 discovery.k8s.io/v1beta1 API 版本不再提供服务。
nodeName 字段,而不是已弃用的 topology["kubernetes.io/hostname"] 字段zone 字段,而不是已弃用的 topology["topology.kubernetes.io/zone"] 字段topology 已被 deprecatedTopology 字段取代,该字段在 v1 中不可写从 v1.25 开始,Event 的 events.k8s.io/v1beta1 API 版本不再提供服务。
type 仅限于 Normal 和 WarninginvolvedObject 重命名为 regardingaction、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 事件中不允许使用)从 v1.25 开始,HorizontalPodAutoscaler 的 autoscaling/v2beta1 API 版本不再提供服务。
targetAverageUtilization 已被 target.averageUtilization 和 target.type: Utilization 取代。请参阅基于多指标和自定义指标的自动扩缩容。从 v1.25 开始,PodDisruptionBudget 的 policy/v1beta1 API 版本不再提供服务。
policy/v1 PodDisruptionBudget 的空 spec.selector ({}) 会选择命名空间中的所有 Pod(在 policy/v1beta1 中,空的 spec.selector 不会选择任何 Pod)。未设置的 spec.selector 在两个 API 版本中都不会选择任何 Pod。从 v1.25 开始,policy/v1beta1 API 版本中的 PodSecurityPolicy 不再提供服务,且 PodSecurityPolicy 准入控制器将被移除。
请迁移至 Pod 安全性准入 (Pod Security Admission) 或 第三方准入 Webhook。有关迁移指南,请参阅从 PodSecurityPolicy 迁移到内置 Pod 安全性准入控制器。有关弃用的更多信息,请参阅PodSecurityPolicy 的弃用:过去、现在和未来。
从 v1.25 开始,node.k8s.io/v1beta1 API 版本中的 RuntimeClass 不再提供服务。
v1.22 版本停止提供以下已弃用的 API 版本
从 v1.22 开始,MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 的 admissionregistration.k8s.io/v1beta1 API 版本不再提供服务。
webhooks[*].failurePolicy 的默认值从 Ignore 更改为 Failwebhooks[*].matchPolicy 的默认值从 Exact 更改为 Equivalentwebhooks[*].timeoutSeconds 的默认值从 30s 更改为 10swebhooks[*].sideEffects 的默认值被移除,该字段变为必填项,且仅允许 None 和 NoneOnDryRunwebhooks[*].admissionReviewVersions 的默认值被移除,该字段变为必填项(AdmissionReview 支持的版本为 v1 和 v1beta1)admissionregistration.k8s.io/v1 创建的对象中,webhooks[*].name 在列表中必须是唯一的从 v1.22 开始,CustomResourceDefinition 的 apiextensions.k8s.io/v1beta1 API 版本不再提供服务。
spec.scope 不再默认设为 Namespaced,必须显式指定spec.version 在 v1 中已被移除;请改用 spec.versionsspec.validation 在 v1 中已被移除;请改用 spec.versions[*].schemaspec.subresources 在 v1 中已被移除;请改用 spec.versions[*].subresourcesspec.additionalPrinterColumns 在 v1 中已被移除;请改用 spec.versions[*].additionalPrinterColumnsspec.conversion.webhookClientConfig 在 v1 中移动到了 spec.conversion.webhook.clientConfigspec.conversion.conversionReviewVersions 在 v1 中移动到了 spec.conversion.webhook.conversionReviewVersionsspec.versions[*].schema.openAPIV3Schema,且必须是一个结构化模式 (structural schema)spec.preserveUnknownFields: true;必须在模式定义中将其指定为 x-kubernetes-preserve-unknown-fields: trueadditionalPrinterColumns 项目中,JSONPath 字段在 v1 中重命名为 jsonPath(修复了 #66531)从 v1.22 开始,APIService 的 apiregistration.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.22 开始,TokenReview 的 authentication.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.22 开始,LocalSubjectAccessReview、SelfSubjectAccessReview、SubjectAccessReview 和 SelfSubjectRulesReview 的 authorization.k8s.io/v1beta1 API 版本不再提供服务。
spec.group 在 v1 中重命名为 spec.groups(修复了 #32709)从 v1.22 开始,CertificateSigningRequest 的 certificates.k8s.io/v1beta1 API 版本不再提供服务。
certificates.k8s.io/v1 中的显著变化spec.signerName 现在为必填项(参阅已知的 Kubernetes 签名者),且不允许通过 certificates.k8s.io/v1 API 创建针对 kubernetes.io/legacy-unknown 的请求spec.usages 现在为必填项,不得包含重复值,且必须仅包含已知的使用场景status.conditions 不得包含重复的类型status.conditions[*].status 现在为必填项status.certificate 必须是 PEM 编码的,且仅包含 CERTIFICATE 块从 v1.22 开始,Lease 的 coordination.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.22 开始,Ingress 的 extensions/v1beta1 和 networking.k8s.io/v1beta1 API 版本不再提供服务。
spec.backend 重命名为 spec.defaultBackendserviceName 字段重命名为 service.nameservicePort 字段重命名为 service.port.numberservicePort 字段重命名为 service.port.namepathType。选项包括 Prefix、Exact 和 ImplementationSpecific。若要匹配未定义的 v1beta1 行为,请使用 ImplementationSpecific。从 v1.22 开始,IngressClass 的 networking.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.22 开始,ClusterRole、ClusterRoleBinding、Role 和 RoleBinding 的 rbac.authorization.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.22 开始,PriorityClass 的 scheduling.k8s.io/v1beta1 API 版本不再提供服务。
从 v1.22 开始,CSIDriver、CSINode、StorageClass 和 VolumeAttachment 的 storage.k8s.io/v1beta1 API 版本不再提供服务。
v1.16 版本停止提供以下已弃用的 API 版本
从 v1.16 开始,NetworkPolicy 的 extensions/v1beta1 API 版本不再提供服务。
从 v1.16 开始,DaemonSet 的 extensions/v1beta1 和 apps/v1beta2 API 版本不再提供服务。
spec.templateGeneration 已被移除spec.selector 现在为必填项,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级spec.updateStrategy.type 现在默认为 RollingUpdate(extensions/v1beta1 中的默认值为 OnDelete)从 v1.16 开始,Deployment 的 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API 版本不再提供服务。
spec.rollbackTo 已被移除spec.selector 现在为必填项,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级spec.progressDeadlineSeconds 现在默认为 600 秒(extensions/v1beta1 中的默认值为无截止时间)spec.revisionHistoryLimit 现在默认为 10(apps/v1beta1 中的默认值为 2,extensions/v1beta1 中的默认值为保留所有)maxSurge 和 maxUnavailable 现在默认为 25%(extensions/v1beta1 中的默认值为 1)从 v1.16 开始,StatefulSet 的 apps/v1beta1 和 apps/v1beta2 API 版本不再提供服务。
spec.selector 现在为必填项,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级spec.updateStrategy.type 现在默认为 RollingUpdate(apps/v1beta1 中的默认值为 OnDelete)从 v1.16 开始,ReplicaSet 的 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API 版本不再提供服务。
spec.selector 现在为必填项,且创建后不可变;使用现有的模板标签作为选择器以实现无缝升级从 v1.16 开始,PodSecurityPolicy 的 extensions/v1beta1 API 版本不再提供服务。
你可以通过以禁用特定 API 版本的方式启动 API 服务器来测试集群,以模拟即将发生的移除。在 API 服务器启动参数中添加以下标志
--runtime-config=<group>/<version>=false
例如
--runtime-config=admissionregistration.k8s.io/v1beta1=false,apiextensions.k8s.io/v1beta1,...
使用 1.19+ 版本中提供的客户端警告、指标和审计信息来定位已弃用 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 参考。