¿Cómo creo AMI personalizadas de Amazon Linux para Amazon EKS?

5 minutos de lectura
0

Quiero crear una imagen de máquina de Amazon (AMI) personalizada de Amazon Linux para implementarla con un clúster de Amazon Elastic Kubernetes Service (Amazon EKS).

Solución

Requisitos previos

  • Instale Packer en su máquina local o en una instancia Amazon Linux Amazon Elastic Compute Cloud (EC2). Para obtener instrucciones, consulte Install Packer en el sitio web de Hashicorp.
  • A continuación, instale el complemento de Amazon para usarlo con Hashicorp Packer para crear imágenes personalizadas en AWS. Para obtener más información, consulte Instalación en el sitio web de Hashicorp.
  • Asegúrese de que make y git estén instalados:
    sudo yum install make -y
    sudo yum install git -y

Crear una AMI personalizada de Amazon Linux para Amazon EKS

Siga estos pasos:

  1. Para clonar el repositorio amazon-eks-ami de AWS Labs, ejecute el siguiente comando:

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

    Para obtener más información, consulte amazon-eks-ami en el sitio web de GitHub.

  2. Para crear un archivo nuevo denominado variables-custom.json en el directorio amazon-eks-ami, ejecute el siguiente comando:

    sudo vi variables-custom.json

    Nota: El archivo de variables predeterminado que el variables-custom.json anula se encuentra en el archivo variables-default.json del sitio web de GitHub. Si utiliza Amazon Linux 2 (AL2), la ruta del archivo variables-default.json es /amazon-eks-ami/templates/al2/variables-default.json. Si utiliza Amazon Linux 2023 (AL2023), la ruta del archivo es /amazon-eks-ami/templates/al2023/variables-default.json.

  3. En el archivo variables-custom.json, agregue sus valores:

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

    Cuando utilice una AMI existente como origen para crear una AMI personalizada para EKS, defina el valor launch_block_device_mappings_volume_size. El valor debe ser igual o mayor que el tamaño del volumen de instantáneas de la AMI. El valor predeterminado es «4» en el archivo variables-default.json.
    Si usa la opción iam_instance_profile en Packer, debe proporcionar el nombre del perfil de instancia del rol de IAM que desea adjuntar. No proporcione el ARN del rol de IAM ni el ARN del perfil de instancia.
    Si no se proporciona el parámetro temporary_security_group_source_cidrs, Packer abre el puerto SSH a todas las direcciones IP (0.0.0.0/0). Para evitar un riesgo de seguridad, se recomienda especificar la dirección IP de la máquina de origen en el parámetro temporary_security_group_source_cidrs.

  4. Para iniciar el proceso de creación de la AMI personalizada, ejecute el siguiente comando:

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

    O, para activar el registro de Packer, ejecute el siguiente 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: Para configurar la zona horaria de su sistema, sustituya ":Asia/Kolkata" por su zona horaria. El archivo de registro generado por Packer está disponible en el mismo directorio donde se ejecuta el comando Packer.

  5. Compruebe que las credenciales de usuario de IAM o el rol de IAM que utiliza para ejecutar el comando make tengan los permisos de IAM necesarios. Para obtener más información, consulte IAM task or instance role y Attaching IAM policies to roles en el sitio web de Hashicorp. Además, los permisos deben permitir el acceso al bucket predeterminado de Amazon Simple Storage Service (Amazon S3). Debe adjuntar la política de acceso AmazonS3ReadOnlyAccess. Si no tiene los permisos necesarios para acceder al bucket de S3, es posible que reciba el siguiente error:

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

    Nota: Estos permisos permiten a Packer realizar llamadas a la API a AWS. También puede configurar credenciales estáticas, como una clave secreta y una clave de acceso secreta, una variable de entorno o archivos de credenciales compartidos.

  6. Compruebe que la AMI personalizada esté presente en la AMI de la región de origen de AWS.

Cuando Packer aprovisiona la instancia, los binarios se descargan de forma predeterminada del bucket público de S3 de Amazon EKS amazon-eks en us-west-2. Para obtener más información, consulte el archivo install-worker.sh en el sitio web de GitHub.

Proporcionar sus propios binarios de Kubernetes (opcional)

Siga estos pasos:

  1. Para examinar los binarios disponibles que se proporcionan en el bucket predeterminado, ejecute el siguiente comando:
    aws s3 ls s3://amazon-eks
    aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/
    Nota: Sustituya amazon-eks, kubernetes_version, kubernetes_build_date y arch por sus valores.
  2. Para descargar sus propios binarios al nodo de trabajo durante el aprovisionamiento, refleje la estructura de carpeta de bucket de amazon-eks que se utiliza en el script install-worker.sh.
  3. Una vez preparados los binarios, utilice la AWS CLI para copiarlos en su bucket de Amazon S3. El siguiente ejemplo usa un binario de kubelet personalizado:
    aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet
    Nota: Sustituya my-custom-bucket, amazon-eks, kubernetes_version, kubernetes_build_date y arch por sus valores. Debe proporcionar todos los binarios que aparecen en el bucket predeterminado de amazon-eks.
  4. Para iniciar el proceso de creación, utilice la AMI de origen que está configurada en variables-default.json desde el directorio al2 en la ruta /amazon-eks-ami/templates/al2/variables-default.json. Para invocar make con los parámetros, ejecute un comando similar al siguiente:
    make k8s  binary_bucket_name=Custom_Bucket_Name  binary_bucket_region=Region  kubernetes_version=Version  kubernetes_build_date=Build_Date -d
    Nota: Confirme que los parámetros binary_bucket_name, binary_bucket_region, kubernetes_version y kubernetes_build_date coinciden con la ruta a los binarios de Amazon S3.
OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 7 meses