云容器引擎 CCE-升级前须知:废弃API说明

时间:2024-05-24 14:07:08

废弃API说明

随着Kubernetes API的演化,API会周期性地被重组或升级,部分API会被弃用并被最终删除。以下为各Kubernetes社区版本中被废弃的API,更多已废弃的API说明请参见已弃用 API 的迁移指南

当某API被废弃时,已经创建的资源对象不受影响,但新建或编辑该资源时将出现API版本被拦截的情况。

表2 Kubernetes社区v1.27版本中废弃的API

资源名称

废弃API版本

替代API版本

变更说明

CS IStorageCapacity

storage.k8s.io/v1beta1

storage.k8s.io/v1

(该API从社区v1.24版本开始可用)

-

FlowSchema 和 PriorityLevelConfiguration

flowcontrol.apiserver.k8s.io/v1beta1

flowcontrol.apiserver.k8s.io/v1beta3

(该API从社区v1.26版本开始可用)

-

HorizontalPodAutoscaler

autoscaling/v2beta2

autoscaling/v2

(该API从社区v1.23版本开始可用)

-

表3 Kubernetes社区v1.25版本中废弃的API

资源名称

废弃API版本

替代API版本

变更说明

CronJob

batch/v1beta1

batch/v1

(该API从社区v1.21版本开始可用)

-

EndpointSlice

discovery.k8s.io/v1beta1

discovery.k8s.io/v1

(该API从社区v1.21版本开始可用)

此次更新需注意以下变更:

  • 每个Endpoint中,topology["kubernetes.io/hostname"]字段已被弃用,请使用nodeName字段代替。
  • 每个Endpoint中,topology["kubernetes.io/zone"]字段已被弃用,请使用zone字段代替。
  • topology字段被替换为deprecatedTopology,并且在 v1 版本中不可写入。

Event

events.k8s.io/v1beta1

events.k8s.io/v1

(该API从社区v1.19版本开始可用)

此次更新需注意以下变更:

  • type 字段只能设置为 NormalWarning 之一。
  • involvedObject 字段被更名为 regarding
  • actionreasonreportingControllerreportingInstance 字段 在创建新的 events.k8s.io/v1 版本 Event 时都是必需的字段。
  • 使用 eventTime 而不是已被弃用的 firstTimestamp 字段 (该字段已被更名为 deprecatedFirstTimestamp,且不允许出现在新的 events.k8s.io/v1 Event 对象中)。
  • 使用 series.lastObservedTime 而不是已被弃用的 lastTimestamp 字段 (该字段已被更名为 deprecatedLastTimestamp,且不允许出现在新的 events.k8s.io/v1 Event 对象中)。
  • 使用 series.count 而不是已被弃用的 count 字段 (该字段已被更名为 deprecatedCount,且不允许出现在新的 events.k8s.io/v1 Event 对象中)。
  • 使用 reportingController 而不是已被弃用的 source.component 字段 (该字段已被更名为 deprecatedSource.component,且不允许出现在新的 events.k8s.io/v1 Event 对象中)。
  • 使用 reportingInstance 而不是已被弃用的 source.host 字段 (该字段已被更名为 deprecatedSource.host,且不允许出现在新的 events.k8s.io/v1 Event 对象中)。

HorizontalPodAutoscaler

autoscaling/v2beta1

autoscaling/v2

(该API从社区v1.23版本开始可用)

-

PodDisruptionBudget

policy/v1beta1

policy/v1

(该API从社区v1.21版本开始可用)

policy/v1 版本的 PodDisruptionBudget 中将 spec.selector 设置为空({})时会选择名字空间中的所有 Pod(在 policy/v1beta1 版本中,空的 spec.selector 不会选择任何 Pod)。如果 spec.selector 未设置,则在两个 API 版本下都不会选择任何 Pod。

PodSecurityPolicy

policy/v1beta1

-

从社区v1.25版本开始,PodSecurityPolicy资源不再提供policy/v1beta1版本的API,并且PodSecurityPolicy准入控制器也会被删除。

请使用Pod Security Admission配置替代。

RuntimeClass

node.k8s.io/v1beta1

node.k8s.io/v1(该API从社区v1.20版本开始可用)

-

表4 Kubernetes社区v1.22版本中废弃的API

资源名称

废弃API版本

替代API版本

变更说明

MutatingWebhookConfiguration

ValidatingWebhookConfiguration

admissionregistration.k8s.io/v1beta1

admissionregistration.k8s.io/v1

(该API从社区v1.16版本开始可用)

  • webhooks[*].failurePolicy 在 v1 版本中默认值从 Ignore 改为 Fail
  • webhooks[*].matchPolicy 在 v1 版本中默认值从 Exact 改为 Equivalent
  • webhooks[*].timeoutSeconds 在 v1 版本中默认值从 30s 改为 10s
  • webhooks[*].sideEffects 的默认值被删除,并且该字段变为必须指定; 在 v1 版本中可选的值只能是 NoneNoneOnDryRun 之一。
  • webhooks[*].admissionReviewVersions 的默认值被删除,在 v1 版本中此字段变为必须指定(AdmissionReview 的被支持版本包括 v1 和 v1beta1)。
  • webhooks[*].name 必须在通过 admissionregistration.k8s.io/v1 创建的对象列表中唯一。

CustomResourceDefinition

apiextensions.k8s.io/v1beta1

apiextensions/v1

(该API从社区v1.16版本开始可用)

  • 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
  • spec.versions[*].schema.openAPIV3Schema 在创建 v1 版本的 CustomResourceDefinition 对象时变成必需字段,并且其取值必须是一个结构化的 Schema
  • spec.preserveUnknownFields: true 在创建 v1 版本的 CustomResourceDefinition 对象时不允许指定;该配置必须在 Schema 定义中使用 x-kubernetes-preserve-unknown-fields: true 来设置。
  • 在 v1 版本中,additionalPrinterColumns 的条目中的 JSONPath 字段被更名为 jsonPath(补丁 #66531)。

APIService

apiregistration/v1beta1

apiregistration.k8s.io/v1

(该API从社区v1.10版本开始可用)

-

TokenReview

authentication.k8s.io/v1beta1

authentication.k8s.io/v1

(该API从社区v1.6版本开始可用)

-

LocalSubjectAccessReview

SelfSubjectAccessReview

SubjectAccessReview

SelfSubjectRulesReview

authorization.k8s.io/v1beta1

authorization.k8s.io/v1

(该API从社区v1.16版本开始可用)

spec.group 在 v1 版本中被更名为 spec.groups(补丁 #32709

CertificateSigningRequest

certificates.k8s.io/v1beta1

certificates.k8s.io/v1

(该API从社区v1.19版本开始可用)

certificates.k8s.io/v1 中需要额外注意的变更:
  • 对于请求证书的 API 客户端而言:
    • spec.signerName 现在变成必需字段(参阅 已知的 Kubernetes 签署者), 并且通过 certificates.k8s.io/v1 API 不可以创建签署者为 kubernetes.io/legacy-unknown 的请求。
    • spec.usages 现在变成必需字段,其中不可以包含重复的字符串值, 并且只能包含已知的用法字符串。
  • 对于要批准或者签署证书的 API 客户端而言:
    • status.conditions 中不可以包含重复的类型。
    • status.conditions[*].status 字段现在变为必需字段。
    • status.certificate 必须是 PEM 编码的,而且其中只能包含 CERTIFICATE 数据块。

Lease

coordination.k8s.io/v1beta1

coordination.k8s.io/v1

(该API从社区v1.14版本开始可用)

-

Ingress

networking.k8s.io/v1beta1

extensions/v1beta1

networking.k8s.io/v1

(该API从社区v1.19版本开始可用)

  • spec.backend 字段被更名为 spec.defaultBackend
  • 后端的 serviceName 字段被更名为 service.name
  • 数值表示的后端 servicePort 字段被更名为 service.port.number
  • 字符串表示的后端 servicePort 字段被更名为 service.port.name
  • 对所有要指定的路径,pathType 都成为必需字段。 可选项为 PrefixExactImplementationSpecific。 要匹配 v1beta1 版本中未定义路径类型时的行为,可使用 ImplementationSpecific

IngressClass

networking.k8s.io/v1beta1

networking.k8s.io/v1

(该API从社区v1.19版本开始可用)

-

ClusterRole

ClusterRoleBinding

Role

RoleBinding

rbac.authorization.k8s.io/v1beta1

rbac.authorization.k8s.io/v1

(该API从社区v1.8版本开始可用)

-

PriorityClass

scheduling.k8s.io/v1beta1

scheduling.k8s.io/v1

(该API从社区v1.14版本开始可用)

-

CSIDriver

CSINode

StorageClass

VolumeAttachment

storage.k8s.io/v1beta1

storage.k8s.io/v1

  • 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中提供。
表5 Kubernetes社区v1.16版本中废弃的API

资源名称

废弃API版本

替代API版本

变更说明

NetworkPolicy

extensions/v1beta1

networking.k8s.io/v1

(该API从社区v1.8版本开始可用)

-

DaemonSet

extensions/v1beta1

apps/v1beta2

apps/v1

(该API从社区v1.9版本开始可用)

  • spec.templateGeneration 字段被删除。
  • spec.selector 现在变成必需字段,并且在对象创建之后不可变更; 可以将现有模板的标签作为选择算符以实现无缝迁移。
  • spec.updateStrategy.type 的默认值变为 RollingUpdateextensions/v1beta1 API 版本中的默认值是 OnDelete)。

Deployment

extensions/v1beta1

apps/v1beta1

apps/v1beta2

apps/v1

(该API从社区v1.9版本开始可用)

  • spec.rollbackTo 字段被删除。
  • spec.selector 字段现在变为必需字段,并且在 Deployment 创建之后不可变更; 可以使用现有的模板的标签作为选择算符以实现无缝迁移。
  • spec.progressDeadlineSeconds 的默认值变为 600 秒 (extensions/v1beta1 中的默认值是没有期限)。
  • spec.revisionHistoryLimit 的默认值变为 10 (apps/v1beta1 API 版本中此字段默认值为 2,在extensions/v1beta1 API 版本中的默认行为是保留所有历史记录)。
  • maxSurgemaxUnavailable 的默认值变为 25% (在 extensions/v1beta1 API 版本中,这些字段的默认值是 1)。

StatefulSet

apps/v1beta1

apps/v1beta2

apps/v1

(该API从社区v1.9版本开始可用)

  • spec.selector 字段现在变为必需字段,并且在 StatefulSet 创建之后不可变更; 可以使用现有的模板的标签作为选择算符以实现无缝迁移。
  • spec.updateStrategy.type 的默认值变为 RollingUpdateapps/v1beta1 API 版本中的默认值是 OnDelete)。

ReplicaSet

extensions/v1beta1

apps/v1beta1

apps/v1beta2

apps/v1

(该API从社区v1.9版本开始可用)

spec.selector 现在变成必需字段,并且在对象创建之后不可变更; 可以将现有模板的标签作为选择算符以实现无缝迁移。

PodSecurityPolicy

extensions/v1beta1

policy/v1beta1

(该API从社区v1.10版本开始可用)

policy/v1beta1 API 版本的 PodSecurityPolicy 会在 v1.25 版本中移除。

support.huaweicloud.com/usermanual-cce/cce_10_0302.html