Mettre à jour le cluster existant vers la nouvelle version de Kubernetes - Amazon EKS

Aidez à améliorer cette page

Vous souhaitez contribuer à ce guide de l'utilisateur ? Faites défiler cette page vers le bas et sélectionnez Modifier cette page sur GitHub. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tous.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mettre à jour le cluster existant vers la nouvelle version de Kubernetes

Quand un nouveau Kubernetes La version est disponible sur AmazonEKS, vous pouvez mettre à jour votre EKS cluster Amazon vers la dernière version.

Important

Une fois que vous avez mis à niveau un cluster, vous ne pouvez pas le rétrograder vers une version antérieure. Nous vous recommandons, avant de procéder à la mise à jour vers un nouveau Kubernetes version, vous passez en revue les informations contenues Comprenez le Kubernetes cycle de vie des versions sur EKS et également dans les étapes de mise à jour de cette rubrique.

New Kubernetes les versions introduisent parfois des modifications importantes. Par conséquent, nous vous recommandons de tester le comportement de vos applications par rapport à un nouveau Kubernetes version avant de mettre à jour vos clusters de production. Pour ce faire, vous pouvez créer un flux de travail d'intégration continue pour tester le comportement de votre application avant de passer à un nouveau Kubernetes version.

Le processus de mise à jour consiste pour Amazon à EKS lancer de nouveaux nœuds de API serveur avec la mise à jour Kubernetes version pour remplacer les versions existantes. Amazon EKS effectue des vérifications standard de l'état de l'infrastructure et du niveau de préparation du trafic réseau sur ces nouveaux nœuds afin de vérifier qu'ils fonctionnent comme prévu. Cependant, une fois que vous avez commencé la mise à niveau du cluster, vous ne pouvez ni la suspendre ni l'arrêter. Si l'une de ces vérifications échoue, Amazon EKS annule le déploiement de l'infrastructure et votre cluster reste sur le précédent Kubernetes version. Les applications en cours d'exécution ne sont pas affectées, et votre cluster n'est jamais laissé dans un état non déterministe ou irrécupérable. Amazon sauvegarde EKS régulièrement tous les clusters gérés, et des mécanismes existent pour récupérer les clusters si nécessaire. Nous évaluons et améliorons constamment notre Kubernetes les processus de gestion de l'infrastructure.

Pour mettre à jour le cluster, Amazon a EKS besoin d'un maximum de cinq adresses IP disponibles provenant des sous-réseaux que vous avez spécifiés lors de la création de votre cluster. Amazon EKS crée de nouvelles interfaces réseau élastiques en cluster (interfaces réseau) dans tous les sous-réseaux que vous avez spécifiés. Les interfaces réseau peuvent être créées dans des sous-réseaux différents de ceux dans lesquels se trouvent vos interfaces réseau existantes. Assurez-vous donc que les règles de votre groupe de sécurité autorisent la communication de cluster requise pour tous les sous-réseaux que vous avez spécifiés lors de la création de votre cluster. Si l'un des sous-réseaux que vous avez spécifiés lors de la création du cluster n'existe pas, ne dispose pas de suffisamment d'adresses IP disponibles ou de règles de groupe de sécurité permettant la communication nécessaire avec le cluster, la mise à jour peut échouer.

Note

Pour garantir que le point de terminaison API du serveur de votre cluster est toujours accessible, Amazon EKS fournit une solution hautement disponible Kubernetes plan de contrôle et effectue des mises à jour continues des instances de API serveur lors des opérations de mise à jour. Afin de tenir compte de la modification des adresses IP des instances de API serveur prenant en charge votre Kubernetes APIpoint de terminaison du serveur, vous devez vous assurer que les clients de votre API serveur gèrent efficacement les reconnexions. Versions récentes de kubectl et Kubernetes les bibliothèques clientes officiellement prises en charge exécutent ce processus de reconnexion de manière transparente.

Mettez à jour le Kubernetes version pour votre EKS cluster Amazon

Pour mettre à jour le Kubernetes version pour votre cluster
  1. Comparez les Kubernetes version de votre plan de contrôle de cluster vers Kubernetes version de vos nœuds.

    • Obtenez le Kubernetes version de votre plan de contrôle de cluster.

      kubectl version
    • Obtenez le Kubernetes version de vos nœuds. Cette commande renvoie tous les nœuds Amazon et Fargate autogérés EC2 et gérés. Chaque Fargate Pod est répertorié comme son propre nœud.

      kubectl get nodes

    Avant de mettre à jour votre plan de contrôle vers un nouveau Kubernetes version, assurez-vous que Kubernetes une version mineure des nœuds gérés et des nœuds Fargate de votre cluster est identique à la version de votre plan de contrôle. Par exemple, si votre plan de contrôle exécute la version 1.30 et que l'un de vos nœuds exécute la version1.29, vous devez mettre à jour vos nœuds vers la version 1.31 1.30 avant de mettre à jour votre plan de contrôle vers la version 1.31. Nous vous recommandons également de mettre à jour vos nœuds autogérés vers la même version que votre plan de contrôle avant de mettre à jour le plan de contrôle. Pour plus d’informations, consultez Mettre à jour un groupe de nœuds gérés pour votre cluster et Mettez à jour les nœuds autogérés pour votre cluster. Si vous avez des nœuds Fargate dont la version mineure est inférieure à la version du plan de contrôle, supprimez d'abord le Pod qui est représenté par le nœud. Mettez ensuite à jour votre plan de contrôle. Tout ce qui reste Pods seront mis à jour vers la nouvelle version une fois que vous les aurez redéployés.

  2. Si l'icône Kubernetes la version avec laquelle vous avez initialement déployé votre cluster était Kubernetes 1.25ou plus tard, ignorez cette étape.

    Par défaut, le Pod le contrôleur d'admission des politiques de sécurité est activé sur les EKS clusters Amazon. Avant de mettre à jour votre cluster, assurez-vous que Pod des politiques de sécurité sont en place. Il s'agit ainsi d'éviter les problèmes de sécurité potentiels. Vous pouvez vérifier la politique par défaut à l'aide de la commande kubectl get psp eks.privileged.

    kubectl get psp eks.privileged

    Si vous recevez l'erreur suivante, veuillez consulter Amazon EKS par défaut Pod politique de sécurité avant de continuer.

    Error from server (NotFound): podsecuritypolicies.extensions "eks.privileged" not found
  3. Si l'icône Kubernetes la version avec laquelle vous avez initialement déployé votre cluster était Kubernetes 1.18ou plus tard, ignorez cette étape.

    Il se peut que vous deviez supprimer un terme abandonné de votre CoreDNS manifeste.

    1. Vérifiez si votre CoreDNS Le manifeste comporte une ligne qui ne contient que le motupstream.

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

      Si aucune sortie n'est renvoyée, cela signifie que votre manifeste n'a pas la ligne. Dans ce cas, passez à l'étape suivante. Si le mot upstream est retourné, supprimez la ligne.

    2. Supprimez la ligne près du haut du fichier qui ne contient que le mot upstream dans le fichier configmap. Ne changez rien d'autre dans le fichier. Une fois la ligne supprimée, enregistrez les modifications.

      kubectl edit configmap coredns -n kube-system -o yaml
  4. Mettez à jour votre cluster à l'aide du eksctl AWS Management Console, ou du AWS CLI.

    Important
    • Si vous effectuez une mise à jour vers la version 1.23 et que vous utilisez des EBS volumes Amazon dans votre cluster, vous devez installer le EBS CSI pilote Amazon dans votre cluster avant de mettre à jour votre cluster vers la version 1.23 afin d'éviter toute interruption de charge de travail. Pour plus d’informations, consultez Kubernetes1,23 et Stockage Kubernetes volumes avec Amazon EBS.

    • Kubernetes 1.24 et versions ultérieures utilisent containerd comme environnement d'exécution du conteneur par défaut. Si vous passez au containerd runtime et que vous avez déjà Fluentd configuré pour Container Insights, alors vous devez migrer Fluentd to Fluent Bit avant de mettre à jour votre cluster. Le Fluentd les analyseurs sont configurés pour analyser uniquement les messages du journal au JSON format. Contrairement à celadockerd, l'environnement d'exécution du containerd conteneur contient des messages de journal qui ne sont pas au JSON format. Si vous ne migrez pas vers Fluent Bit, certains des paramètres configurés Fluentd's les analyseurs génèreront une quantité massive d'erreurs à l'intérieur du Fluentd contenant. Pour plus d'informations sur la migration, voir Configuration Fluent Bit comme DaemonSet pour envoyer des journaux à CloudWatch Logs.

    • Amazon utilisant un EKS plan de contrôle hautement disponible, vous ne pouvez mettre à jour qu'une seule version mineure à la fois. Pour plus d'informations sur cette exigence, voir Kubernetes Politique de support en cas de distorsion des versions et des versions. Supposez que la version actuelle de votre cluster soit la version 1.29 et que vous souhaitiez la mettre à jour vers la version 1.31. Vous devez d'abord mettre à jour la version 1.29 de votre cluster vers la version 1.30, puis mettre à jour la version 1.30 de votre cluster vers la version 1.31.

    • Vérifiez l'écart de version entre les Kubernetes kube-apiserveret ensuite kubelet sur vos nœuds.

      • À partir de Kubernetes version1.28, kubelet peut être antérieure de trois versions mineures au maximum àkube-apiserver. Voir la politique d'asymétrie des versions en amont de Kubernetes.

      • Si vos kubelet nœuds gérés et Fargate sont activés Kubernetes version 1.25 ou plus récente, vous pouvez mettre à jour votre cluster jusqu'à trois versions à l'avance sans mettre à jour la kubelet version. Par exemple, si la version kubelet est activée1.25, vous pouvez mettre à jour la version de votre EKS cluster Amazon de 1.25 vers 1.261.27, vers et vers 1.28 tant que la version kubelet reste active1.25.

      • Si vos kubelet nœuds gérés et Fargate sont activés Kubernetes version 1.24 ou antérieure, il ne peut y avoir que deux versions mineures plus anciennes que lekube-apiserver. En d'autres termes, si la version du kubelet est 1.24 ou une version antérieure, vous ne pouvez mettre à jour votre cluster que sur deux versions plus récentes. Par exemple, si la version kubelet est activée1.21, vous pouvez mettre à jour la version de 1.21 votre EKS cluster Amazon de à1.23, mais vous ne pourrez pas mettre à jour le cluster 1.24 tant qu'kubeletil restera activé1.21. 1.22

    • Il est recommandé, avant de commencer une mise à jour, de vous assurer que kubelet le contenu de vos nœuds est identique Kubernetes version comme plan de contrôle.

    • Si votre cluster est configuré avec une version du Amazon VPC CNI plugin for Kubernetes qui est antérieure à1.8.0, alors nous vous recommandons de mettre à jour le plugin vers la dernière version avant de mettre à jour votre cluster. Pour mettre à jour le plugin, consultez Attribuer IPs à Pods avec Amazon VPC CNI.

    • Si vous mettez à jour votre cluster vers la version 1.25 ou une version ultérieure et que vous disposez du AWS Load Balancer Controller déployé dans votre cluster, puis mettez à jour le contrôleur vers la version 2.4.7 ou ultérieure avant de mettre à jour la version de votre cluster vers1.25. Pour plus d'informations, consultez les notes de mise à jour de Kubernetes1,25.

    eksctl

    Cette procédure nécessite eksctl version 0.191.0 ou ultérieure. Vous pouvez vérifier votre version avec la commande suivante :

    eksctl version

    Pour les instructions d'installation et de mise à jour de eksctl, consultez la rubrique Installation dans la documentation eksctl.

    Mettez à jour le Kubernetes version de votre plan EKS de contrôle Amazon. Remplacez mon-cluster avec le nom de votre cluster. Remplacez 1.31 avec le numéro de version EKS prise en charge par Amazon vers lequel vous souhaitez mettre à jour votre cluster. Pour obtenir une liste des numéros de version pris en charge, consultez Comprenez le Kubernetes cycle de vie des versions sur EKS.

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

    Cette mise à jour peut prendre plusieurs minutes.

    AWS Management Console
    1. Ouvrez la EKS console Amazon à l'adresse https://console.aws.amazon.com/eks/home#/clusters.

    2. Choisissez le nom du EKS cluster Amazon à mettre à jour, puis choisissez Mettre à jour la version du cluster.

    3. Pour Kubernetes version, sélectionnez la version vers laquelle mettre à jour votre cluster et choisissez Mettre à jour.

    4. Dans Cluster name (Nom du cluster), saisissez le nom de votre cluster, puis sélectionnez Confirm (Confirmer).

      Cette mise à jour peut prendre plusieurs minutes.

    AWS CLI
    1. Mettez à jour votre EKS cluster Amazon à l'aide de la AWS CLI commande suivante. Remplacez le exemples de valeurs avec le vôtre. Remplacez 1.31 avec le numéro de version EKS prise en charge par Amazon vers lequel vous souhaitez mettre à jour votre cluster. Pour obtenir une liste des numéros de version pris en charge, consultez Comprenez le Kubernetes cycle de vie des versions sur EKS.

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

      L'exemple qui suit illustre un résultat.

      { "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "InProgress", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.31" }, { "type": "PlatformVersion", "value": "eks.1" } ], [...] "errors": [] } }
    2. Contrôlez l'état de mise à jour de votre cluster avec la commande suivante. Utilisez le nom de cluster et l'ID de mise à jour renvoyé par la commande précédente. Lorsqu'un état Successful s'affiche, la mise à jour est terminée. Cette mise à jour peut prendre plusieurs minutes.

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

      L'exemple qui suit illustre un résultat.

      { "update": { "id": "b5f0ba18-9a87-4450-b5a0-825e6e84496f", "status": "Successful", "type": "VersionUpdate", "params": [ { "type": "Version", "value": "1.31" }, { "type": "PlatformVersion", "value": "eks.1" } ], [...] "errors": [] } }
  5. Une fois la mise à jour de votre cluster terminée, mettez à jour vos nœuds de la même manière Kubernetes version mineure en tant que cluster mis à jour. Pour plus d’informations, consultez Mettez à jour les nœuds autogérés pour votre cluster et Mettre à jour un groupe de nœuds gérés pour votre cluster. Tout nouveau Pods qui sont lancés sur Fargate ont kubelet une version qui correspond à la version de votre cluster. Fargate existant Pods ne sont pas modifiés.

  6. (Facultatif) Si vous avez déployé Kubernetes Cluster Autoscaler vers votre cluster Avant de mettre à jour le cluster, mettez à jour le Cluster Autoscaler vers la dernière version correspondant au Kubernetes version majeure et mineure vers laquelle vous avez effectué la mise à jour.

    1. Ouvrez la page des versions de Cluster Autoscaler dans un navigateur Web et recherchez la dernière version de Cluster Autoscaler qui correspond à celle de votre cluster Kubernetes version majeure et mineure. Par exemple, si votre cluster Kubernetes La version est de 1.31 trouver la dernière version de Cluster Autoscaler qui commence par. 1.31 Enregistrez le numéro de version sémantique (1.31.n, par exemple) de cette version à utiliser à l'étape suivante.

    2. Identifiez l'image Cluster Autoscaler sur la version que vous avez enregistrée à l'étape précédente avec la commande suivante. Si nécessaire, remplacez 1.31.n par votre propre valeur.

      kubectl -n kube-system set image deployment.apps/cluster-autoscaler cluster-autoscaler=registry.k8s.io/autoscaling/cluster-autoscaler:v1.31.n
  7. (Clusters avec GPU nœuds uniquement) Si votre cluster possède des groupes de nœuds pris en GPU charge (par exemple,p3.2xlarge), vous devez mettre à jour le plug-in de NVIDIA périphérique pour Kubernetes DaemonSet sur votre cluster. vX.X.XRemplacez-le par la s-device-plugin version NVIDIA/k8 de votre choix avant d'exécuter la commande suivante.

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
  8. Mettez à jour le Amazon VPC CNI plugin for Kubernetes, CoreDNS, et des kube-proxy modules complémentaires. Nous vous recommandons de mettre à jour les modules complémentaires avec les versions minimales répertoriées dans les jetons de compte de service.

    • Si vous utilisez des EKS modules complémentaires Amazon, sélectionnez Clusters dans la EKS console Amazon, puis sélectionnez le nom du cluster que vous avez mis à jour dans le volet de navigation de gauche. Les notifications s'affichent dans la console. Elles vous informent qu'une nouvelle version est disponible pour chaque module complémentaire disposant d'une mise à jour disponible. Pour mettre à jour un module complémentaire, sélectionnez l'onglet Add-ons (Modules complémentaires). Dans l'une des zones d'un module complémentaire dont une mise à jour est disponible, sélectionnez Update now (Mettre à jour maintenant), sélectionnez une version disponible, puis cliquez sur Update (Mise à jour).

    • Vous pouvez également utiliser le AWS CLI ou eksctl pour mettre à jour les modules complémentaires. Pour de plus amples informations, veuillez consulter Mettre à jour un EKS module complémentaire Amazon.

  9. Si nécessaire, mettez à jour votre version de kubectl. Vous devez utiliser une kubectl version présentant une différence de version mineure par rapport à votre plan de contrôle de EKS cluster Amazon. Par exemple, un 1.30 kubectl client travaille avec Kubernetes 1.291.30, et des 1.31 clusters. Vous pouvez vérifier votre version installée à l'aide de la commande suivante.

    kubectl version --client

Rétrogradez le Kubernetes version pour un EKS cluster Amazon

Vous ne pouvez pas rétrograder le Kubernetes d'un EKS cluster Amazon. Créez plutôt un nouveau cluster sur une EKS version précédente d'Amazon et migrez les charges de travail.