API Kubernetes 1.22 deprecate


Questa pagina spiega come preparare i cluster per gli upgrade alla versione 1.22 di GKE. Puoi trovare i client API che effettuano chiamate alle API deprecate rimosse nella 1.22 e aggiornare questi client in modo che utilizzino le API GA. Per informazioni più dettagliate, consulta Migrazione delle API deprecate per Kubernetes .

API rimosse in 1.22

La maggior parte delle API deprecate in Kubernetes versione 1.22 sono API precedenti beta che sono passati dalla fase Beta (v1beta1) a GA (v1). Le API GA offrono funzionalità a lungo termine garanzie di compatibilità e devono essere utilizzate al posto delle API beta ritirate.

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

Risorse webhook

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

  • Esegui la migrazione dei manifest e dei client API in modo che utilizzino la versione dell'API admissionregistration.k8s.io/v1.
  • Consulta la 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 solo 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 degli oggetti creati tramite admissionregistration.k8s.io/v1.

CustomResourceDefinition

La versione beta dell'API CustomResourceDefinition non viene più pubblicata a partire dalla versione 1.22.

  • Esegui la migrazione dei manifest e dei client API in modo che utilizzino la versione dell'API apiextensions.k8s.io/v1.
  • Per le modifiche importanti della versione dell'API GA, consulta la seguente tabella:

    Campo Cambia
    spec.scope Non è più impostato come predefinito Namespaced. Il valore deve essere specificato esplicitamente.
    spec.version Rimosso. Utilizza invece spec.versions.
    spec.validation Rimosso. Utilizza invece spec.versions[*].schema.
    spec.subresources Rimosso. Utilizza invece spec.versions[*].subresources.
    spec.additionalPrinterColumns Rimosso. Utilizza invece spec.versions[*].additionalPrinterColumns.
    spec.conversion.webhookClientConfig Spostati in spec.conversion.webhook.clientConfig.
    spec.conversion.conversionReviewVersions Spostamento in spec.conversion.webhook.conversionReviewVersions eseguito.
    spec.versions[*].schema.openAPIV3Schema Ora obbligatoria durante la creazione della versione 1 CustomResourceDefinition e deve essere un oggetto schema strutturale.
    spec.preserveUnknownFields Il valore true non è consentito durante la creazione di oggetti CustomResourceDefinition v1. 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 viene più pubblicata a partire dalla versione 1.22. Esegui la migrazione dei manifest e dei client API in modo che utilizzino la versione dell'API apiregistration.k8s.io/v1.

TokenReview

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

Risorse SubjectAccessReview

La versione beta dell'API di LocalSubjectAccessReview, SelfSubjectAccessReview e SubjectAccessReview non è più disponibile a partire dalla versione 1.22.

  • Esegui la migrazione dei manifest e dei client API per utilizzare la versione dell'API authorization.k8s.io/v1.
  • Consulta la 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 viene più pubblicata a partire dalla versione 1.22.

  • Esegui la migrazione dei manifest e dei client API per utilizzare la versione API certificates.k8s.io/v1.
  • Consulta la 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 firmati Kubernetes noti) e richieste per kubernetes.io/legacy-unknown non possono essere creati mediante l'API certificates.k8s.io/v1.
    spec.usages Per i client API che richiedono certificati, questo campo è obbligatorio. Questo 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 codifica PEM e contenere solo blocchi CERTIFICATE.

Affitto

La versione beta dell'API Lease non viene più pubblicata a partire dalla versione 1.22. Esegui la migrazione dei manifest e dei client API in modo che utilizzino la versione dell'API coordination.k8s.io/v1.

Ingress (disponibile fino alla versione 1.23 per i cluster creati con la versione 1.21 o precedente)

Le versioni beta dell'API (extensions/v1beta1 e networking.k8s.io/v1beta1) di Non sono più disponibili Ingress per la versione che è in esecuzione per i cluster GKE 1.22 o successiva se il cluster è stato creato nella versione 1.22 o successiva.

Tuttavia, per i cluster creati su GKE 1.21 o versioni precedenti e sottoposti a upgrade a 1.22 con la versione della patch 1.22.7-gke.300 o successive, puoi comunque utilizzare le versioni beta dell'API fino a quando non viene eseguito l'upgrade del cluster alla versione 1.23. Si tratta di un un'eccezione per i cluster meno recenti in modo da darti più tempo per eseguire ai cluster di utilizzare queste versioni dell'API che vengono rimosse di Kubernetes nella versione 1.22.

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

  • Esegui la migrazione dei manifest e dei client API per utilizzare la versione API networking.k8s.io/v1.
  • Consulta la 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 del backend numerico servicePort sono stati rinominati in service.port.number. I campi servicePort di backend di stringa sono stati rinominati in service.port.name.
    pathType Ora obbligatorio per ogni percorso specificato. Il valore può essere: Prefix, Exact o ImplementationSpecific. Per corrispondere al comportamento non definito di v1beta1, utilizza ImplementationSpecific.

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

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

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 con l'osservabilità di Google Cloud abilitata 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 viene più pubblicata a partire dalla versione 1.22. Esegui la migrazione dei manifest e dei client API per utilizzare la versione dell'API networking.k8s.io/v1.

Risorse RBAC

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

PriorityClass

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

Risorse di archiviazione

La versione API beta di CSIDriver, CSINode, StorageClass e VolumeAttachment non viene più pubblicato a partire dalla versione 1.22. Esegui la migrazione dei manifest e dei client API in modo che utilizzino la versione dell'API storage.k8s.io/v1.

Trovare i cluster che utilizzano API obsolete

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

Puoi anche utilizzare gli audit log per trovare i client che effettuano chiamate alle API ritirate.

Individuare i client API che eseguono chiamate di scrittura ad API ritirate

Per i cluster in cui è abilitato Google Cloud Observability, puoi utilizzare quanto segue Log di controllo dell'attività di amministrazione per mostrare l'uso delle API deprecate da parte degli user agent che non sono Gestita 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 minore in cui l'API obsoleta è stata rimossa, ad esempio 1.22.

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

Individuare i client API che effettuano chiamate di lettura ad API ritirate

Per impostazione predefinita, i log di controllo mostrano solo le chiamate di scrittura alle API ritirate. Per visualizzare anche le chiamate di lettura alle API ritirate, 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 del 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 ritirate.

Upgrade dei componenti di terze parti

Approfondimenti sul ritiro potrebbero mostrare risultati per agenti di terze parti che effettuano chiamate ad API deprecate. nel tuo cluster.

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

  1. Rivolgiti al 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 puoi eseguire l'upgrade del software, devi verificare se l'upgrade di GKE alla versione con le API ritirate potrebbe interrompere il servizio.

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

Preparazione all'upgrade alla versione 1.22

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

Puoi visualizzare approfondimenti e consigli sul ritiro per determinare se il cluster utilizza una funzionalità o un'API Kubernetes che ritirato. Le informazioni sulla ritiro si basano sulle chiamate API osservate alle API ritirate da parte degli user agent, non sulla configurazione degli oggetti Kubernetes.

Aggiorna i cluster interessati dai ritiri

Per eseguire l'upgrade dei cluster interessati dai ritiri, segui questi passaggi:

  1. Controlla quali user agent utilizzano le API deprecate nella insight sul ritiro o log.
  2. Aggiorna gli user agent che utilizzano le API deprecate in modo che utilizzino l'API supportata e versioni successive.
  3. Aggiornare all'ultima versione qualsiasi software di terze parti che chiama le API ritirate e versioni successive.
  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 che non ha più osservato l'utilizzo di API deprecate per 30 giorni e poi sblocca upgrade automatici. Gli upgrade automatici vengono eseguiti in base programma 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 del servizio. Se l'upgrade non causa e interruzioni, eseguire l'upgrade manuale del cluster.

Risorse

Ulteriori informazioni sono disponibili nella documentazione di Kubernetes sul software open source: