Mettre à niveau les nœuds hybrides pour votre cluster - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Mettre à niveau les nœuds hybrides pour votre cluster

Les instructions relatives à la mise à niveau des nœuds hybrides sont similaires à celles des nœuds Amazon EKS autogérés qui s’exécutent dans Amazon EC2. Nous vous recommandons de créer de nouveaux nœuds hybrides sur votre version Kubernetes cible, de migrer en douceur vos applications existantes vers les nœuds hybrides de la nouvelle version Kubernetes, puis de supprimer les nœuds hybrides de l’ancienne version Kubernetes de votre cluster. Avant de lancer une mise à niveau, veillez à consulter les meilleures pratiques Amazon EKS en matière de mise à niveau. Les nœuds hybrides Amazon EKS prennent en charge la même version de Kubernetes que les clusters Amazon EKS avec nœuds cloud, y compris la prise en charge standard et étendue.

Les nœuds hybrides Amazon EKS suivent la même politique de distorsion des versions pour les nœuds que pour Kubernetes en amont. Les nœuds hybrides Amazon EKS ne peuvent pas être d’une version plus récente que le plan de contrôle Amazon EKS, et les nœuds hybrides peuvent être jusqu’à trois versions mineures Kubernetes plus anciennes que la version mineure du plan de contrôle Amazon EKS.

Si vous ne disposez pas de capacité suffisante pour créer de nouveaux nœuds hybrides sur votre version Kubernetes cible dans le cadre d’une stratégie de migration par basculement, vous pouvez également utiliser l’interface CLI nœuds hybrides Amazon EKS (nodeadm) pour mettre à niveau la version Kubernetes de vos nœuds hybrides sur place.

Important

Si vous mettez à niveau vos nœuds hybrides sur place avec nodeadm, il y a une durée d’indisponibilité pour le nœud pendant le processus où l’ancienne version des composants Kubernetes est arrêtée et où les composants de la nouvelle version Kubernetes sont installés et démarrés.

Prérequis

Avant de procéder à la mise à niveau, assurez-vous d’avoir rempli les conditions préalables suivantes.

  • La version Kubernetes cible pour la mise à niveau de vos nœuds hybrides doit être égale ou inférieure à la version du plan de contrôle Amazon EKS.

  • Si vous suivez une stratégie de migration par basculement, les nouveaux nœuds hybrides que vous installez sur votre version Kubernetes cible doivent répondre aux exigences Configuration préalable requise pour les nœuds hybrides. Cela inclut le fait d’avoir des adresses IP dans le CIDR du réseau de nœuds distants que vous avez transmis lors de la création du cluster Amazon EKS.

  • Pour les migrations par basculement et les mises à niveau sur site, les nœuds hybrides doivent avoir accès aux domaines requis pour extraire les nouvelles versions des dépendances des nœuds hybrides.

  • Vous devez avoir installé kubectl sur votre machine locale ou l’instance que vous utilisez pour interagir avec votre point de terminaison API Amazon EKS Kubernetes.

  • La version de votre CNI doit prendre en charge la version de Kubernetes vers laquelle vous effectuez la mise à niveau. Si ce n’est pas le cas, mettez à niveau votre version CNI avant de mettre à niveau vos nœuds hybrides. Pour plus d’informations, consultez Configurer CNI pour les nœuds hybrides.

Mises à niveau liées à la migration par transition (bleu-vert)

Les mises à niveau par migration cutover désignent le processus consistant à créer de nouveaux nœuds hybrides sur de nouveaux hôtes avec votre version Kubernetes cible, à migrer en douceur vos applications existantes vers les nouveaux nœuds hybrides sur votre version Kubernetes cible, et à supprimer les nœuds hybrides sur l’ancienne version Kubernetes de votre cluster. Cette stratégie est également appelée migration bleu-vert.

  1. Connectez vos nouveaux hôtes en tant que nœuds hybrides en suivant les étapes Connecter les nœuds hybrides. Lorsque vous exécutez la commande nodeadm install, utilisez votre version cible de Kubernetes.

  2. Activez la communication entre les nouveaux nœuds hybrides sur la version Kubernetes cible et vos nœuds hybrides sur l’ancienne version Kubernetes. Cette configuration permet aux pods de communiquer entre eux pendant que vous migrez votre charge de travail vers les nœuds hybrides sur la version Kubernetes cible.

  3. Vérifiez que vos nœuds hybrides sur votre version Kubernetes cible ont bien rejoint votre cluster et ont le statut Ready.

  4. Utilisez la commande suivante pour marquer chacun des nœuds que vous souhaitez supprimer comme non planifiable. Cela permet d’éviter que de nouveaux pods ne soient planifiés ou replanifiés sur les nœuds que vous remplacez. Pour plus d’informations, consultez le cordon kubelet dans la documentation Kubernetes. Remplacez NODE_NAME par le nom des nœuds hybrides de l’ancienne version de Kubernetes.

    kubectl cordon NODE_NAME

    Vous pouvez identifier et isoler tous les nœuds d’une version particulière de Kubernetes (dans ce cas, 1.28) à l’aide de l’extrait de code suivant.

    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. Si votre déploiement actuel exécute moins de deux réplicas CoreDNS sur vos nœuds hybrides, augmentez horizontalement la capacité du déploiement à au moins deux réplicas. Nous vous recommandons d’exécuter au moins deux réplicas CoreDNS sur des nœuds hybrides afin d’assurer la résilience pendant les opérations normales.

    kubectl scale deployments/coredns --replicas=2 -n kube-system
  6. Videz chacun des nœuds hybrides de l’ancienne version de Kubernetes que vous souhaitez supprimer de votre cluster à l’aide de la commande suivante. Pour plus d’informations sur la mise hors tension des nœuds, consultez la section Mettre hors tension un nœud en toute sécurité dans la documentation Kubernetes. Remplacez NODE_NAME par le nom des nœuds hybrides de l’ancienne version de Kubernetes.

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

    Vous pouvez identifier et vider tous les nœuds d’une version particulière de Kubernetes (dans ce cas, 1.28) à l’aide de l’extrait de code suivant.

    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. Vous pouvez utiliser nodeadm pour arrêter et supprimer les artefacts des nœuds hybrides de l’hôte. Vous devez exécuter nodeadm avec un utilisateur disposant des privilèges root/sudo. Par défaut, nodeadm uninstall ne continuera pas s’il reste des pods sur le nœud. Pour plus d’informations, consultez Référence des nœuds hybrides nodeadm.

    nodeadm uninstall
  8. Une fois les artefacts des nœuds hybrides arrêtés et désinstallés, supprimez la ressource du nœud de votre cluster.

    kubectl delete node node-name

    Vous pouvez identifier et supprimer tous les nœuds d’une version particulière de Kubernetes (dans ce cas, 1.28) à l’aide de l’extrait de code suivant.

    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. Selon votre choix de CNI, il se peut que des artefacts subsistent sur vos nœuds hybrides après avoir exécuté les étapes ci-dessus. Pour plus d’informations, consultez Configurer CNI pour les nœuds hybrides.

Mises à niveau sur place

Le processus de mise à niveau sur place consiste à utiliser nodeadm upgrade pour mettre à niveau la version Kubernetes pour les nœuds hybrides sans utiliser de nouveaux hôtes physiques ou virtuels ni de stratégie de migration par basculement. Le processus nodeadm upgrade arrête les anciens composants Kubernetes existants qui s’exécutent sur le nœud hybride, désinstalle les anciens composants Kubernetes existants, installe les nouveaux composants Kubernetes cibles et démarre les nouveaux composants Kubernetes cibles. Il est fortement recommandé de mettre à niveau un nœud à la fois afin de minimiser l’impact sur les applications exécutées sur les nœuds hybrides. La durée de ce processus dépend de la bande passante et de la latence de votre réseau.

  1. Utilisez la commande suivante pour marquer le nœud que vous mettez à niveau comme non planifiable. Cela permet d’éviter que de nouveaux pods ne soient planifiés ou replanifiés sur le nœud que vous mettez à niveau. Pour plus d’informations, consultez kubectl cordon dans la documentation Kubernetes. Remplacer NODE_NAME par le nom du nœud hybride que vous mettez à niveau

    kubectl cordon NODE_NAME
  2. Videz le nœud que vous mettez à niveau à l’aide de la commande suivante. Pour plus d’informations sur la mise hors tension des nœuds, consultez la section Mettre hors tension un nœud en toute sécurité dans la documentation Kubernetes. Remplacez NODE_NAME par le nom du nœud hybride que vous mettez à niveau.

    kubectl drain NODE_NAME --ignore-daemonsets --delete-emptydir-data
  3. Exécutez nodeadm upgrade sur le nœud hybride que vous mettez à niveau. Vous devez exécuter nodeadm avec un utilisateur disposant des privilèges root/sudo. Le nom du nœud est conservé lors de la mise à niveau pour les fournisseurs d’informations d’identification AWS SSM et Rôles Anywhere IAM AWS. Vous ne pouvez pas changer de fournisseur d’informations d’identification pendant le processus de mise à niveau. Consultez Référence des nœuds hybrides nodeadm pour les valeurs de configuration de nodeConfig.yaml. Remplacez K8S_VERSION par la version cible de Kubernetes vers laquelle vous effectuez la mise à niveau.

    nodeadm upgrade K8S_VERSION -c file://nodeConfig.yaml
  4. Pour autoriser la planification des pods sur le nœud après la mise à niveau, tapez ce qui suit. Remplacez NODE_NAME par le nom du nœud.

    kubectl uncordon NODE_NAME
  5. Vérifiez le statut de vos nœuds hybrides et attendez que vos nœuds s’arrêtent et redémarrent sur la nouvelle version de Kubernetes avec le statut Ready.

    kubectl get nodes -o wide -w