Como faço para criar AMIs personalizadas do Amazon Linux para o Amazon EKS?

5 minuto de leitura
0

Quero criar uma imagem de máquina da Amazon (AMI) do Amazon Linux personalizada para implantar um cluster do Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Para criar uma AMI personalizada do Amazon Linux para o Amazon EKS, você deve usar o seguinte:

Observação: o Packer trabalha usando uma pilha do AWS CloudFormation. A pilha executa uma instância m4.large ou a1.large do Amazon Elastic Compute Cloud (Amazon EC2), dependendo da arquitetura da AMI de destino. A instância é provisionada pelo Packer. Depois que a instância é provisionada com pacotes e binários, o Packer cria uma AMI a partir da instância em execução.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

Instale e configure o Packer

1.    Instale o Packer no site da HashiCorp.

2.    Configure as credenciais da sua conta da AWS para permitir que o Packer chame operações de API da AWS em seu nome. Você pode usar credenciais estáticas (chave secreta e chave de acesso secreta), uma variável de ambiente, arquivos de credenciais compartilhados ou um perfil do Amazon EC2.

Observação: para mais informações sobre a configuração de credenciais da AWS para o Packer, consulte Autenticação e Perfil da tarefa ou da instância do IAM no site da HashiCorp.

Clone o repositório da AMI do Amazon EKS

Para clonar o repositório da AMI do Amazon EKS em sua estação de trabalho, execute o comando a seguir:

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

Observação: o Packer é executado por meio de uma série de destinos de makefile com eks-worker-al2.json como especificação de compilação. O processo de compilação usa um construtor do Packer chamado amazon-ebs (artigo do site da HashiCorp) e executa uma instância. O provisionador de shell do Packer (artigo do site da HashiCorp) executa o script install-worker.sh na instância para instalar o software e realizar outras tarefas de configuração. Em seguida, o Packer cria uma AMI a partir da instância e encerra a instância após a AMI ser criada.

Personalize uma AMI de origem

Para configurar uma AMI de origem personalizada, defina as variáveis source_ami_id, source_ami_owners e aws_region no arquivo de configuraçãoeks-worker-al2.json do Packer. Por exemplo:

"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 fornecer binários personalizados aos nós de processamento, conclua as etapas na seção (Opcional) Forneça seus próprios binários do Kubernetes.

Para criar a imagem usando os binários do Kubernetes que vêm como padrão da AWS, conclua as etapas na seção Build an Amazon EKS worker AMI using default binaries (Crie uma AMI do nó de processamento do Amazon EKS) usando os binários padrão.

(Opcional) Forneça seus próprios binários do Kubernetes

Quando o Packer provisiona a instância, os binários são baixados por padrão do bucket público amazon-eks do Amazon Simple Storage Service (Amazon S3) em us-west-2. Para mais informações, consulte o arquivo install-worker.sh.

1.    Para examinar os binários fornecidos no bucket padrão, execute o comando da AWS CLI abaixo

$ aws s3 ls s3://amazon-eks
$ aws s3 ls s3://amazon-eks/kubernetes_version/kubernetes_build_date/bin/linux/arch/

Observação: substitua amazon-eks, kubernetes_version, kubernetes_build_date e arch pelos seus próprios valores.

Importante: para baixar seus próprios binários no nó de processamento durante o provisionamento, você deve espelhar a estrutura de pastas do bucket amazon-eks usada no script install-worker.sh.

2.    Depois de preparar os binários com seu processo de compilação próprio, copie-os para seu próprio bucket do S3 usando a AWS CLI.

Aqui está um exemplo que usa um binário kubelet personalizado:

$ aws s3 cp kubelet s3://my-custom-bucket/kubernetes_version/kubernetes_build_date/bin/linux/arch/kubelet

Observação: substitua my-custom-bucket, amazon-eks, kubernetes_version, kubernetes_build_date e arch pelos seus próprios valores.

Importante: você deve fornecer todos os binários listados no bucket padrão amazon-eks que correspondam à sua combinação de kubernetes_version, kubernetes_build_date e arch. Esses binários devem ser acessíveis por meio das credenciais do AWS Identity and Access Management (IAM) configuradas na seção Instale e configure o HashiCorp Packer.

Crie uma AMI do nó de processamento do Amazon EKS usando binários personalizados

Para iniciar o processo de compilação, use a AMI de origem configurada em eks-worker-al2.json para invocar make e fornecer parâmetros. Por exemplo:

$ 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

Observação: verifique se os parâmetros binary_bucket_name, binary_bucket_region, kubernetes_version e kubernetes_build_date correspondem ao caminho dos binários no Amazon S3.

Crie uma AMI do nó de processamento do Amazon EKS usando os binários padrão

1.    Para criar a AMI do nó de processamento do Amazon EKS usando uma AMI de base personalizada e os binários padrão mais recentes do Kubernetes, confirme se o arquivo eks-worker-al2.json foi atualizado com a AMI de base correta.

2.    Para acionar o processo de compilação fornecendo a versão do Kubernetes como parâmetro, execute o comando a seguir:

$ make 1.14  # Build a Amazon EKS Worker AMI for k8s 1.14

Observação: para configurações mais avançadas, você deve modificar os arquivos de configuração no repositório amazon-eks-ami no GitHub da AWS antes de acionar a compilação.

Dica: consulte o GitHub da AWS para ver quais problemas comuns ocorrem ao usar a configuração do Packer para criar AMIs personalizadas.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos