¿Cómo creo AMI personalizadas de Amazon Linux para Amazon EKS?
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).
Breve descripción
Para crear una AMI de Amazon Linux personalizada para Amazon EKS, debe utilizar lo siguiente:
- HashiCorp Packer (disponible en el sitio web de HashiCorp)
- Una especificación de compilación con recursos y scripts de configuración del repositorio AMI de Amazon EKS en AWS GitHub
Nota: Packer funciona con una pila de AWS CloudFormation. La pila ejecuta una instancia m4.large o a1.large de Amazon Elastic Compute Cloud (Amazon EC2) (según la arquitectura de la AMI de destino). Packer aprovisiona la instancia. Después de aprovisionar la instancia con paquetes y binarios, Packer crea una AMI a partir de la instancia en ejecución.
Resolución
Nota: Si recibe errores al ejecutar comandos de la interfaz de la línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.
Instalar y configurar Packer
1. Instale Packer desde el sitio web de HashiCorp.
2. Configure las credenciales de su cuenta de AWS para que Packer pueda realizar llamadas a las operaciones de la API de AWS en su nombre. Puede utilizar credenciales estáticas (clave secreta y clave de acceso secreta), una variable de entorno, archivos de credenciales compartidos o un rol de Amazon EC2.
Nota: Para obtener más información sobre la configuración de las credenciales de AWS para Packer, consulte Authentication y IAM Task or Instance Role en el sitio web de HashiCorp.
Clonar el repositorio AMI de Amazon EKS
Para clonar el repositorio AMI de Amazon EKS en su estación de trabajo, ejecute el siguiente comando:
$ git clone https://github.com/awslabs/amazon-eks-ami && cd amazon-eks-ami
Nota: Packer se ejecuta a través de una serie de objetivos de makefile con eks-worker-al2.json como especificación de compilación. El proceso de compilación utiliza el compilador amazon-ebs Packer (desde el sitio web de HashiCorp) y lanza una instancia. El aprovisionador de shell de Packer (desde el sitio web de HashiCorp) ejecuta el script install-worker.sh en la instancia para instalar el software y realizar otras tareas de configuración. A continuación, Packer crea una AMI a partir de la instancia y la termina una vez creada la AMI.
Proporcionar una AMI de origen personalizada
Para configurar una AMI de origen personalizada, defina las variables source_ami_id, source_ami_owners y aws_region en el archivo de configuración de Packer eks-worker-al2.json. Por ejemplo:
"source_ami_id": "SOURCE_AMI_ID", # Enter the ID of your source image "source_ami_owners": "AWS_ACCOUNT_ID", # Enter the account where this image is stored "aws_region": "AWS_DEFAULT_REGION", # Enter the AWS Region of the source AMI
Para proporcionar binarios de trabajo personalizados, siga los pasos de la sección (Opcional) Proporcionar sus propios binarios de Kubernetes.
Para compilar la imagen con los binarios predeterminados de Kubernetes de AWS, siga los pasos de la sección Crear una AMI de trabajo de Amazon EKS con binarios predeterminados.
(Opcional) Proporcionar sus propios binarios de Kubernetes
Cuando Packer aprovisiona la instancia, los binarios se descargan de forma predeterminada del bucket público de Amazon Simple Storage Service (Amazon S3) de Amazon EKS amazon-eks en us-west-2. Para obtener más información, consulte el archivo install-worker.sh.
1. Para examinar los binarios disponibles que se proporcionan en el bucket predeterminado, ejecute el siguiente comando de AWS CLI
$ 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.
Importante: Para descargar sus propios binarios al nodo de trabajo durante el aprovisionamiento, debe reflejar la estructura de carpeta de bucket de amazon-eks que se utiliza en el script install-worker.sh.
2. Una vez que los binarios estén preparados mediante su propio proceso de compilación, cópielos en su propio bucket de S3 mediante la AWS CLI.
Este es un ejemplo que 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.
Importante: Debe proporcionar todos los binarios que figuran en el bucket predeterminado de amazon-eks para una combinación específica de kubernetes_version, kubernetes_build_date y arch. Se debe acceder a estos binarios mediante las credenciales de AWS Identity and Access Management (IAM) configuradas en la sección Instalar y configurar HashiCorp Packer.
Compilar una AMI de trabajo de Amazon EKS mediante binarios personalizados
Para iniciar el proceso de compilación, utilice la AMI de origen configurada en eks-worker-al2.json para invocar make con parámetros. Por ejemplo:
$ make k8s \ binary_bucket_name=my-custom-bucket \ binary_bucket_region=eu-west-1 \ kubernetes_version=1.14.9 \ kubernetes_build_date=2020-01-22
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.
Compilar una AMI de trabajo de Amazon EKS mediante binarios predeterminados
1. Para compilar la AMI de trabajo de Amazon EKS con una AMI base personalizada y los binarios de Kubernetes predeterminados (más recientes), confirme que el archivo eks-worker-al2.json esté actualizado con la AMI base correcta.
2. Para iniciar el proceso de compilación proporcionando la versión de Kubernetes como parámetro, ejecute el siguiente comando:
$ make 1.14 # Build a Amazon EKS Worker AMI for k8s 1.14
Nota: Para configuraciones más avanzadas, debe modificar los archivos de configuración del repositorio amazon-eks-ami de AWS GitHub antes de activar la compilación.
Consejo: Consulte AWS GitHub para ver los problemas comunes con el uso de la configuración de Packer para compilar AMI personalizadas.
Contenido relevante
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 9 meses
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año