Aggiorna il cluster esistente alla nuova versione di Kubernetes - Amazon EKS

Aiutaci a migliorare questa pagina

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

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à.

Aggiorna il cluster esistente alla nuova versione di Kubernetes

Quando una nuova Kubernetes versione è disponibile in AmazonEKS, puoi aggiornare il tuo EKS cluster Amazon 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 Comprendi il ciclo di vita delle Kubernetes versioni su 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 nel EKS lancio da parte di Amazon di nuovi nodi API server con la Kubernetes versione aggiornata per sostituire quelli esistenti. Amazon EKS esegue controlli standard dell'infrastruttura e dello stato di preparazione del 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 fallisce, Amazon EKS ripristina la distribuzione dell'infrastruttura e il cluster rimane nella Kubernetes versione precedente. Le applicazioni in esecuzione non sono interessate e il cluster non viene mai lasciato in uno stato non deterministico o irrecuperabile. Amazon esegue EKS regolarmente il backup di tutti i cluster gestiti ed esistono meccanismi per ripristinare i cluster, se necessario. 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 che hai specificato al momento della creazione del cluster. Amazon EKS crea nuove interfacce di rete elastiche per cluster (interfacce di rete) in tutte le sottoreti che hai specificato. 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 API server per il tuo cluster sia sempre accessibile, Amazon EKS fornisce un piano di Kubernetes controllo ad alta disponibilità ed esegue aggiornamenti continui delle istanze del API server durante le operazioni di aggiornamento. Per tenere conto della modifica degli indirizzi IP delle istanze del API server che supportano l'endpoint del Kubernetes API server, è necessario assicurarsi che i client API server gestiscano le riconnessioni in modo efficace. Versioni recenti dikubectle ilKubernetesclientelibrerieche sono ufficialmente supportati, esegui questo processo di riconnessione in modo trasparente.

Aggiorna la Kubernetes versione per il tuo EKS cluster Amazon

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 e Fargate autogestiti EC2 e gestiti. 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.29 e uno dei nodi è in esecuzione1.28, è necessario aggiornare i nodi alla versione 1.29 prima di aggiornare il piano di controllo alla versione 1.30. 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, consulta Aggiorna un gruppo di nodi gestiti per il tuo cluster e Aggiorna i nodi autogestiti per il tuo cluster. 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 delle policy di Pod sicurezza è abilitato sui EKS cluster Amazon. 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 EBS volumi Amazon nel tuo cluster, devi installare il EBS CSI driver Amazon nel cluster prima di aggiornare il cluster alla versione per 1.23 evitare interruzioni del carico di lavoro. Per ulteriori informazioni, consulta Kubernetes1.23 e Archivia Kubernetes volumi con 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 Fluentd parser sono configurati per analizzare solo i messaggi di log in formato. JSON Al contrariodockerd, il runtime del containerd contenitore contiene messaggi di registro che non sono in JSON formato. 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 utilizza un piano di controllo ad alta disponibilità, puoi 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.28 e che desideri aggiornarlo alla versione 1.30. Devi prima aggiornare la versione 1.28 del cluster alla versione 1.29, quindi aggiornare la versione 1.29 del cluster alla versione 1.30.

    • 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 la versione kubelet è attiva1.25, puoi aggiornare la versione EKS del cluster Amazon da 1.25 a 1.261.27, a e a 1.28 mentre la versione kubelet rimane attiva1.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 la versione kubelet è 1.21 attiva, puoi aggiornare la versione del EKS cluster Amazon da 1.21 a 1.22 e verso1.23, ma non sarai in grado di aggiornare il cluster a 1.24 mentre kubelet rimane attivo1.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 Lavorare con il EKS componente aggiuntivo Amazon VPC CNI plugin for Kubernetes Amazon.

    • 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.187.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 Kubernetes versione del tuo piano EKS di controllo Amazon. Replace (Sostituisci) il mio cluster con il nome del tuo cluster. Replace (Sostituisci) 1.30 con il numero di versione EKS supportato da Amazon a cui desideri aggiornare il cluster. Per l'elenco completo delle versioni supportate, consulta Comprendi il ciclo di vita delle Kubernetes versioni su EKS.

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

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

    AWS Management Console
    1. Apri la EKS console Amazon a https://console.aws.amazon.com/eks/home#/clusters.

    2. Scegli il nome del EKS cluster Amazon da aggiornare e scegli Update cluster version.

    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. Aggiorna il tuo EKS cluster Amazon con il seguente AWS CLI comando. Sostituisci il valori di esempio con il tuo. Replace (Sostituisci) 1.30 con il numero di versione EKS supportato da Amazon a cui desideri aggiornare il cluster. Per l'elenco completo delle versioni supportate, consulta Comprendi il ciclo di vita delle Kubernetes versioni su EKS.

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

      Di seguito viene riportato un output di esempio:

      {
          "update": {
              "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f",
              "status": "InProgress",
              "type": "VersionUpdate",
              "params": [
                  {
                      "type": "Version",
                      "value": "1.30"
                  },
                  {
                      "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.30"
                  },
                  {
                      "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, consulta Aggiorna i nodi autogestiti per il tuo cluster e Aggiorna un gruppo di nodi gestiti per il tuo cluster. 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.30, cerca la versione più recente di Cluster Autoscaler che inizia con 1.30. Registra il numero di versione semantica (1.30.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.30.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.30.n
  7. (Solo cluster con GPU nodi) Se il cluster dispone di gruppi di nodi con GPU supporto (ad esempio,p3.2xlarge), è necessario aggiornare il plug-in del NVIDIA dispositivo Kubernetes DaemonSet sul cluster. vX.X.XSostituiscilo con la s-device-plugin versione NVIDIA/k8 desiderata prima di eseguire il comando seguente.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/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 utilizzi EKS componenti aggiuntivi Amazon, seleziona Clusters nella EKS console Amazon, quindi seleziona il nome del cluster che hai 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, puoi utilizzare AWS CLI o per aggiornare i componenti aggiuntivieksctl. Per ulteriori informazioni, consulta Aggiornamento di un EKS componente aggiuntivo Amazon.

  9. Se necessario, aggiorna la tua versione di kubectl. È necessario utilizzare una kubectl versione che rientri in una differenza di versione minore del piano di controllo del EKS cluster Amazon. Ad esempio, un client kubectl 1.29 funziona con i cluster Kubernetes 1.28, 1.29 e 1.30. Puoi controllare la versione attualmente installata con il seguente comando.

    kubectl version --client

Effettua il downgrade della Kubernetes versione per un cluster Amazon EKS

Non è possibile effettuare il downgrade Kubernetes di un EKS cluster Amazon. Invece, crea un nuovo cluster su una EKS versione precedente di Amazon e migra i carichi di lavoro.