Comment créer des AMI Amazon Linux personnalisées pour Amazon EKS ?

Lecture de 5 minute(s)
0

Je souhaite créer une Amazon Linux Amazon Machine Image (AMI) personnalisée à déployer avec un cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Résolution

Prérequis

  • Installez Packer sur votre machine locale ou sur une instance Amazon Linux Amazon Elastic Compute Cloud (EC2). Pour obtenir des instructions, consultez la section Install Packer sur le site Web de Hashicorp.
  • Ensuite, installez le plug-in Amazon à utiliser avec Hashicorp Packer pour créer des images personnalisées sur AWS. Pour obtenir des instructions, consultez la section Installation sur le site Web d'Hashicorp.
  • Assurez-vous que make et git sont installés :
    sudo yum install make -y
    sudo yum install git -y

Création d’AMI Amazon Linux personnalisées pour Amazon EKS

Procédez comme suit :

  1. Pour cloner le référentiel AWS Labs amazon-eks-ami, exécutez la commande suivante :

    sudo git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami

    Pour en savoir plus, consultez la page amazon-ecs-init sur le site Web de GitHub.

  2. Pour créer un nouveau fichier nommé variables-custom.json dans le répertoire amazon-eks-ami, exécutez la commande suivante :

    sudo vi variables-custom.json

    Remarque : Le fichier de variables par défaut remplacé par variables-custom.json se trouve dans le fichier variables-default.json du site web de GitHub. Si vous utilisez Amazon Linux 2 (AL2), le chemin du fichier pour variables-default.json est /amazon-eks-ami/templates/al2/variables-default.json. Si vous utilisez Amazon Linux 2023 (AL2023), le chemin du fichier est /amazon-eks-ami/templates/al2023/variables-default.json.

  3. Dans le fichier variables-custom.json, ajoutez vos valeurs :

    {
        "aws_region": "AWS_Region",
    
        "source_ami_filter_name": "AMI_Name",
        "source_ami_id": "Source_AMI_ID",
        "source_ami_owners": "AMI_Owner_Account_ID",
    
        "temporary_security_group_source_cidrs": "Source_Machine_IP", #example: local_machine_IP /32 or NAT_GW_IP /32 or EC2_PublicIP /32
    
        "launch_block_device_mappings_volume_size": "Integer", #Root volume size of the instance to be launched by packer
    
        "iam_instance_profile": "IAM_Instance_Profile_Name" #Optional
    }

    Lorsque vous utilisez une AMI existante comme source pour créer une AMI personnalisée pour EKS, définissez la valeur launch_block_device_mappings_volume_size value. La valeur doit être égale ou supérieure à la taille du volume de l’instantané de l’AMI. La valeur par défaut est « 4 » dans le fichier variables-default.json.
    Si vous utilisez l'option iam_instance_profile dans Packer, vous devez fournir le nom du profil d'instance du rôle IAM que vous souhaitez associer. Ne fournissez pas l'ARN du rôle IAM ou l'ARN du profil d'instance.
    Si le paramètre temporary_security_group_source_cidrs n'est pas fourni, Packer ouvre le port SSH pour toutes les adresses IP (0.0.0.0/0). Pour éviter tout risque de sécurité, il est recommandé de spécifier l'adresse IP de votre machine source dans le paramètre temporary_security_group_source_cidrs.

  4. Pour lancer le processus de création d'AMI personnalisée, exécutez la commande suivante :

    sudo make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d

    Ou, pour activer la journalisation de Packer, exécutez la commande suivante :

    sudo PACKER_LOG_PATH=packer_logs.txt`TZ=":Asia/Kolkata" date +%Y-%m-%d_%H%M` PACKER_LOG=1 make PACKER_OPTIONAL_K8S_VARIABLE_FILE=variables-custom.json k8s=1.29 os_distro=al2 arch=x86_64 -d

    Remarque : Pour définir le fuseau horaire de votre système, remplacez **« :Asia/Kolkata » ** par votre fuseau horaire. Le fichier journal généré par Packer est disponible dans le même répertoire que celui dans lequel vous exécutez la commande Packer.

  5. Vérifiez que les informations d'identification utilisateur IAM ou le rôle IAM que vous utilisez pour exécuter la commande make disposent des autorisations IAM requises. Pour plus d'informations, consultez les sections IAM task or instance role et Attaching IAM policies to roles sur le site Web de Hashicorp. Les autorisations doivent également accorder l'accès au compartiment Amazon Simple Storage Service (Amazon S3) par défaut. Vous devez joindre la politique AmazonS3ReadOnlyAccess. Si vous n'êtes pas autorisé à accéder au compartiment S3, l'erreur suivante peut s'afficher :

    « required variable not set: kubernetes_build_date
    required variable not set: kubernetes_version »

    Remarque : Ces autorisations permettent à Packer de passer des appels d'API à AWS. Utilisez des informations d’identification statiques telles qu’une clé secrète et une clé d’accès secrète, une variable d’environnement ou des fichiers d’informations d’identification partagés.

  6. Vérifiez que votre AMI personnalisée est présente dans la région AWS de l'AMI source.

Lorsque Packer provisionne l'instance, les fichiers binaires par défaut sont téléchargés depuis le compartiment S3 public Amazon EKS amazon-eks dans us-west-2. Pour plus d'informations, consultez le fichier install-worker.sh sur le site Web de GitHub.

(Facultatif) Fournir vos propres fichiers binaires Kubernetes

Procédez comme suit :

  1. Pour examiner les fichiers binaires disponibles fournis dans le compartiment par défaut, exécutez la commande suivante :
    aws s3 ls s3://amazon-eks
    aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
    Remarque : Remplacez amazon-eks, kubernetes_version, kubernetes_build_date et arch par vos valeurs.
  2. Pour télécharger vos propres fichiers binaires sur le nœud de travail tel qu’il est configuré, reproduisez la structure du dossier compartiment amazon-eks utilisée dans le script install-worker.sh.
  3. Une fois vos fichiers binaires préparés, utilisez l’interface de ligne de commande AWS pour copier les fichiers binaires de votre compartiment Amazon S3. L’exemple suivant utilise un binaire kubelet personnalisé :
    aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
    Remarque : Remplacez my-custom-bucket, amazon-eks, kubernetes_version, kubernetes_build_date et arch par vos valeurs. Vous devez fournir tous les fichiers binaires répertoriés dans le compartiment amazon-eks par défaut.
  4. Pour démarrer le processus de génération, utilisez l'AMI source configurée dans variables-default.json à partir du répertoire al2 situé dans le chemin /amazon-eks-ami/templates/al2/variables-default.json. Pour appeler make avec les paramètres, exécutez une commande similaire à la suivante :
    make k8s  binary_bucket_name=Custom_Bucket_Name  binary_bucket_region=Region  kubernetes_version=Version  kubernetes_build_date=Build_Date -d
    Remarque : Vérifiez que les paramètres binary_bucket_name, binary_bucket_region, kubernetes_version et kubernetes_build_date correspondent au chemin d’accès à vos fichiers binaires dans Amazon S3.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un mois