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).

Resolução

Pré-requisitos

  • Instale o Packer em sua máquina local ou em uma instância Amazon Linux Amazon Elastic Compute Cloud (EC2). Para obter instruções, consulte Instalar o Packer no site da Hashicorp.
  • Em seguida, instale o Amazon Plugin para usar com o Hashicorp Packer para criar imagens personalizadas na AWS. Para obter instruções, consulte Instalação no site Hda ashicorp.
  • Certifique-se de que o make e o git estejam instalados:
    sudo yum install make -y
    sudo yum install git -y

Criar uma AMI personalizada do Amazon Linux para o Amazon EKS

Conclua as seguintes etapas:

  1. Para clonar o repositório amazon-eks-ami do AWS Labs, execute o seguinte comando:

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

    Para obter mais informações, consulte amazon-eks-ami no site do GitHub.

  2. Para criar um novo arquivo chamado variables-custom.json no diretório amazon-eks-ami, execute o seguinte comando:

    sudo vi variables-custom.json

    Observação: o arquivo de variáveis padrão que o variables-custom.json substitui está localizado no arquivo variables-default.json no site do GitHub. Se você usa o Amazon Linux 2 (AL2), o caminho do arquivo para variables-default.json é /amazon-eks-ami/templates/al2/variables-default.json. Se você usa o Amazon Linux 2023 (AL2023), o caminho do arquivo é /amazon-eks-ami/templates/al2023/variables-default.json.

  3. No arquivo variables-custom.json, adicione seus 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
    }

    Ao usar uma AMI existente como origem para criar uma AMI personalizada para EKS, defina o valor launch_block_device_mappings_volume_size. O valor deve ser igual ou maior que o tamanho do volume do snapshot da AMI. O valor padrão é “4" no arquivo variables-default.json.
    Se você usar a opção iam_instance_profile no Packer, deverá fornecer o nome do perfil da instância da função do IAM que você deseja anexar. Não forneça o ARN da função do IAM nem o ARN do perfil da instância.
    Se o parâmetro temporary_security_group_source_cidrs não for fornecido, o Packer abrirá a porta SSH para todos os endereços IP (0.0.0.0/0). Para evitar um risco de segurança, é uma prática recomendada especificar o endereço IP da sua máquina de origem no parâmetro temporary_security_group_source_cidrs.

  4. Para iniciar o processo personalizado de criação da AMI, execute o seguinte comando:

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

    Ou, para ativar o registro do empacotador, execute o seguinte 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

    Observação: para definir o fuso horário do seu sistema, substitua “:Asia/Kolkata” pelo seu fuso horário. O arquivo de log gerado pelo Packer está disponível no mesmo diretório em que você executa o comando Packer.

  5. Verifique se as credenciais de usuário do IAM ou a função do IAM que você usa para executar o comando make têm as permissões de IAM necessárias. Para obter mais informações, consulte Função de tarefa ou instância do IAM e Anexar políticas do IAM a funções no site da Hashicorp. Além disso, as permissões devem permitir o acesso ao bucket padrão do Amazon Simple Storage Service (Amazon S3). Você deve anexar a política AmazonS3ReadOnlyAccess. Se você não tiver permissões para acessar o bucket do S3, poderá receber o seguinte erro:

    “variável necessária não definida: kubernetes_build_date
    variável necessária não definida: kubernetes\ _version”

    Observação: essas permissões permitem que o Packer faça chamadas de API para a AWS. Ou você pode configurar as credenciais estáticas, como uma chave secreta e uma chave de acesso secreta, uma variável de ambiente ou arquivos de credenciais compartilhados.

  6. Verifique se sua AMI personalizada está presente na sua região da AWS da AMI de origem.

Quando o Packer provisiona a instância, os binários padrão são baixados do bucket público S3 do Amazon EKS amazon-eks em us-west-2. Para obter mais informações, consulte o arquivo install-worker.sh no site do GitHub.

Fornecer seus próprios binários do Kubernetes (opcional)

Conclua as seguintes etapas:

  1. Para examinar os binários disponíveis que são fornecidos no bucket padrão, execute o seguinte comando:
    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.
  2. Para baixar seus próprios binários para o nó de processamento conforme ele é provisionado, espelhe a estrutura de pastas do bucket amazon-eks usada no script install-worker.sh.
  3. Depois que seus binários estiverem preparados, use a AWS CLI para copiá-los no seu bucket do Amazon S3. O exemplo a seguir 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. Você deve fornecer todos os binários listados no bucket padrão do amazon-eks.
  4. Para iniciar o processo de criação, use a AMI de origem configurada em variables-default.json no diretório al2 no caminho /amazon-eks-ami/templates/al2/variables-default.json. Para invocar make com os parâmetros, execute um comando semelhante ao seguinte:
    make k8s  binary_bucket_name=Custom_Bucket_Name  binary_bucket_region=Region  kubernetes_version=Version  kubernetes_build_date=Build_Date -d
    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.
AWS OFICIAL
AWS OFICIALAtualizada há 6 meses