Aggiornamento della versione di Kubernetes del cluster Amazon EKS - Amazon EKS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Aggiornamento della versione di Kubernetes del cluster Amazon EKS

Quando è disponibile una nuova versione di Kubernetes in Amazon EKS, potrai aggiornare il cluster Amazon EKS alla versione più recente.

Importante

Una volta aggiornato un cluster, non è possibile effettuare il downgrade a una versione precedente. Prima di eseguire l'aggiornamento a una nuova versione di Kubernetes, è consigliabile esaminare le informazioni contenute in Versioni Kubernetes di Amazon EKS e nella procedura di aggiornamento descritta in questo argomento.

Le nuove versioni di Kubernetes hanno introdotto modifiche significative. Pertanto ti consigliamo di verificare il comportamento delle applicazioni rispetto alla nuova versione di Kubernetes prima di eseguire l'aggiornamento sui cluster di produzione. Puoi eseguire questa operazione mediante la creazione di un flusso di lavoro di integrazione continua per testare il comportamento totale dell'applicazione prima di passare a una nuova versione di Kubernetes.

Il processo di aggiornamento consiste nell'avvio, da parte di Amazon EKS, di nuovi nodi del server API con la versione aggiornata di Kubernetes che sostituiscono quelli esistenti. Amazon EKS esegue i controlli dell'integrità dell'infrastruttura standard e dello stato di preparazione per il traffico di rete su questi nuovi nodi per verificare che funzionino come previsto. Tuttavia, una volta avviato l'aggiornamento del cluster, non è possibile metterlo in pausa o interromperlo. Se uno di questi controlli non va a buon fine, Amazon EKS ripristina l'implementazione dell'infrastruttura e il cluster rimane nella versione precedente di Kubernetes. Le applicazioni in esecuzione non sono interessate e il cluster non viene mai lasciato in uno stato non deterministico o irrecuperabile. Amazon EKS esegue regolarmente il backup di tutti i cluster gestiti e, se necessario, dispone di meccanismi per il recupero dei cluster. Stiamo valutando e migliorando costantemente i nostri processi di gestione dell'infrastruttura di Kubernetes.

Per aggiornare il cluster, Amazon EKS richiede fino a cinque indirizzi IP disponibili dalle sottoreti specificate al momento della creazione del cluster. Amazon EKS crea nuove interfacce di rete elastiche (interfacce di rete) per il cluster in una delle sottoreti specificate, che può essere diversa rispetto a quella in cui si trovano le interfacce di rete esistenti. Assicurati quindi che le regole del gruppo di sicurezza consentano la comunicazione necessaria con il cluster per una delle sottoreti specificate al momento della creazione del cluster. Se questa sottorete non esiste, se non ha abbastanza indirizzi IP disponibili o se non dispone di regole del gruppo di sicurezza per la comunicazione con il cluster, l'aggiornamento potrebbe non riuscire.

Nota

Per garantire che l'endpoint del server API per il tuo cluster sia sempre accessibile, Amazon EKS fornisce un'elevata disponibilitàKubernetespiano di controllo ed esegue aggiornamenti continui delle istanze del server API durante le operazioni di aggiornamento. Per tenere conto della modifica degli indirizzi IP delle istanze del server API che supportano il tuoKubernetesEndpoint del server API, devi assicurarti che i client del tuo server API gestiscano le riconnessioni in modo efficace. Versioni recenti dikubectle ilKubernetesclientelibrerieche sono ufficialmente supportati, esegui questo processo di riconnessione in modo trasparente.

Aggiornamento della versione di Kubernetes per il cluster Amazon EKS

Aggiornamento della versione di Kubernetes per il cluster
  1. Confronta la versione di Kubernetes del piano di controllo (control-plane) del cluster con la versione di Kubernetes dei nodi.

    • Ottieni la versione di Kubernetes del piano di controllo (control-plane) del cluster.

      kubectl version
    • Ottieni la versione di Kubernetes dei tuoi nodi. Questo comando restituisce tutti i nodi Amazon EC2 e Fargate gestiti e autogestiti. Ogni Pod Fargate è presente nell'elenco assieme al rispettivo nodo.

      kubectl get nodes

    Prima di aggiornare il piano di controllo (control-plane) a una nuova versione di Kubernetes, assicurati che la versione secondaria di Kubernetes dei nodi gestiti e dei nodi Fargate nel cluster sia la stessa della versione corrente del piano di controllo (control-plane). Ad esempio, se il piano di controllo è in esecuzione 1.28 e uno dei nodi è in esecuzione1.27, è necessario aggiornare i nodi alla versione 1.28 prima di aggiornare il piano di controllo alla versione 1.29. Prima di aggiornare il piano di controllo, si consiglia inoltre di aggiornare i nodi autogestiti alla stessa versione del piano di controllo. Per ulteriori informazioni, consultare Aggiornamento di un gruppo di nodi gestiti e Aggiornamenti del nodo autogestito. Se hai nodi Fargate con una versione secondaria inferiore rispetto alla versione del piano di controllo (control-plane), devi prima eliminare il Pod rappresentato dal nodo. a aggiornare il piano di controllo (control-plane). Dopo averli implementati di nuovo, tutti i Pods rimanenti verranno aggiornati alla nuova versione.

  2. Se la versione di Kubernetes su cui è stato originariamente implementato il cluster era Kubernetes 1.25 o successiva, puoi ignorare questo passaggio.

    Per impostazione predefinita, il controller di ammissione della policy di sicurezza Pod è abilitato sui cluster Amazon EKS. Assicurarsi che siano presenti le policy di sicurezza dei Pod appropriate prima di eseguire l'aggiornamento del cluster, al fine di evitare problemi. È possibile verificare la policy di default con il comando kubectl get psp eks.privileged.

    kubectl get psp eks.privileged

    Se ricevi il seguente errore, consulta Policy di sicurezza Pod predefinita di Amazon EKS prima di procedere.

    Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found
  3. Se la versione di Kubernetes su cui è stato originariamente implementato il cluster era Kubernetes 1.18 o successiva, puoi ignorare questo passaggio.

    potrebbe essere necessario rimuovere un termine interrotto dal manifesto CoreDNS.

    1. Controllare se il manifesto CoreDNS ha una riga contenente solo la parola upstream.

      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream

      Se non viene restituito alcun output, il manifesto non presenta alcun riga ed è possibile passare alla fase successiva. Se come risultato viene restituita la parola upstream è necessario rimuoverla.

    2. Modificare il file configmap, rimuovendo la riga vicino alla parte superiore del file contenente solo la parola upstream. Non apportare ulteriori modifiche al file. Dopo aver rimosso la riga, salvare le modifiche.

      kubectl edit configmap coredns -n kube-system -o yaml
  4. Aggiorna il cluster utilizzandoeksctl, il AWS Management Console, o il AWS CLI.

    Importante
    • Se stai eseguendo l'aggiornamento alla versione 1.23 e utilizzi volumi Amazon EBS nel cluster, allora dovrai installare il driver CSI di Amazon EBS nel cluster prima di aggiornare il cluster alla versione 1.23 per evitare interruzioni del carico di lavoro. Per ulteriori informazioni, consultare Kubernetes1.23 e Driver CSI per Amazon EBS.

    • Kubernetes 1.24 e versioni successive utilizzano containerd come runtime del container predefinito. Se stai passando al runtime containerd e hai già configurato Fluentd per Container Insights, devi eseguire la migrazione di Fluentd a Fluent Bit prima di aggiornare il cluster. I parser Fluentd sono configurati per analizzare solo i messaggi di log in formato JSON. A differenza di dockerd, il runtime del container containerd contiene messaggi di log che non sono in formato JSON. Se non esegui la migrazione a Fluent Bit, alcuni dei parser Fluentd's configurati genereranno un'enorme quantità di errori all'interno del container Fluentd. Per ulteriori informazioni sulla migrazione, consulta Configurare Fluent Bit come invio DaemonSet di log a Logs. CloudWatch

    • Poiché Amazon EKS viene eseguito in un piano di controllo ad alta disponibilità, è possibile aggiornare solo una versione secondaria alla volta. Per ulteriori informazioni su questo requisito, consulta Versione di Kubernetes e policy per il supporto Skew della versione. Supponiamo che la versione corrente del cluster sia 1.27 e che desideri aggiornarlo alla versione 1.29. Devi prima aggiornare la versione 1.27 del cluster alla versione 1.28, quindi aggiornare la versione 1.28 del cluster alla versione 1.29.

    • Verifica la discrepanza di versione tra kube-apiserver e kubelet di Kubernetes sui nodi.

      • A partire dalla versione 1.28 di Kubernetes, kubelet può essere fino a tre versioni minori precedenti rispetto a kube-apiserver. Consulta la sezione Kubernetes upstream version skew policy.

      • Se kubelet sui nodi gestiti e Fargate è nella versione 1.25 o più recente di Kubernetes, è possibile aggiornare il cluster fino a tre versioni successive senza aggiornare la versione di kubelet. Ad esempio, se kubelet è nella versione 1.25, è possibile aggiornare la versione del cluster Amazon EKS dalla 1.25 alla 1.26, 1.27 e 1.28 mentre kubelet rimane sulla versione 1.25.

      • Se kubelet sui nodi gestiti e Fargate è nella versione 1.24 o precedente di Kubernetes, può essere al massimo di due versioni minori precedenti rispetto a kube-apiserver. In altre parole, se kubelet è nella versione 1.24 o precedente, è possibile aggiornare il cluster solo fino a due versioni successive. Ad esempio, se kubelet è nella versione 1.21, è possibile aggiornare la versione del cluster Amazon EKS dalla 1.21 alla 1.22 e 1.23, ma non sarà possibile aggiornare il cluster alla 1.24 mentre kubelet rimane sulla 1.21.

    • Come best practice prima di iniziare un aggiornamento, assicurati che il kubelet sui tuoi nodi sia alla stessa versione di Kubernetes del tuo piano di controllo.

    • Se il cluster è configurato con una versione di Amazon VPC CNI plugin for Kubernetes precedente a 1.8.0, è preferibile aggiornare il plug-in all'ultima versione prima di aggiornare il cluster. Per aggiornare il plug-in, consulta Utilizzo del componente aggiuntivo Amazon VPC CNI plugin for Kubernetes di Amazon EKS.

    • Se stai aggiornando il cluster alla versione 1.25 o successiva e hai AWS Load Balancer Controller distribuito nel cluster, aggiorna il controller alla versione 2.4.7 o successiva prima di aggiornare la versione del cluster a 1.25. Per ulteriori informazioni, consulta le note di rilascio di Kubernetes1,25.

    eksctl

    Questa procedura richiede eksctl versione 0.171.0 o successiva. Puoi verificare la versione con il comando seguente:

    eksctl version

    Per istruzioni sull'installazione e sull'aggiornamento di eksctl, consulta la sezione Installation nella documentazione di eksctl.

    Aggiorna la versione di Kubernetes del tuo piano di controllo di Amazon EKS. Sostituisci my-cluster con il nome del cluster. Sostituisci 1.29 con il numero di versione supportato da Amazon EKS a cui desideri aggiornare il cluster. Per l'elenco completo delle versioni supportate, consulta Versioni Kubernetes di Amazon EKS.

    eksctl upgrade cluster --name my-cluster --version 1.29 --approve

    Il processo di aggiornamento può richiedere alcuni minuti per il completamento.

    AWS Management Console
    1. Aprire la console Amazon EKS all'indirizzo https://console.aws.amazon.com/eks/home#/clusters.

    2. Scegliere il nome del cluster Amazon EKS da aggiornare, quindi selezionare Aggiorna la versione del cluster.

    3. Per Kubernetes version (Versione Kubernetes), seleziona la versione a cui aggiornare il cluster e scegli Update (Aggiorna).

    4. In Nome cluster, immettere il nome del cluster e scegliere Conferma.

      Il processo di aggiornamento può richiedere alcuni minuti per il completamento.

    AWS CLI
    1. Aggiornare il cluster Amazon EKS con il seguente comando AWS CLI . Sostituisci i example values con i valori in tuo possesso. Sostituisci 1.29 con il numero di versione supportato da Amazon EKS a cui desideri aggiornare il cluster. Per l'elenco completo delle versioni supportate, consulta Versioni Kubernetes di Amazon EKS.

      aws eks update-cluster-version --region region-code --name my-cluster --kubernetes-version 1.29

      Di seguito viene riportato un output di esempio:

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "InProgress",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.29"
                  },
                  {
                      "type": "PlatformVersion",
                      "value": "eks.1"
                  }
              ],
      [...]
              "errors": []
          }
      }
    2. É possibile monitorare lo stato di aggiornamento del cluster attraverso il seguente comando. Utilizzare il nome del cluster e l'ID aggiornamento restituito dal comando precedente. Quando viene visualizzato lo stato Successful, l'aggiornamento è completo. Il processo di aggiornamento può richiedere alcuni minuti per il completamento.

      aws eks describe-update --region region-code --name my-cluster --update-id b5f0ba18-9a87-4450-b5a0-825e6e84496f

      Di seguito viene riportato un output di esempio:

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "Successful",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.29"
                  },
                  {
                      "type": "PlatformVersion",
                      "value": "eks.1"
                  }
              ],
      [...]
              "errors": []
          }
      }
  5. Una volta completato l'aggiornamento del cluster, aggiorna i nodi alla stessa versione secondaria di Kubernetes del cluster aggiornato. Per ulteriori informazioni, consultare Aggiornamenti del nodo autogestito e Aggiornamento di un gruppo di nodi gestiti. Tutti i nuovi Pods avviati in Fargate hanno una versione di kubelet che corrisponde alla versione del cluster. I Pods Fargate esistenti non vengono modificati.

  6. (Facoltativo) Se hai implementato Kubernetes Cluster Autoscaler nel cluster prima di aggiornarlo, aggiorna Cluster Autoscaler alla versione più recente che corrisponde alla versione principale e secondaria di Kubernetes per cui è stato eseguito l'aggiornamento.

    1. Apri la pagina delle versioni di Cluster Autoscaler in un browser Web e trova la versione più recente di Cluster Autoscaler corrispondente alla versione principale e secondaria di Kubernetes del cluster. Ad esempio, se la versione di Kubernetes del cluster è 1.29, cerca la versione più recente di Cluster Autoscaler che inizia con 1.29. Registra il numero di versione semantica (1.29.n, ad esempio) per tale versione da utilizzare nella fase successiva.

    2. Impostare il tag image di Cluster Autoscaler sulla versione registrata nella fase precedente mediante il comando seguente. Se necessario, sostituire 1.29.n con il valore in proprio possesso.

      kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.n
  7. (Cluster con soli nodi GPU) Se il cluster ha gruppi di nodi con supporto GPU (ad esempio, p3.2xlarge), dovrai necessario aggiornare il DaemonSet del plug-in del dispositivo NVIDIA per Kubernetes sul cluster con il seguente comando. vX.X.XSostituiscilo con la s-device-plugin versione di Nvidia/K8 desiderata prima di eseguire il comando seguente.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/nvidia-device-plugin.yml
  8. Aggiorna Amazon VPC CNI plugin for Kubernetes, CoreDNS e i componenti aggiuntivi kube-proxy. È preferibile aggiornare i componenti aggiuntivi alle versioni minime elencate nei Token dell'account di servizio.

    • Se stai utilizzando i componenti aggiuntivi di Amazon EKS, nella console Amazon EKS seleziona Clusters (Cluster), quindi seleziona il nome del cluster aggiornato nel riquadro di navigazione a sinistra. Le notifiche vengono visualizzate nella console Ti viene segnalato che è disponibile una nuova versione per ogni componente aggiuntivo per cui è disponibile un aggiornamento. Per aggiornare un componente aggiuntivo, seleziona la scheda Add-ons (Componenti aggiuntivi). In una delle caselle relative al componente aggiuntivo che dispone di un aggiornamento disponibile, selezionare Aggiorna ora, selezionare una versione disponibile e quindi selezionare Aggiorna.

    • In alternativa, è possibile utilizzare o per aggiornare i componenti aggiuntivi. AWS CLI eksctl Per ulteriori informazioni, consulta Aggiornamento di un componente aggiuntivo.

  9. Se necessario, aggiorna la tua versione di kubectl. Utilizza la versione secondaria kubectl immediatamente precedente a quella del piano di controllo del cluster Amazon EKS. Ad esempio, un client kubectl 1.28 funziona con i cluster Kubernetes 1.27, 1.28 e 1.29. Puoi controllare la versione attualmente installata con il seguente comando.

    kubectl version --client