Aggiornamento dei nodi ibridi per il tuo cluster - Amazon EKS

Contribuisci a migliorare questa pagina

Per contribuire a questa guida per l’utente, seleziona il link Edit this page on GitHub che si trova nel riquadro destro di ogni pagina.

Aggiornamento dei nodi ibridi per il tuo cluster

Le linee guida per l’aggiornamento dei nodi ibridi sono simili ai nodi Amazon EKS autogestiti eseguiti in Amazon EC2. Ti consigliamo di creare nuovi nodi ibridi nella versione di Kubernetes di destinazione, eseguire la migrazione con facilità delle applicazioni esistenti sui nodi ibridi sulla nuova versione di Kubernetes e rimuovere questi ultimi sulla vecchia versione di Kubernetes dal tuo cluster. Assicurati di consultare le Best practice di Amazon EKS per gli aggiornamenti prima di iniziare un aggiornamento. Amazon EKS Hybrid Nodes ha lo stesso Kubernetes version support per i cluster Amazon EKS con nodi cloud, incluso il supporto standard ed esteso.

Amazon EKS Hybrid Nodes segue la stessa policy di disallineamento delle versioni per i nodi di Kubernetes upstream. Amazon EKS Hybrid Nodes non può avere una versione più recente del piano di controllo di Amazon EKS e i nodi ibridi possono contenere fino a tre versioni secondarie di Kubernetes precedenti a quella secondaria del piano di controllo Amazon EKS.

Se non disponi di capacità di riserva per creare nuovi nodi ibridi sulla versione Kubernetes di destinazione per una strategia di conversione della migrazione, puoi in alternativa utilizzare la CLI di Amazon EKS Hybrid Nodes (nodeadm) per aggiornare la versione Kubernetes dei tuoi nodi ibridi sul posto.

Importante

Se stai aggiornando i tuoi nodi ibridi sul posto con nodeadm, è previsto un tempo di inattività per il nodo durante la procedura, in cui la versione precedente dei componenti di Kubernetes viene chiusa e i componenti della nuova versione vengono installati e avviati.

Prerequisiti

Prima di effettuare la connessione, assicurati di avere soddisfatto tutti i prerequisiti.

  • La versione Kubernetes di destinazione per l’aggiornamento dei nodi ibridi deve essere uguale o inferiore a quella del piano di controllo di Amazon EKS.

  • Se stai seguendo una strategia di conversione della migrazione e dell’aggiornamento, i nuovi nodi ibridi che stai installando sulla versione Kubernetes di destinazione devono soddisfare i requisiti Configurazione dei prerequisiti per i nodi ibridi. Ciò include la presenza di indirizzi IP all’interno del CIDR della rete di nodi remoti che hai trasferito durante la creazione del cluster Amazon EKS.

  • Sia per la conversione della migrazione che per gli aggiornamenti sul posto, i nodi ibridi devono avere accesso ai domini richiesti per sfruttare le nuove versioni delle dipendenze dei nodi ibridi.

  • Devi avere kubectl installato sul computer o sull’istanza locale che stai utilizzando per interagire con l’endpoint dell’API Amazon EKS Kubernetes.

  • La versione del tuo CNI deve supportare la versione di Kubernetes verso cui stai effettuando l’aggiornamento. In caso contrario, aggiorna la versione del CNI prima di aggiornare i nodi ibridi. Per ulteriori informazioni, consulta Configurazione della CNI per nodi ibridi.

Aggiornamenti conversione migrazione (blu-verde)

Gli aggiornamenti della conversione della migrazione si riferiscono al processo di creazione di nuovi nodi ibridi su nuovi host con la versione di Kubernetes di destinazione, con la migrazione graduale delle applicazioni esistenti ai nuovi nodi ibridi sulla versione Kubernetes di destinazione e la rimozione dei nodi ibridi sulla vecchia versione di Kubernetes dal cluster. Questa strategia è anche chiamata migrazione blu-verde.

  1. Connetti i tuoi nuovi host come nodi ibridi seguendo i passaggi di Connessione di nodi ibridi. Quando esegui il comando nodeadm install, utilizza la versione di Kubernetes di destinazione.

  2. Abilita la comunicazione tra i nuovi nodi ibridi nella versione Kubernetes di destinazione e quelli nella vecchia versione di Kubernetes. Ciò consente ai pod di comunicare tra loro durante la migrazione del carico di lavoro verso i nodi ibridi nella versione Kubernetes di destinazione.

  3. Verifica che i nodi ibridi sulla versione di Kubernetes di destinazione si uniscano correttamente al cluster e mostrino lo stato Pronto.

  4. Utilizza il comando seguente per contrassegnare come non programmabile ciascuno dei nodi che desideri rimuovere. In questo modo i nuovi pod non vengono pianificati né riprogrammati sui nodi che stai sostituendo. Per ulteriori informazioni, consulta cordonazione di kubelet nella documentazione di Kubernetes. Sostituisci NODE_NAME con il nome dei nodi ibridi nella vecchia versione di Kubernetes.

    kubectl cordon NODE_NAME

    Puoi individuare e isolare tutti i nodi di una determinata versione di Kubernetes (in questo caso 1.28) con il seguente frammento di codice.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Cordoning $node" kubectl cordon $node done
  5. Se l’implementazione attuale è in esecuzione per un numero di volte inferiore a due repliche CoreDNS, aumenta orizzontalmente l’implementazione a due repliche. Consigliamo di eseguire almeno due repliche CoreDNS su nodi ibridi per garantire la resilienza durante le normali operazioni.

    kubectl scale deployments/coredns --replicas=2 -n kube-system
  6. Svuota ciascuno dei nodi della vecchia versione di Kubernetes che desideri rimuovere dal cluster con il comando seguente. Per ulteriori informazioni su come svuotare i nodi, consulta Safely Drain a Node nella documentazione di Kubernetes. Sostituisci NODE_NAME con il nome dei nodi ibridi nella vecchia versione di Kubernetes.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data

    Puoi individuare e svuotare tutti i nodi di una determinata versione di Kubernetes (in questo caso, 1.28) con il seguente frammento di codice.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Draining $node" kubectl drain $node --ignore-daemonsets --delete-emptydir-data done
  7. Puoi utilizzare nodeadm per arrestare e rimuovere gli artefatti dei nodi ibridi dall’host. Devi eseguire nodeadm con un utente con privilegi root/sudo. Per impostazione predefinita, nodeadm uninstall non proseguirà se sul nodo rimangono dei pod. Per ulteriori informazioni, consulta Riferimento nodeadm dei nodi ibridi.

    nodeadm uninstall
  8. Una volta interrotti e disinstallati gli artefatti dei nodi ibridi, rimuovi la risorsa del nodo dal cluster.

    kubectl delete node node-name

    Puoi individuare ed eliminare tutti i nodi di una determinata versione di Kubernetes (in questo caso 1.28) con il seguente frammento di codice.

    K8S_VERSION=1.28 for node in $(kubectl get nodes -o json | jq --arg K8S_VERSION "$K8S_VERSION" -r '.items[] | select(.status.nodeInfo.kubeletVersion | match("\($K8S_VERSION)")).metadata.name') do echo "Deleting $node" kubectl delete node $node done
  9. A seconda del CNI scelto, potrebbero rimanere degli artefatti sui nodi ibridi dopo aver eseguito i passaggi precedenti. Per ulteriori informazioni, consulta Configurazione della CNI per nodi ibridi.

Aggiornamenti sul posto

La procedura di aggiornamento sul posto si riferisce all’utilizzo di nodeadm upgrade per l’aggiornamento della versione di Kubernetes per nodi ibridi senza utilizzare nuovi host fisici o virtuali e alla conversione della strategia di migrazione. Il processo nodeadm upgrade chiude i componenti Kubernetes precedenti esistenti in esecuzione sul nodo ibrido, disinstalla i componenti Kubernetes precedenti esistenti, installa i nuovi componenti Kubernetes di destinazione e avvia i nuovi componenti Kubernetes di destinazione. Si consiglia vivamente di aggiornare un nodo alla volta per ridurre al minimo l’impatto sulle applicazioni in esecuzione sui nodi ibridi. La durata di questo processo dipende dalla larghezza di banda e dalla latenza della rete.

  1. Usa il comando seguente per contrassegnare come non programmabile il nodo che stai aggiornando. In questo modo i nuovi pod non vengono pianificati né riprogrammati sul nodo che stai sostituendo. Per ulteriori informazioni, consulta cordonazione di kubelet nella documentazione di Kubernetes. Sostituisci NODE_NAME con il nome del nodo ibrido che stai aggiornando

    kubectl cordon NODE_NAME
  2. Svuota il nodo da aggiornare con il comando seguente. Per ulteriori informazioni su come svuotare i nodi, consulta Safely Drain a Node nella documentazione di Kubernetes. Sostituisci NODE_NAME con il nome del nodo ibrido che stai aggiornando.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data
  3. Esegui nodeadm upgrade sul nodo ibrido che stai aggiornando. Devi eseguire nodeadm con un utente con privilegi root/sudo. Il nome del nodo viene preservato durante l’aggiornamento per i provider di credenziali SSM di AWS e IAM Roles Anywhere di AWS. Durante il processo di aggiornamento non puoi modificare i provider di credenziali. Consulta Riferimento nodeadm dei nodi ibridi per i valori di configurazione per nodeConfig.yaml. Sostituisci K8S_VERSION con la versione di Kubernetes di destinazione verso cui esegui l’aggiornamento.

    nodeadm upgrade K8S_VERSION -c file://nodeConfig.yaml
  4. Per consentire la pianificazione dei pod sul nodo dopo l’aggiornamento, digita quanto segue. Sostituisci NODE_NAME con il nome del nodo.

    kubectl uncordon NODE_NAME
  5. Osserva lo stato dei nodi ibridi e attendi fino a quando i nodi si chiudono e si riavviano sulla nuova versione di Kubernetes con lo stato Pronto.

    kubectl get nodes -o wide -w