API Kubernetes 1.22 deprecate


Questa pagina spiega come preparare i cluster per gli upgrade a GKE versione 1.22. Puoi trovare i client API che effettuano chiamate ad API deprecate rimosse nella versione 1.22 e aggiornarli in modo che utilizzino le API GA. Per informazioni più dettagliate, consulta la Guida alla migrazione delle API deprecate per Kubernetes.

API rimosse nella versione 1.22

La maggior parte delle API deprecate in Kubernetes versione 1.22 sono precedenti API beta che sono passate da quando sono passate da beta (v1beta1) a GA (v1). Le API GA offrono garanzie di compatibilità a lungo termine e devono essere utilizzate al posto delle API beta deprecate.

È possibile interagire con tutti gli oggetti esistenti utilizzando le API GA.

Risorse webhook

La versione beta dell'API MutatingWebhookConfiguration e ValidatingWebhookConfiguration non è più disponibile a partire dalla versione 1.22.

  • Esegui la migrazione di manifest e client API per utilizzare la versione API admissionsignup.k8s.io/v1.
  • Fai riferimento alla seguente tabella che descrive le modifiche significative nella versione dell'API GA:

    Campo Cambia
    webhooks[*].failurePolicy Valore predefinito modificato da Ignore a Fail.
    webhooks[*].matchPolicy Valore predefinito modificato da Exact a Equivalent.
    webhooks[*].timeoutSeconds Valore predefinito modificato da 30s a 10s.
    webhooks[*].sideEffects Il valore predefinito è stato rimosso e il campo ora è obbligatorio. Sono consentiti soltanto None e NoneOnDryRun.
    webhooks[*].admissionReviewVersions Il valore predefinito è stato rimosso e il campo ora è obbligatorio (le versioni supportate per AdmissionReview sono v1 e v1beta1).
    webhooks[*].name Deve essere univoco nell'elenco per gli oggetti creati tramite admissionregistration.k8s.io/v1.

CustomResourceDefinition

La versione beta dell'API CustomResourceDefinition non è più disponibile a partire dalla versione 1.22.

  • Esegui la migrazione di manifest e client API per utilizzare la versione API apiextensions.k8s.io/v1.
  • Fai riferimento alla seguente tabella che descrive le modifiche significative nella versione dell'API GA:

    Campo Cambia
    spec.scope Il valore predefinito non è più impostato su Namespaced. Il valore deve essere specificato in modo esplicito.
    spec.version Rimosso. Usa invece il criterio spec.versions.
    spec.validation Rimosso. Usa invece il criterio spec.versions[*].schema.
    spec.subresources Rimosso. Usa invece il criterio spec.versions[*].subresources.
    spec.additionalPrinterColumns Rimosso. Usa invece il criterio spec.versions[*].additionalPrinterColumns.
    spec.conversion.webhookClientConfig Elemento spostato in spec.conversion.webhook.clientConfig.
    spec.conversion.conversionReviewVersions Elemento spostato in spec.conversion.webhook.conversionReviewVersions.
    spec.versions[*].schema.openAPIV3Schema Ora obbligatoria durante la creazione di oggetti CustomResourceDefinition v1 e deve essere uno schema strutturale.
    spec.preserveUnknownFields Il valore true non è consentito durante la creazione di oggetti CustomResourceDefinition della versione 1. Il valore deve essere specificato all'interno delle definizioni dello schema come x-kubernetes-preserve-unknown-fields: true.
    additionalPrinterColumns Negli elementi additionalPrinterColumns, il campo JSONPath è stato rinominato in jsonPath.

APIService

La versione beta dell'API APIService non è più disponibile a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione dell'API apisignup.k8s.io/v1.

TokenReview

La versione beta dell'API TokenReview non è più disponibile a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione dell'API authentication.k8s.io/v1.

Risorse SubjectAccessReview

La versione beta dell'API LocalSubjectAccessReview, SelfSubjectAccessReview e SubjectAccessReview non viene più pubblicata a partire dalla versione 1.22.

  • Esegui la migrazione di manifest e client API per utilizzare la versione API Authorization.k8s.io/v1.
  • Fai riferimento alla seguente tabella che descrive le modifiche significative nella versione dell'API GA:

    Campo Cambia
    spec.group Rinominato in spec.groups.

CertificateSigningRequest

La versione beta dell'API CertificateSigningRequest non è più disponibile a partire dalla versione 1.22.

  • Esegui la migrazione di manifest e client API per utilizzare la versione API certificates.k8s.io/v1.
  • Fai riferimento alla seguente tabella che descrive le modifiche significative nella versione dell'API GA:

    Campo Cambia
    spec.signerName Per i client API che richiedono certificati, questo campo è obbligatorio (vedi i firmatori Kubernetes noti) e non è possibile creare richieste per kubernetes.io/legacy-unknown tramite l'API certificates.k8s.io/v1.
    spec.usages Per i client API che richiedono certificati, questo campo è obbligatorio. Questo campo non può contenere valori duplicati e deve contenere solo utilizzi noti.
    status.conditions Per i client API che approvano o firmano i certificati, questo campo non può contenere tipi duplicati.
    status.conditions[*].status Per i client API che approvano o firmano i certificati, questo campo è ora obbligatorio.
    status.certificate Per i client API che approvano o firmano i certificati, questo campo deve avere una codifica PEM e contenere solo blocchi CERTIFICATE.

Affitto

La versione beta dell'API Lease non è più disponibile a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione API coordination.k8s.io/v1.

Ingress (disponibile fino alla versione 1.23 per i cluster creati in data 1.21 o versioni precedenti)

Le versioni beta dell'API (extensions/v1beta1 e networking.k8s.io/v1beta1) di Ingress non vengono più pubblicate per i cluster GKE che eseguono la versione 1.22 o successive, se il cluster è stato creato nella versione 1.22 o successive.

Tuttavia, per i cluster creati in GKE versione 1.21 o precedenti e con upgrade alla versione 1.22 nella versione patch 1.22.7-gke.300 o successive, puoi comunque utilizzare le versioni beta dell'API fino a quando il cluster non viene aggiornato alla versione 1.23. Questa è un'eccezione una tantum per i cluster meno recenti per darti più tempo per eseguire la migrazione dei tuoi cluster dall'utilizzo di queste versioni API, che sono state rimosse da Kubernetes open source nella versione 1.22.

Tutti i cluster che eseguono GKE versione 1.23 e successive non gestiranno più le API Ingress beta deprecate. I manifest che utilizzano queste versioni dell'API non possono più essere applicati. Gli oggetti persistenti in precedenza rimangono funzionali e possono essere visualizzati e aggiornati utilizzando le nuove versioni dell'API, prima e dopo l'upgrade alla 1.23.

  • Esegui la migrazione di manifest e client API per utilizzare la versione API networking.k8s.io/v1.
  • Fai riferimento alla seguente tabella che descrive le modifiche significative nella versione dell'API GA:

    Campo Cambia
    spec.backend Rinominato in spec.defaultBackend.
    backend serviceName Rinominato in service.name.
    servicePort I campi numerici servicePort del backend numerico vengono rinominati in service.port.number. I campi servicePort del backend delle stringhe sono rinominati in service.port.name.
    pathType Ora obbligatorio per ogni percorso specificato. Il valore può essere: Prefix, Exact o ImplementationSpecific. Per trovare il comportamento di v1beta1 non definito, utilizza ImplementationSpecific.

I seguenti manifest descrivono lo stesso Ingress in v1 e v1beta1:

File manifest v1beta1

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: example
spec:
  backend:
    serviceName: default-backend
    servicePort: 80
  rules:
  - http:
      paths:
      - path: /testpath
        backend:
          serviceName: test
          servicePort: 80

File manifest v1

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example
spec:
  defaultBackend:
    service:
      name: default-backend
      port:
        number: 80
  rules:
  - http:
      paths:
      - path: /testpath
        pathType: ImplementationSpecific
        backend:
          service:
            name: test
            port:
              number: 80

Puoi utilizzare la seguente query per i cluster in cui è abilitata l'osservabilità di Google Cloud per identificare i client che accedono alle API Ingress v1beta1:

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "networking.k8s.io/v1beta1")
protoPayload.request.kind="Ingress"
NOT ("kube-system")

IngressClass

La versione beta dell'API IngressClass non è più disponibile a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione dell'API networking.k8s.io/v1.

Risorse RBAC

La versione beta dell'API ClusterRole, ClusterRoleBinding, Role e RoleBinding non viene più pubblicata a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione API rbac.Authorization.k8s.io/v1.

PriorityClass

La versione beta dell'API PriorityClass non è più disponibile a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione dell'API scheduling.k8s.io/v1.

Risorse di archiviazione

La versione beta dell'API CSIDriver, CSINode, StorageClass e VolumeAttachment non viene più pubblicata a partire dalla versione 1.22. Esegui la migrazione di manifest e client API per utilizzare la versione API storage.k8s.io/v1.

Trova i cluster utilizzando API deprecate

Puoi trovare i cluster che utilizzano API deprecate negli approfondimenti sul ritiro. Gli approfondimenti sul ritiro forniscono anche informazioni quali i client API che chiamano le API deprecate nel tuo cluster.

Puoi utilizzare gli audit log per individuare i client che effettuano chiamate alle API deprecate.

Individua i client API che effettuano chiamate di scrittura alle API deprecate

Per i cluster in cui è abilitata l'Observabilità di Google Cloud, puoi utilizzare la seguente query del log di controllo dell'attività di amministrazione per mostrare l'utilizzo di API deprecate da user agent non gestite da Google:

resource.type="k8s_cluster"
labels."k8s.io/removed-release"="DEPRECATED_API_MINOR_VERSION"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.authenticationInfo.principalEmail!~("system:serviceaccount:kube-system:")

Sostituisci DEPRECATED_API_MINOR_VERSION con la versione secondaria in cui l'API deprecata viene rimossa, ad esempio 1.22.

Gli audit log delle attività di amministrazione sono abilitati automaticamente per i cluster GKE. Con questa query, i log mostrano gli user agent che effettuano chiamate di scrittura alle API ritirate.

Individua i client API che effettuano chiamate di lettura ad API deprecate

Per impostazione predefinita, i log di controllo mostrano solo le chiamate di scrittura alle API deprecate. Per mostrare anche le chiamate di lettura alle API deprecate, configura gli audit log di accesso ai dati.

Segui le istruzioni per configurare gli audit log di accesso ai dati con la console Google Cloud. Nella console Google Cloud, seleziona l'API Kubernetes Engine. Nella scheda Tipi di log nel riquadro delle informazioni, seleziona Admin Read e Data Read.

Con questi log abilitati, ora puoi utilizzare la query originale per visualizzare sia le chiamate di lettura sia le chiamate di scrittura alle API deprecate.

Upgrade dei componenti di terze parti

Gli approfondimenti sul ritiro potrebbero mostrare risultati per gli agenti di terze parti che effettuano chiamate alle API deprecate nel tuo cluster.

Per risolvere questi approfondimenti, prova a svolgere i seguenti passaggi:

  1. Rivolgiti al tuo fornitore di software di terze parti per una versione aggiornata.
  2. Esegui l'upgrade del software di terze parti alla versione più recente. Se non riesci a eseguire l'upgrade del software, devi verificare se l'upgrade di GKE alla versione con le API deprecate rimosse interromperà il servizio.

Ti consigliamo di eseguire questo upgrade e la versione di GKE su un cluster di gestione temporanea per monitorare eventuali interruzioni prima di eseguire l'upgrade dei cluster di produzione.

Preparazione dell'upgrade alla versione 1.22

Non è necessario eliminare e ricreare gli oggetti API. Tutti gli oggetti API persistenti esistenti possono già essere letti e aggiornati utilizzando le nuove versioni dell'API. Tuttavia, ti consigliamo di eseguire la migrazione di client e manifest prima di eseguire l'upgrade a Kubernetes 1.22. Scopri di più nella sezione"Cosa fare" della guida alla migrazione delle API deprecate da Kubernetes.

Puoi visualizzare insight e suggerimenti sul ritiro per determinare se il tuo cluster utilizza una funzionalità o un'API Kubernetes che è deprecata. Gli insight sul ritiro si basano sulle chiamate API osservate alle API deprecate dagli user agent, non sulla configurazione degli oggetti Kubernetes.

Aggiorna i cluster interessati da deprecazioni

Per eseguire l'upgrade dei cluster interessati da deprecazioni, segui questi passaggi:

  1. Controlla quali user agent utilizzano le API deprecate negli insight sul ritiro o nei log.
  2. Aggiorna gli user agent che utilizzano le API deprecate in modo che utilizzino le versioni delle API supportate.
  3. Aggiorna qualsiasi software di terze parti che chiama le API deprecate alle versioni più recenti.
  4. Esegui l'upgrade di un cluster di test e testa la tua applicazione in un ambiente di test prima di eseguire l'upgrade del cluster di produzione per ridurre il rischio di interruzioni quando le API deprecate non sono più disponibili.
  5. Dopo aver aggiornato tutti gli user agent, GKE attende finché non ha più osservato l'utilizzo di API deprecate per 30 giorni, quindi sblocca gli upgrade automatici. Gli upgrade automatici procedino in base alla pianificazione delle release.
  6. Se non riesci ad aggiornare uno user agent interessato, esegui l'upgrade di un cluster di test separato per verificare se l'upgrade causa interruzioni. Se l'upgrade non causa interruzioni, puoi eseguire l'upgrade manuale del cluster.

Risorse

Ulteriori informazioni sono disponibili nella documentazione del software open source Kubernetes: