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
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.
Sumário
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 configureno 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ão1.23ou superior. Para obter mais informações, consulte Instalar ou atualizar okubectlno Guia do usuário do Amazon EKS. -
– 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ãoeksctl0.115.0ou superior. Para obter mais informações, consulte Instalar ou atualizar ono Guia do usuário do Amazon EKS.eksctl -
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:DescribeClusterda 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 --namemy-cluster-name--regionregion-code
No comando anterior, substitua:
-
Substitua
my-cluster-namepelo nome que você deseja usar para seu cluster. -
Substitua
region-codepor Região da AWS para criar o cluster, por exemplo, emus-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.
-
Crie um namespace dedicado para trabalhos do AWS Batch
Use o
kubectlpara criar um namespace.$namespace=my-aws-batch-namespace$cat - <<EOF | kubectl create -f - { "apiVersion": "v1", "kind": "Namespace", "metadata": { "name": "${namespace}", "labels": { "name": "${namespace}" } } } EOFResultado:
namespace/my-aws-batch-namespace created -
Habilite o acesso por meio do controle de acesso com base em perfil (RBAC)
Use o
kubectlpara 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-rolerules: - 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-bindingsubjects: - kind: User name:aws-batchapiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name:aws-batch-cluster-roleapiGroup: rbac.authorization.k8s.io EOFResultado:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created -
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-rolenamespace: ${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-bindingnamespace: ${namespace} subjects: - kind: User name:aws-batchapiGroup: rbac.authorization.k8s.io roleRef: kind: Role name:aws-batch-compute-environment-roleapiGroup: rbac.authorization.k8s.io EOFResultado:
role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created -
Atualize o mapa de configuração do Kubernetes
aws-authpara 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 \ --clustermy-cluster-name\ --arn "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" \ --usernameaws-batchResultado:
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::<your-account-number>:role/AWSServiceRoleForBatch" to auth ConfigMapnota
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çãoaws-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
subnetsexecutareksctl get clusterpara obter as sub-redes usadas pelo cluster.my-cluster-name -
Para o parâmetro
securityGroupIdsvocê 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 \ --namemy-cluster-name\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
O
instanceRoleé criado quando você cria o cluster. Para encontrar a listainstanceRolede todas as entidades que usam a políticaAmazonEKSWorkerNodePolicy:$aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicyO nome do perfil da política contém o nome do cluster que você criou
eksctl-.my-cluster-name-nodegroup-examplePara encontrar o
instanceRolee executar o comando a seguir:$aws iam list-instance-profiles-for-role --role-name eksctl-my-cluster-name-nodegroup-exampleResultado:
INSTANCEPROFILES arn:aws:iam::<your-account-number>:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12examplePara 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
-
A manutenção de um ambiente de computação do Amazon EKS é uma responsabilidade compartilhada. Para obter mais informações, consulte Responsabilidade compartilhada dos nós Kubernetes.
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-environmentsMy-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
-
Há considerações sobre os parâmetros
cpuememory. Para obter mais informações, consulte Considerações sobre memória e vCPU para AWS Batch no Amazon EKS.
Etapa 6: Enviar um trabalho
Execute o comando AWS CLI a seguir para enviar um novo Trabalho.
$aws batch submit-job --job-queueMy-Eks-JQ1\ --job-definitionMyJobOnEks_Sleep--job-nameMy-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:
-
Abra o console AWS Batch em https://console.aws.amazon.com/batch/
. -
No painel de navegação, escolha Trabalhos.
-
No menu suspenso Fila de trabalhos, escolha a fila de trabalhos que você criou para o tutorial.
-
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. -
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 melhorar a visibilidade dos detalhes das operações, ative o log do ambiente de gerenciamento Amazon EKS. Para obter mais informações, consulte Logs do ambiente de gerenciamento do Amazon EKS no Guia do usuário do Amazon EKS.
-
A sobrecarga de Daemonsets e kubelets afeta os recursos de vCPU e memória disponíveis, especificamente a escalabilidade e o posicionamento do trabalho. Para obter mais informações, consulte Considerações sobre memória e vCPU para AWS Batch no Amazon EKS.
Para ver o resultado do trabalho, faça o seguinte:
-
Abra o console AWS Batch em https://console.aws.amazon.com/batch/
. -
No painel de navegação, escolha Trabalhos.
-
No menu suspenso Fila de trabalhos, escolha a fila de trabalhos que você criou para o tutorial.
-
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.
-
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 worldou 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:
-
Abra o console AWS Batch em https://console.aws.amazon.com/batch/
. -
No painel de navegação, escolha Filas de trabalhos.
-
Na tabela Fila de trabalhos, escolha a fila de trabalhos que você criou para o tutorial.
-
Escolha Disable. Depois que o Estado da fila de trabalhos estiver desativado, você poderá escolher Excluir.
-
Depois que a fila de trabalhos for excluída, no painel de navegação, escolha Ambientes computacionais.
-
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.
-
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:
-
Saiba mais sobre as Práticas recomendadas.
-
Explore os componentes principais do AWS Batch. Para obter mais informações, consulte Componentes do AWS Batch.
-
Saiba mais sobre os diferentes Ambientes computacionais disponíveis no AWS Batch.
-
Saiba mais sobre as Filas de trabalhos e suas diferentes opções de agendamento.
-
Saiba mais sobre as Definições de trabalho e suas diferentes opções de configuração.
-
Saiba mais sobre os diferentes tipos de Trabalho.