Conceitos básicos do AWS Batch no Amazon EKS - AWS Batch

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Conceitos básicos do AWS Batch no Amazon EKS

O AWS Batch no Amazon EKS é um serviço gerenciado para programar e escalar workloads em lotes em clusters do Amazon EKS existentes. O AWS Batch não cria, administra nem executa operações de ciclo de vida de seus clusters do Amazon EKS em seu nome. A orquestração do AWS Batch aumenta e diminui os nós gerenciados pelo AWS Batch e executa pods nesses nós.

O AWS Batch não toca em nós, grupos de nós com ajuste de escala automático ou ciclos de vida de pods que não estejam associados a ambientes de computação do AWS Batch em seu cluster do Amazon EKS. Para o AWS Batch operar de forma eficaz, sua perfil vinculada ao serviço precisa de permissões de controle de acesso com base em perfil (RBAC) do Kubernetes em seu cluster do Amazon EKS existente. Para obter mais informações, consulte Usar autorização RBAC na documentação do Kubernetes.

O AWS Batch requer um namespace do Kubernetes em que possa incluir pods como trabalhos do AWS Batch. Recomendamos um namespace dedicado para isolar os pods do AWS Batch das outras workloads do cluster.

Depois do AWS Batch receber acesso RBAC e de um namespace ser estabelecido, você pode associar esse cluster do Amazon EKS a um ambiente de computação do AWS Batch usando a operação de API CreateComputeEnvironment. Uma fila de trabalhos pode ser associada a esse novo ambiente de computação do Amazon EKS. Os trabalhos do AWS Batch são enviados para a fila de trabalhos com base em uma definição de trabalho do Amazon EKS usando a operação da API SubmitJob. O AWS Batch então inicia os nós gerenciados do AWS Batch e coloca os trabalhos da fila de trabalhos como pods do Kubernetes no cluster do EKS associado a um ambiente de computação do AWS Batch.

As seções a seguir abordam como se preparar para usar o AWS Batch no Amazon EKS.

Visão geral

Este tutorial demonstra como configurar AWS Batch com um Amazon EKS usando o AWS CLI, kubectl e eksctl.

Público-alvo

Este tutorial foi desenvolvido para administradores de sistemas e desenvolvedores responsáveis pela configuração, teste e implantação do AWS Batch.

Atributos usados

Este tutorial mostra como usar o AWS CLI para:

  • Criar e configurar um ambiente computacional do Amazon EKS

  • Crie uma fila de trabalhos.

  • Crie uma definição de trabalho

  • Criar e enviar um trabalho para execução

  • Enviar um trabalho com substituições

Tempo necessário

Levará entre 30 e 40 minutos, aproximadamente, para concluir este tutorial.

Restrições regionais

Não há restrições de país ou regionais associadas ao uso desta solução.

Custos pelo uso de recursos

Não há cobrança para criar uma conta da AWS. Contudo, ao implementar essa solução, pode haver alguns ou todos os custos listados na tabela a seguir.

Descrição Custo (dólares dos EUA)
Você é cobrado por hora do cluster Varia de acordo com a instância, consulte os preços do Amazon EKS

Pré-requisitos

Antes de iniciar este tutorial, você deve instalar e configurar as ferramentas e os recursos a seguir necessários para criar e gerenciar os recursos do AWS Batch e do Amazon EKS.

  • AWS CLI – Uma ferramenta de linha de comando para trabalhar com os serviços AWS, incluindo o Amazon EKS. Este guia exige que você use a versão 2.8.6 ou superior, ou a versão 1.26.0 ou superior. Para obter mais informações, consulte Como instalar, atualizar e desinstalar a AWS CLI no Guia do usuário da AWS Command Line Interface. Depois de instalar a AWS CLI, recomendamos que você também a configure. Para obter mais informações, consulte Configuração rápida com o aws configure no Manual do usuário do AWS Command Line Interface.

  • kubectl: uma ferramenta de linha de comando para trabalhar com clusters do Kubernetes. Este guia requer que você use a versão 1.23 ou superior. Para obter mais informações, consulte Instalar ou atualizar o kubectl no Guia do usuário do Amazon EKS.

  • eksctl – uma ferramenta de linha de comando para trabalhar com clusters do Amazon EKS que automatiza várias tarefas individuais. Este guia requer que você use a versão 0.115.0 ou superior. Para obter mais informações, consulte Instalar ou atualizar o eksctl no Guia do usuário do Amazon EKS.

  • Permissões obrigatórias do IAM: a entidade principal de segurança do IAM que você está usando deve ter permissões para trabalhar com perfis do IAM do Amazon EKS e perfis vinculados a serviço, o CloudFormation e uma VPC com recursos relacionados. Para obter mais informações, consulte Ações, recursos e chaves de condição do Amazon Elastic Kubernetes Service e Usar perfis vinculados a serviço, no Guia do usuário do IAM. Você deve concluir todas as etapas deste manual como o mesmo usuário.

  • Permissões: os usuários que chamam a operação CreateComputeEnvironment da API para criar um ambiente de computação que usa recursos do Amazon EKS precisam de permissões para a operação eks:DescribeCluster da API.

  • Número Conta da AWS — Você precisa saber seu ID Conta da AWS. Siga as instruções em Visualizar seu ID Conta da AWS.

  • (Opcional) CloudWatch — Para examinar os detalhes de (Opcional) Enviar um trabalho com substituições, o registro em log deve ser configurado. Para obter mais informações, consulte Use o CloudWatch Logs para monitorar AWS Batch trabalhos do Amazon EKS.

Etapa 1: criar o cluster do Amazon EKS para AWS Batch

Importante

Para começar da forma mais simples e rápida possível, este tutorial inclui etapas com configurações padrão. Antes de criar para uso em produção, recomendamos que você se familiarize com todas as configurações e implante com as configurações que atendam aos seus requisitos.

Depois de instalar os pré-requisitos, você precisará criar seu cluster usando o eksctl. Criar o cluster pode levar de 10 a 15 minutos.

$ eksctl create cluster --name my-cluster-name --region region-code

No comando anterior, substitua:

  • Substitua my-cluster-name pelo nome que você deseja usar para seu cluster.

  • Substitua region-code por Região da AWS para criar o cluster, por exemplo, em us-west-2.

O nome e a região do cluster são necessários para um momento posterior deste tutorial.

Etapa 2: preparar seu cluster do Amazon EKS para o AWS Batch

Todas as etapas são necessárias.

  1. Crie um namespace dedicado para trabalhos do AWS Batch

    Use o kubectl para criar um namespace.

    $ namespace=my-aws-batch-namespace
    $ cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOF

    Resultado:

    namespace/my-aws-batch-namespace created
  2. Habilite o acesso por meio do controle de acesso com base em perfil (RBAC)

    Use o kubectl para criar uma função do Kubernetes para o cluster do AWS Batch para permitir observar nós e pods e vincular a função. Você deve fazer isso uma vez para cada cluster do EKS.

    $ cat - <<EOF | kubectl apply -f - apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aws-batch-cluster-role rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"] - apiGroups: [""] resources: ["events"] verbs: ["list"] - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: ["daemonsets", "deployments", "statefulsets", "replicasets"] verbs: ["get", "list", "watch"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["clusterroles", "clusterrolebindings"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aws-batch-cluster-role-binding subjects: - kind: User name: aws-batch apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: aws-batch-cluster-role apiGroup: rbac.authorization.k8s.io EOF

    Resultado:

    clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
  3. Crie uma função do com escopo de namespace do Kubernetes para o AWS Batch para gerenciar e fazer o ciclo de vida dos pods e vincule-os. Você deve fazer isso uma vez para cada namespace exclusivo.

    $ namespace=my-aws-batch-namespace
    $ cat - <<EOF | kubectl apply -f - --namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: aws-batch-compute-environment-role namespace: ${namespace} rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "get", "list", "watch", "delete", "patch"] - apiGroups: [""] resources: ["serviceaccounts"] verbs: ["get", "list"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: aws-batch-compute-environment-role-binding namespace: ${namespace} subjects: - kind: User name: aws-batch apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: aws-batch-compute-environment-role apiGroup: rbac.authorization.k8s.io EOF

    Resultado:

    role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created
  4. Atualize o mapa de configuração do Kubernetes aws-auth para mapear as permissões RBAC anteriores para a função vinculada ao serviço do AWS Batch.

    No comando a seguir, substitua:

    • Substitua <your-account-number> pelo seu número da Conta da AWS.

    $ eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --username aws-batch

    Resultado:

    2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMap
    nota

    O caminho aws-service-role/batch.amazonaws.com/ foi removido do ARN so perfil vinculado ao serviço. Isso ocorre devido a um problema com o mapa de configuração aws-auth. Para obter mais informações, consulte Perfis com caminhos não funcionam quando o caminho é incluído em seu ARN no aws-authconfigmap.

Etapa 3: criar um ambiente computacional do Amazon EKS

Ambientes de computação do AWS Batch definem parâmetros de recursos de computação para atender às suas necessidades de workload em lote. Em um ambiente de computação gerenciado, o AWS Batch ajuda a gerenciar os tipos de capacidade e instância dos recursos de computação (nós do Kubernetes) dentro do seu cluster do Amazon EKS. Isso se baseia na especificação do recurso de computação que você define ao criar o ambiente de computação. Você pode usar instâncias sob demanda do EC2 ou instâncias spot do EC2.

Agora que a função AWSServiceRoleForBatch vinculada ao serviço tem acesso ao seu cluster do Amazon EKS, você pode criar recursos do AWS Batch. Primeiro, crie um ambiente computacional que aponte para seu cluster do Amazon EKS.

  • Para o subnets executar eksctl get cluster my-cluster-name para obter as sub-redes usadas pelo cluster.

  • Para o parâmetro securityGroupIds você pode usar o mesmo grupo de segurança do cluster do Amazon EKS. Esse comando recupera o ID do grupo de segurança do cluster.

    $ aws eks describe-cluster \ --name my-cluster-name \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • O instanceRole é criado quando você cria o cluster. Para encontrar a lista instanceRole de todas as entidades que usam a política AmazonEKSWorkerNodePolicy:

    $ aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy

    O nome do perfil da política contém o nome do cluster que você criou eksctl-my-cluster-name-nodegroup-example.

    Para encontrar o instanceRole e executar o comando a seguir:

    $ aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-example

    Resultado:

    INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12example

    Para mais informações, consulte Criar o perfil do IAM do nó do Amazon EKS e Habilitar o acesso da entidade principal do IAM ao seu cluster no Guia do usuário do Amazon EKS. Se você estiver usando redes de pods, consulte Como configurar o plugin CNI da Amazon VPC para o Kubernetes para usar perfis do IAM para contas de serviço no Guia do usuário do Amazon EKS.

$ cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "My-Eks-CE1", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:region-code:your-account-number:cluster/my-cluster-name", "kubernetesNamespace": "my-aws-batch-namespace" }, "computeResources": { "type": "EC2", "allocationStrategy": "BEST_FIT_PROGRESSIVE", "minvCpus": 0, "maxvCpus": 128, "instanceTypes": [ "m5" ], "subnets": [ "<eks-cluster-subnets-with-access-to-internet-for-image-pull>" ], "securityGroupIds": [ "<eks-cluster-sg>" ], "instanceRole": "<eks-instance-profile>" } } EOF
$ aws batch create-compute-environment --cli-input-json file://./batch-eks-compute-environment.json
Observações

Etapa 4: Criar uma fila de trabalhos e anexar o ambiente de computação

Importante

É importante confirmar se o ambiente de computação está íntegro antes de continuar. A operação da API DescribeComputeEnvironments pode ser usada para fazer isso.

$ aws batch describe-compute-environments --compute-environments My-Eks-CE1

Confirme se o parâmetro status não está INVALID. Se estiver, veja o parâmetro statusReason para saber a causa. Para obter mais informações, consulte Solução de problemas AWS Batch.

Os trabalhos enviados para essa nova fila de trabalhos são executados como pods em nós gerenciados do AWS Batch que se juntaram ao cluster do Amazon EKS associado ao seu ambiente computacional.

$ cat <<EOF > ./batch-eks-job-queue.json { "jobQueueName": "My-Eks-JQ1", "priority": 10, "computeEnvironmentOrder": [ { "order": 1, "computeEnvironment": "My-Eks-CE1" } ] } EOF
$ aws batch create-job-queue --cli-input-json file://./batch-eks-job-queue.json

Etapa 5: Criar uma definição de trabalho

A definição de trabalho a seguir instrui o pod a dormir por 60 segundos.

$ cat <<EOF > ./batch-eks-job-definition.json { "jobDefinitionName": "MyJobOnEks_Sleep", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "sleep", "60" ], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ], "metadata": { "labels": { "environment": "test" } } } } } EOF
$ aws batch register-job-definition --cli-input-json file://./batch-eks-job-definition.json
Observações

Etapa 6: Enviar um trabalho

Execute o comando AWS CLI a seguir para enviar um novo Trabalho.

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1

Para verificar o status de um trabalho:

$ aws batch describe-jobs --job <jobId-from-submit-response>
Observações
  • Para obter mais informações sobre como executar trabalhos em recursos do Amazon EKS, consulte Trabalhos do Amazon EKS.

Etapa 7: ver a saída do trabalho

Para ver o resultado do trabalho, faça o seguinte:

  1. Abra o console AWS Batch em https://console.aws.amazon.com/batch/.

  2. No painel de navegação, escolha Trabalhos.

  3. No menu suspenso Fila de trabalhos, escolha a fila de trabalhos que você criou para o tutorial.

  4. A tabela de Trabalhos lista todos os seus trabalhos e qual é o status atual deles. Depois que o Status do trabalho for Bem-sucedido, escolha o Nome do trabalho, My-Eks-JQ1, para visualizar os detalhes do trabalho.

  5. No painel Detalhes, os horários Iniciado em e Concluído em devem ter um minuto de intervalo.

Etapa 8: (Opcional) Enviar um trabalho com substituições

Esse trabalho substitui o comando passado para o contêiner. O AWS Batch limpa agressivamente os pods após a conclusão dos trabalhos para reduzir a carga para o Kubernetes. Para examinar os detalhes de um trabalho, o log deve ser configurado. Para obter mais informações, consulte Use o CloudWatch Logs para monitorar AWS Batch trabalhos do Amazon EKS.

$ cat <<EOF > ./submit-job-override.json { "jobName": "EksWithOverrides", "jobQueue": "My-Eks-JQ1", "jobDefinition": "MyJobOnEks_Sleep", "eksPropertiesOverride": { "podProperties": { "containers": [ { "command": [ "/bin/sh" ], "args": [ "-c", "echo hello world" ] } ] } } } EOF
$ aws batch submit-job --cli-input-json file://./submit-job-override.json
Observações

Para ver o resultado do trabalho, faça o seguinte:

  1. Abra o console AWS Batch em https://console.aws.amazon.com/batch/.

  2. No painel de navegação, escolha Trabalhos.

  3. No menu suspenso Fila de trabalhos, escolha a fila de trabalhos que você criou para o tutorial.

  4. A tabela de Trabalhos lista todos os seus trabalhos e qual é o status atual deles. Depois que o Status do trabalho for Bem-sucedido, escolha o Nome do trabalho para ver os detalhes do trabalho.

  5. No painel Detalhes, escolha Nome do fluxo de log. O console do CloudWatch para o trabalho será aberto e deverá haver um evento com a Mensagem do hello world ou sua mensagem personalizada.

Etapa 9: limpar os recursos do tutorial

Você será cobrado pela instância do Amazon EC2 enquanto ela estiver ativada. É possível excluir a instância para não incorrer mais em cobranças.

Para excluir os recursos criados, faça o seguinte:

  1. Abra o console AWS Batch em https://console.aws.amazon.com/batch/.

  2. No painel de navegação, escolha Filas de trabalhos.

  3. Na tabela Fila de trabalhos, escolha a fila de trabalhos que você criou para o tutorial.

  4. Escolha Disable. Depois que o Estado da fila de trabalhos estiver desativado, você poderá escolher Excluir.

  5. Depois que a fila de trabalhos for excluída, no painel de navegação, escolha Ambientes computacionais.

  6. Escolha o ambiente computacional que você criou para este tutorial e, em seguida, escolha Desativar. Pode levar de 1 a 2 minutos para que o ambiente computacional seja desativado.

  7. Quando o Estado do ambiente computacional estiver desativado, escolha Excluir. Pode levar de 1 a 2 minutos para que o ambiente computacional seja excluído.

Recursos adicionais

Depois de concluir o tutorial, você pode querer explorar os seguintes tópicos: