Créer des nœuds Amazon Linux autogérés - 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.

Créer des nœuds Amazon Linux autogérés

Cette rubrique décrit comment lancer des groupes Auto Scaling de nœuds Linux qui s'enregistrent auprès de votre cluster Amazon EKS. Une fois que les nœuds ont rejoint le cluster, vous pouvez y déployer des applications Kubernetes. Vous pouvez également lancer des nœuds Amazon Linux autogérés à l’aide de eksctl ou de la AWS Management Console. Si vous devez lancer des nœuds sur AWS Outposts, consultez Créez des nœuds Amazon Linux sur AWS Outposts.

  • Un cluster Amazon EKS existant. Pour en déployer un, consultez Création d’un cluster Amazon EKS. Si vous disposez de sous-réseaux dans la région AWS où AWS Outposts, AWS Wavelength ou AWS Local Zones sont activés, vous ne devez pas transmettre ces sous-réseaux lors de la création de votre cluster.

  • Un rôle IAM existant pour les nœuds à utiliser. Pour en créer un, consultez Rôle IAM de nœud Amazon EKS. Si ce rôle ne comporte aucune des politiques pour le VPC CNI, le rôle distinct suivant est nécessaire pour les pods VPC CNI.

  • (Facultatif, mais recommandé) Le plug-in CNI Amazon VPC pour le module complémentaire Kubernetes est configuré avec son propre rôle IAM auquel est associée la politique IAM nécessaire. Pour de plus amples informations, consultez Configuration du plug-in Amazon VPC CNI pour utiliser IRSA.

  • Connaissance des considérations répertoriées dans Choisissez un type d’instance de nœud Amazon EC2 optimal. Selon le type d'instance que vous choisissez, il peut y avoir des prérequis supplémentaires pour votre cluster et votre VPC.

Vous pouvez lancer des nœuds Linux autogérés à l’aide de l’une des méthodes suivantes :

eksctl

Lancer des nœuds Linux autogérés à l’aide de eksctl

  1. Installez la version 0.214.0 ou une version ultérieure de l’outil de ligne de commande eksctl installé sur votre appareil ou AWS CloudShell. Pour installer ou mettre à jour eksctl, veuillez consulter Installation dans la documentation de eksctl.

  2. (Facultatif) Si la politique d’IAM gérée AmazonEKS_CNI_Policy est associée à votre rôle IAM de nœud Amazon EKS, nous vous recommandons de l’attribuer à un rôle IAM que vous associez au compte de service Kubernetes aws-node à la place. Pour de plus amples informations, consultez Configuration du plug-in Amazon VPC CNI pour utiliser IRSA.

  3. La commande suivante crée un groupe de nœuds dans un cluster existant. Remplacez les nœuds al par un nom pour votre groupe de nœuds. Le nom du groupe de nœuds ne peut pas dépasser 63 caractères. Il doit commencer par une lettre ou un chiffre, mais peut également inclure des tirets et des traits de soulignement pour les autres caractères. Remplacez my-cluster par le nom de votre cluster. Un nom ne peut contenir que des caractères alphanumériques (sensibles à la casse) et des traits d'union. Il doit commencer par un caractère alphanumérique et ne peut pas dépasser 100 caractères. Le nom doit être unique dans la région AWS et le compte AWS dans lesquels vous créez le cluster. Remplacez la valeur d’exemple restante par vos propres valeurs. Par défaut, les nœuds sont créés avec la même version de Kubernetes que le plan de contrôle.

    Avant de choisir une valeur pour --node-type, consultez Choisir un type d’instance de nœud Amazon EC2 optimal.

    Remplacez my-key par le nom de votre paire de clés Amazon EC2 ou de votre clé publique. Cette clé est utilisée pour SSH dans vos nœuds après leur lancement. Si vous ne possédez pas déjà une paire de clés Amazon EC2, vous pouvez en créer une dans l’AWS Management Console. Pour plus d'informations, veuillez consulter la rubrique Paires de clés Amazon EC2 dans le Guide de l'utilisateur Amazon EC2.

    Créez votre groupe de nœuds avec la commande suivante.

    Important

    Si vous voulez déployer un groupe de nœuds sur des sous-réseaux AWS Outposts, Wavelength ou Local Zone, d’autres éléments doivent être pris en compte :

    eksctl create nodegroup \ --cluster my-cluster \ --name al-nodes \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --managed=false \ --ssh-public-key my-key

    Pour déployer un groupe de nœuds qui :

  4. (Facultatif) Déployez un exemple d'application pour tester votre cluster et les nœuds Linux.

  5. Nous recommandons de bloquer l’accès des pods à IMDS si les conditions suivantes sont remplies :

    • Vous prévoyez d’attribuer des rôles IAM à tous vos comptes de service Kubernetes, afin que les pods ne disposent que des permissions strictement nécessaires.

    • Aucun pod du cluster n’a besoin d’accéder au service de métadonnées d’instance (IMDS) Amazon EC2 pour d’autres raisons, comme la récupération de la région AWS actuelle.

    Pour plus d'informations, consultez Restreindre l'accès au profil d'instance affecté au composant master.

AWS Management Console

Étape 1 : lancer les nœuds Linux autogérés à l’aide de la AWS Management Console

  1. Téléchargez la dernière version du modèle AWS CloudFormation.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
  2. Attendez que le statut de votre cluster s'affiche soit ACTIVE. Si vous lancez vos nœuds avant que le cluster soit actif, les nœuds ne s'enregistrent pas avec le cluster et vous devrez les relancer.

  3. Ouvrez la console AWS CloudFormation.

  4. Choisissez Create stack (Créer une pile), puis sélectionnez Avec de nouvelles ressources (standard).

  5. Pour Spécifier un modèle, sélectionnez Upload a template file (Télécharger un fichier de modèle), puis sélectionnez Choose file (Choisir un fichier).

  6. Sélectionnez le fichier amazon-eks-nodegroup.yaml que vous avez téléchargé.

  7. Sélectionnez Suivant.

  8. Dans la page Specify stack details (Spécifier les détails de la pile), saisissez les paramètres suivants, puis choisissez Next (Suivant) :

    • Nom de la pile : choisissez un nom pour votre pile AWS CloudFormation. Par exemple, vous pouvez l’appeler my-cluster-nodes. Un nom ne peut contenir que des caractères alphanumériques (sensibles à la casse) et des traits d'union. Il doit commencer par un caractère alphanumérique et ne peut pas dépasser 100 caractères. Le nom doit être unique dans la région AWS et le compte AWS dans lesquels vous créez le cluster.

    • ClusterName : saisissez le nom que vous avez utilisé lors de la création de votre cluster Amazon EKS. Ce nom doit être identique au nom du cluster, sinon vos nœuds ne pourront pas rejoindre le cluster.

    • ClusterControlPlaneSecurityGroup : choisissiez la valeur SecurityGroups de la sortie AWS CloudFormation que vous avez générée lors de la création de votre VPC.

      Les étapes suivantes montrent une opération permettant de récupérer le groupe applicable.

      1. Ouvrez la console Amazon EKS.

      2. Choisissez le nom du cluster.

      3. Choisissez l'onglet Networking (Mise en réseau).

      4. Utilisez la valeur des Groupes de sécurité supplémentaires comme référence lors de la sélection dans la liste déroulante ClusterControlPlaneSecurityGroup.

    • NodeGroupName : saisissez un nom pour le groupe de nœuds. Ce nom peut être utilisé ultérieurement pour identifier le groupe de nœuds autoscaling qui est créé pour vos nœuds. Le nom du groupe de nœuds ne peut pas dépasser 63 caractères. Il doit commencer par une lettre ou un chiffre, mais peut également inclure des tirets et des traits de soulignement pour les autres caractères.

    • NodeAutoScalingGroupMinSize : saisissez le nombre minimum de nœuds que votre groupe Auto Scaling de nœuds peut comporter.

    • NodeAutoScalingGroupDesiredCapacity : saisissez le nombre voulu de nœuds pour la mise à l'échelle lorsque votre pile sera créée.

    • NodeAutoScalingGroupMaxSize : saisissez le nombre maximum de nœuds que votre groupe Auto Scaling de nœuds peut comporter.

    • NodeInstanceType : choisissez un type d'instance pour vos nœuds. Pour de plus amples informations, consultez Choix du type d’instance Amazon EC2 optimal pour les nœuds.

    • NodeImageIdSSMParam : Prérempli avec le paramètre Amazon EC2 Systems Manager d’une AMI récente optimisée pour Amazon EKS pour une version variable de Kubernetes. Pour utiliser une autre version mineure de Kubernetes prise en charge par Amazon EKS, remplacez 1.XX par une autre version prise en charge. Nous vous recommandons de spécifier la même version de Kubernetes que celle de votre cluster.

      Vous pouvez également remplacer amazon-linux-2 par un autre type d’AMI. Pour de plus amples informations, consultez Récupération des ID d’AMI Amazon Linux recommandés.

      Note

      Les AMI des nœuds Amazon EKS sont basées sur Amazon Linux. Vous pouvez suivre les évènements de sécurité et de confidentialité pour Amazon Linux 2 via le centre de sécurité Amazon Linux ou souscrire au flux RSS associé. Les événements de sécurité et de confidentialité incluent une présentation du problème, les packages concernés et la manière de mettre à jour vos instances pour résoudre le problème.

    • NodeImageId : (facultatif) si vous utilisez votre propre AMI personnalisée (au lieu d’une AMI optimisée pour Amazon EKS), saisissez un identifiant AMI de nœud pour votre région AWS. Si vous spécifiez une valeur ici, elle remplace toutes les valeurs du champ NodeImageIdSSMParam .

    • NodeVolumeSize : spécifiez une taille de volume racine pour vos nœuds, en GiO.

    • NodeVolumeType : spécifiez un type de volume racine pour vos nœuds.

    • KeyName : saisissez le nom d'une paire de clés SSH Amazon EC2 que vous pouvez utiliser pour vous connecter à l'aide de SSH dans vos nœuds après leur lancement. Si vous ne possédez pas déjà une paire de clés Amazon EC2, vous pouvez en créer une dans l’AWS Management Console. Pour plus d'informations, veuillez consulter la rubrique Paires de clés Amazon EC2 dans le Guide de l'utilisateur Amazon EC2.

      Note

      Si vous ne fournissez pas de paire de clés ici, la création de la pile AWS CloudFormation échoue.

    • BootstrapArguments : spécifiez les arguments facultatifs à transmettre au script d'amorçage du nœud, comme les arguments supplémentaires kubelet. Pour de plus amples informations, veuillez consulter Utilisation du script d'amorçage sur GitHub.

      Pour déployer un groupe de nœuds qui :

    • DisableIMDSv1 : par défaut, chaque nœud prend en charge le service de métadonnées d'instance version 1 (IMDSv1) et IMDSv2. Vous pouvez désactiver IMDSv1. Pour empêcher les futurs nœuds et pods du groupe de nœuds d’utiliser MDSv1, définissez DisableIMDSv1 sur true. Pour de plus amples informations au sujet d'IMDS, consultez Configuration du service des métadonnées d'instance. Pour plus d'informations sur la façon d'en restreindre l'accès sur vos nœuds, consultez Restreindre l'accès au profil d'instance affecté au composant master.

    • VpcId : saisissez l'ID du VPC que vous avez créé.

    • Sous-réseaux : choisissez les sous-réseaux que vous avez créés pour votre VPC. Si vous avez créé votre Amazon VPC en suivant les étapes décrites dans Créer un Amazon VPC pour votre cluster Amazon EKS, spécifiez uniquement les sous-réseaux privés au sein de l’Amazon VPC dans lesquels vos nœuds doivent être lancés. Vous pouvez consulter les sous-réseaux privés en ouvrant le lien de chaque sous-réseau depuis l'onglet Networking (Mise en réseau) de votre cluster.

      Important
      • Si certains sous-réseaux sont des sous-réseaux publics, leur paramètre d'attribution automatique d'adresse IP publique doit être activé. Si le paramètre n’est pas activé pour le sous-réseau public, les nœuds que vous déployez sur ce sous-réseau public ne se verront pas attribuer d’adresse IP publique et ne pourront pas communiquer avec le cluster ou d’autres services AWS. Si le sous-réseau a été déployé avant le 26 mars 2020 à l’aide de l’un des modèles VPC AWS CloudFormation pour Amazon EKS ou à l’aide de eksctl, l’attribution automatique d’adresses IP publiques est désactivée pour les sous-réseaux publics. Pour de plus amples informations sur l'activation de l'attribution d'adresse IP publique pour un sous-réseau, veuillez consulter Modification de l'attribut d'adressage IPv4 public de votre sous-réseau. Si le nœud est déployé sur un sous-réseau privé, il peut communiquer avec le cluster et d’autres services AWS via une passerelle NAT.

      • Si les sous-réseaux n’ont pas d’accès Internet, assurez-vous de prendre connaissance des considérations et des étapes supplémentaires décrites dans Déployer des clusters privés avec un accès Internet limité.

      • Si vous sélectionnez des sous-réseaux AWS Outposts, Wavelength ou Local Zone, ceux-ci ne doivent pas avoir été transmis lors de la création du cluster.

  9. Sélectionnez les choix que vous souhaitez sur la page Configure stack options (Configurer les options de la pile), puis choisissez Next (Suivant).

  10. Cochez la case à gauche de Je comprends qu’AWS CloudFormation peut créer des ressources IAM., puis sélectionnez Créer une pile.

  11. Lorsque la création de votre pile est terminée, sélectionnez la pile dans la console et choisissez Outputs (Sorties).

  12. Notez la valeur de NodeInstanceRole pour le groupe de nœuds qui a été créé. Vous en aurez besoin lors de la configuration de vos nœuds pour Amazon EKS.

Étape 2 : autoriser les nœuds à rejoindre votre cluster

Note

Si vous avez lancé des nœuds dans un VPC privé sans accès Internet sortant, assurez-vous d'activer les nœuds pour rejoindre votre cluster à partir du VPC.

  1. Vérifiez si vous avez déjà appliqué le ConfigMap aws-auth.

    kubectl describe configmap -n kube-system aws-auth
  2. Si vous voyez un ConfigMap aws-auth, mettez-le à jour si nécessaire.

    1. Ouvrez le ConfigMap pour le modifier.

      kubectl edit -n kube-system configmap/aws-auth
    2. Ajoutez une nouvelle entrée mapRoles si nécessaire. Définissez la valeur rolearn à la valeur NodeInstanceRole que vous avez enregistrée dans la procédure précédente.

      [...] data: mapRoles: | - rolearn: <ARN of instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...]
    3. Enregistrez le fichier et quittez votre éditeur de texte.

  3. Si vous avez reçu un message d'erreur indiquant « Error from server (NotFound): configmaps "aws-auth" not found », appliquez le stock ConfigMap.

    1. Téléchargez la mappe de configuration.

      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
    2. Dans le fichier aws-auth-cm.yaml, définissez la valeur rolearn à la valeur NodeInstanceRole que vous avez enregistrée dans la procédure précédente. Pour ce faire, utilisez un éditeur de texte ou remplacez my-node-instance-role et exécutez la commande suivante :

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. Appliquez la configuration. L'exécution de cette commande peut prendre quelques minutes.

      kubectl apply -f aws-auth-cm.yaml
  4. Observez le statut de vos nœuds et attendez qu'ils obtiennent le statut Ready.

    kubectl get nodes --watch

    Saisissez Ctrl+C pour revenir à une invite de shell.

    Note

    Si vous recevez d'autres erreurs concernant les types d'autorisations ou de ressources, consultez Accès non autorisé ou refusé (kubectl) dans la rubrique relative à la résolution des problèmes.

    Si les nœuds ne parviennent pas à rejoindre le cluster, consultez la section Les nœuds ne parviennent pas à joindre le cluster du chapitre Dépannage.

  5. (Nœuds GPU uniquement) Si vous avez choisi un type d’instance GPU et l’AMI accélérée optimisée pour Amazon EKS, vous devez appliquer le plug-in de périphérique NVIDIA pour Kubernetes en tant que DaemonSet sur votre cluster. Remplacez vX.X.X par la version souhaitée du plug-in NVIDIA/k8s-device 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

Étape 3 : actions supplémentaires

  1. (Facultatif) Déployez un exemple d'application pour tester votre cluster et les nœuds Linux.

  2. (Facultatif) Si la politique IAM gérée AmazonEKS_CNI_Policy (si vous disposez d’un cluster IPv4) ou la politique AmazonEKS_CNI_IPv6_Policy (que vous avez créée vous-même si vous disposez d’un cluster IPv6) est associée à votre rôle IAM de nœud Amazon EKS, nous vous recommandons de l’attribuer à un rôle IAM que vous associez au compte de service Kubernetes aws-node. Pour de plus amples informations, consultez Configuration du plug-in Amazon VPC CNI pour utiliser IRSA.

  3. Nous recommandons de bloquer l’accès des pods à IMDS si les conditions suivantes sont remplies :

    • Vous prévoyez d’attribuer des rôles IAM à tous vos comptes de service Kubernetes, afin que les pods ne disposent que des permissions strictement nécessaires.

    • Aucun pod du cluster n’a besoin d’accéder au service de métadonnées d’instance (IMDS) Amazon EC2 pour d’autres raisons, comme la récupération de la région AWS actuelle.

    Pour plus d'informations, consultez Restreindre l'accès au profil d'instance affecté au composant master.