Come posso creare AMI Amazon Linux personalizzate per Amazon EKS?

5 minuti di lettura
0

Desidero creare un Amazon Linux Amazon Machine Image (AMI) personalizzato da distribuire con un cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Risoluzione

Prerequisiti

  • Installa Packer sul tuo computer locale o su un'istanza Amazon Linux Amazon Elastic Compute Cloud (EC2). Per le istruzioni, consulta Install Packer sul sito web di Hashicorp.
  • Quindi installa il plug-in Amazon da utilizzare con Hashicorp Packer per creare immagini personalizzate su AWS. Per istruzioni, consulta Installation sul sito web Hashicorp.
  • Assicurati che make e git siano installati:
    sudo yum install make -y
    sudo yum install git -y

Creazione di un'AMI Amazon Linux personalizzata per Amazon EKS

Completa i seguenti passaggi:

  1. Per clonare il repository amazon-eks-ami AWS Labs, esegui il seguente comando:

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

    Per ulteriori informazioni, consulta amazon-eks-ami sul sito web GitHub.

  2. Per creare un nuovo file denominato variables-custom.json nella directory amazon-eks-ami, esegui il seguente comando:

    sudo vi variables-custom.json

    Nota: il file delle variabili predefinite che variables-custom.json sovrascrive si trova nel file variables-default.json sul sito web GitHub. Se usi Amazon Linux 2 (AL2), il percorso del file per variables-default.json è /amazon-eks-ami/templates/al2/variables-default.json. Se usi Amazon Linux 2023 (AL2023), il percorso del file è /amazon-eks-ami/templates/al2023/variables-default.json.

  3. Nel file variables-custom.json, aggiungi i valori:

    {
        "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
    }

    Quando usi un'AMI esistente come origine per creare un'AMI personalizzata per EKS, imposta il valore launch\ _block\ _device\ _mappings\ _volume\ _size. Il valore deve essere uguale o superiore alla dimensione del volume dell'istantanea AMI. Il valore predefinito è “4" nel file variables-default.json.
    Se utilizzi l'opzione iam\ _instance\ _profile in Packer, è necessario fornire il nome del profilo di istanza del ruolo IAM che si desidera allegare. Non fornire l'ARN del ruolo IAM o l'ARN del profilo di istanza.
    Se il parametro temporary_security_group_source_cidrs non viene fornito, Packer apre la porta SSH a tutti gli indirizzi IP (0.0.0.0/0). Per prevenire un rischio per la sicurezza, è consigliabile specificare l'indirizzo IP del computer di origine nel parametro temporary_security_group_source_cidrs.

  4. Per avviare il processo di creazione dell'AMI personalizzata, esegui il seguente comando:

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

    In alternativa, per attivare il logging dei pacchetti, esegui il seguente comando:

    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

    Nota: per impostare il fuso orario del tuo sistema, sostituisci ":Asia/Kolkata" con il tuo fuso orario. Il file di log generato di Packer è disponibile nella stessa directory in cui si esegue il comando Packer.

  5. Verifica che le credenziali utente IAM o il ruolo IAM che usi per eseguire il comando make dispongano delle autorizzazioni IAM richieste. Per ulteriori informazioni, consulta IAM task or instance role e Attaching IAM policies to roles sul sito web di Hashicorp. Inoltre, le autorizzazioni devono consentire l'accesso al bucket Amazon Simple Storage Service (Amazon S3) predefinito. È necessario allegare la policy AmazonS3ReadOnlyAccess. Se non disponi delle autorizzazioni per accedere al bucket S3, potresti ricevere il seguente errore:

    "required variable not set: kubernetes_build_date
    required variable not set: kubernetes_version"

    Nota: queste autorizzazioni consentono a Packer di effettuare chiamate API ad AWS. In alternativa, puoi configurare le credenziali statiche come una chiave segreta e una chiave di accesso segreta, una variabile di ambiente o file di credenziali condivisi.

  6. Verifica che l'AMI personalizzata sia presente nella Regione AWS dell'AMI di origine.

Quando Packer esegue il provisioning dell'istanza, i file binari predefiniti vengono scaricati dal bucket S3 amazon-eks in us-west-2. Per ulteriori informazioni, consulta il file install-worker.sh sul sito web GitHub.

(Facoltativo) Fornitura dei binari Kubernetes

Completa i seguenti passaggi:

  1. Per esaminare i file binari disponibili forniti nel bucket predefinito, esegui il seguente comando:
    aws s3 ls s3://amazon-eks
    aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
    Nota: sostituisci amazon-eks, kubernetes_version, kubernetes_build_date e arch con i tuoi valori.
  2. Per scaricare i tuoi file binari sul nodo worker durante il provisioning, è necessario rispecchiare la struttura delle cartelle bucket amazon-eks utilizzata nello script install-worker.sh.
  3. Dopo aver preparato i file binari, utilizza l'interfaccia a riga di comando di AWS per copiare i file binari nel bucket Amazon S3. L'esempio seguente utilizza un binario kubelet personalizzato:
    aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
    Nota: sostituisci my-custom-bucket, amazon-eks, kubernetes_version, kubernetes_build_date e arch con i tuoi valori. Bisogna fornire tutti i file binari elencati nel bucket amazon-eks predefinito.
  4. Per avviare il processo di compilazione, usa l'AMI di origine configurata in variables-default.json dalla directory al2 nel percorso /amazon-eks-ami/templates/al2/variables-default.json. Per richiamare make con i parametri, esegui un comando simile al seguente:
    make k8s  binary_bucket_name=Custom_Bucket_Name  binary_bucket_region=Region  kubernetes_version=Version  kubernetes_build_date=Build_Date -d
    Nota: verifica che i parametri binari_bucket_name, binary_bucket_region, kubernetes_version e kubernetes_build_date corrispondano al percorso dei tuoi file binari in Amazon S3.
AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa