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á.
Começando a usar AWS Batch no Amazon EKS
AWS Batch on Amazon EKS é um serviço gerenciado para programar e escalar cargas de trabalho em lotes em clusters existentes do Amazon EKS. AWS Batch não cria, administra nem executa operações de ciclo de vida de seus clusters do Amazon EKS em seu nome. AWS Batch a orquestração aumenta e diminui os nós gerenciados AWS Batch e executa pods nesses nós.
AWS Batch não toca em nós, grupos de nós com escalabilidade automática ou ciclos de vida de pods que não estejam associados a ambientes AWS Batch computacionais em seu cluster Amazon EKS. AWS Batch Para operar de forma eficaz, sua função vinculada a serviços precisa de permissões de controle de acesso Kubernetes baseado em função (RBAC) em seu cluster Amazon EKS existente. Para obter mais informações, consulte Usar autorização RBAC
AWS Batch requer um Kubernetes namespace no qual possa incluir pods como AWS Batch trabalhos. Recomendamos um namespace dedicado para isolar os AWS Batch pods das outras cargas de trabalho do cluster.
Depois AWS Batch de receber acesso ao RBAC e estabelecer um namespace, você pode associar esse cluster Amazon EKS a um ambiente AWS Batch computacional usando a operação de API. CreateComputeEnvironment Uma fila de trabalhos pode ser associada a esse novo ambiente computacional do Amazon EKS. AWS Batch os trabalhos são enviados para a fila de trabalhos com base em uma definição de trabalho do Amazon EKS usando a operação de SubmitJobAPI. AWS Batch em seguida, inicia os nós AWS Batch gerenciados e coloca os trabalhos da fila de trabalhos como Kubernetes pods no cluster EKS associado a um ambiente AWS Batch computacional.
As seções a seguir abordam como se configurar AWS Batch no Amazon EKS.
Visão geral
Este tutorial demonstra como configurar AWS Batch com o 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 AWS Batch.
- Características usadas
-
Este tutorial mostra como usar o AWS CLI, para:
-
Crie e configure um ambiente computacional Amazon EKS
-
Crie uma fila de trabalhos.
-
Crie uma definição de trabalho
-
Crie e envie um trabalho para execução
-
Envie um trabalho com substituições
-
- Tempo necessário
-
A conclusão deste tutorial deve levar cerca de 30 a 40 minutos.
- Restrições regionais
-
Não há restrições nacionais ou regionais associadas ao uso dessa solução.
- Custos de uso de recursos
-
Não há cobrança pela criação de uma AWS conta. 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 seguintes ferramentas e recursos necessários para criar e gerenciar tanto os recursos do Amazon EKS AWS Batch quanto os 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 o AWS CLI, recomendamos que você também o 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ão1.23
ou superior. Para obter mais informações, consulte Instalar ou atualizar okubectl
no 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ãoeksctl
0.115.0
ou superior. Para obter mais informações, consulte Instalar ou atualizar o
no Guia do usuário do Amazon EKS.eksctl
-
Permissões necessárias do IAM — O diretor de segurança do IAM que você está usando deve ter permissões para trabalhar com as funções do IAM e funções vinculadas ao serviço do Amazon EKS AWS CloudFormation, além de uma VPC e 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 da CreateComputeEnvironmentAPI para criar um ambiente computacional que usa os recursos do Amazon EKS precisam de permissões para a operação da
eks:DescribeCluster
API. -
Conta da AWS número — Você precisa saber sua Conta da AWS identidade. Siga as instruções em Visualizar seu Conta da AWS ID.
(Opcional) CloudWatch — Para examinar os detalhes de (Opcional) Enviar um trabalho com substituições, o registro deve ser configurado. Para obter mais informações, consulte Use CloudWatch registros para monitorar trabalhos AWS Batch do Amazon EKS.
Etapa 1: Crie seu cluster 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ê precisa criar seu cluster usando o. eksctl
A criação do cluster pode levar de 10 a 15 minutos.
$
eksctl create cluster --name
my-cluster-name
--regionregion-code
No comando anterior, substitua:
-
my-cluster-name
Substitua pelo nome que você deseja usar para seu cluster. -
region-code
Substitua pelo Região da AWS para criar o cluster em, por exemplous-west-2
.
O nome e a região do cluster são necessários para mais adiante neste tutorial.
Etapa 2: Prepare seu cluster Amazon EKS para AWS Batch
Todas as etapas são necessárias.
-
Crie um namespace dedicado para trabalhos 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
Saída:
namespace/my-aws-batch-namespace created
-
Habilite o acesso por meio do controle de acesso com base em perfil (RBAC)
Use
kubectl
para criar uma Kubernetes função para o cluster 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 EOFSaída:
clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created
-
Crie uma Kubernetes função com escopo de namespace para gerenciar e fazer o ciclo de vida dos AWS Batch pods e vinculá-los. 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 EOFSaída:
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 Kubernetes
aws-auth
de configuração para mapear as permissões anteriores do RBAC para a função vinculada ao serviço. AWS BatchNo comando a seguir, substitua:
-
Substituir
<your-account-number>
por seu número de Conta da AWS .
$
eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::<your-account-number>
:role/AWSServiceRoleForBatch" \ --usernameaws-batch
Saída:
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 Amazon EKS
AWS Batch ambientes computacionais definem parâmetros de recursos computacionais para atender às suas necessidades de carga de trabalho em lotes. Em um ambiente computacional gerenciado, AWS Batch ajuda você a gerenciar a capacidade e os tipos de instância dos recursos computacionais (Kubernetesnós) dentro do seu cluster 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 EC2 sob demanda ou instâncias EC2 spot.
Agora que a função AWSServiceRoleForBatchvinculada ao serviço tem acesso ao seu cluster Amazon EKS, você pode criar AWS Batch recursos. Primeiro, crie um ambiente computacional que aponte para seu cluster do Amazon EKS.
-
Para
subnets
executareksctl get cluster
para obter as sub-redes usadas pelo cluster.my-cluster-name
-
Como
securityGroupIds
parâmetro, você pode usar o mesmo grupo de segurança do cluster 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 ainstanceRole
lista de todas as entidades que usam aAmazonEKSWorkerNodePolicy
política:$
aws iam list-entities-for-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy
O nome da função da política contém o nome do cluster que você criou
eksctl-
.my-cluster-name
-nodegroup-examplePara encontrar o
instanceRole
arn, execute o seguinte comando:$
aws iam list-instance-profiles-for-role --role-name eksctl-
my-cluster-name
-nodegroup-exampleSaída:
INSTANCEPROFILES arn:aws:iam::
<your-account-number>
:instance-profile/eks-04cb2200-94b9-c297-8dbe-87f12examplePara obter mais informações, consulte Criar a função IAM do nó Amazon EKS e Habilitar o acesso 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 conectar o ambiente computacional
Importante
É importante confirmar se o ambiente de computação está íntegro antes de continuar. A operação DescribeComputeEnvironmentsda API 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 AWS Batch gerenciados que se juntaram ao cluster 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 tarefa
A definição de Job 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
cpu
ememory
. Para obter mais informações, consulte Considerações sobre memória e vCPU para o Amazon AWS Batch EKS.
Etapa 6: enviar um trabalho
Execute o AWS CLI comando a seguir para enviar um novo Job.
$
aws batch submit-job --job-queue
My-Eks-JQ1
\ --job-definitionMyJobOnEks_Sleep
--job-nameMy-Eks-Job1
Para verificar o status de um Job:
$
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: Exibir a saída do trabalho
Para visualizar a saída do trabalho, faça o seguinte:
-
Abra o AWS Batch console 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 ver os detalhes do trabalho. -
No painel Detalhes, os horários Iniciado em e Parado às vezes 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. AWS Batch limpa agressivamente os frutos após a conclusão dos trabalhos para reduzir a carga para. Kubernetes Para examinar os detalhes de um trabalho, o log deve ser configurado. Para obter mais informações, consulte Use CloudWatch registros para monitorar trabalhos AWS Batch 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 o Amazon AWS Batch EKS.
Para visualizar a saída do trabalho, faça o seguinte:
-
Abra o AWS Batch console 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 CloudWatch console do Job será aberto e deverá haver um evento com a Mensagem de
hello world
ou sua mensagem personalizada.
Etapa 9: limpe os recursos do seu tutorial
Você será cobrado pela EC2 instância da Amazon enquanto ela estiver ativada. Você pode excluir a instância para parar de incorrer em cobranças.
Para excluir os recursos que você criou, faça o seguinte:
-
Abra o AWS Batch console em https://console.aws.amazon.com/batch/
. -
No painel de navegação, escolha Job queue.
-
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 Job for excluída, no painel de navegação, escolha Ambientes de computação.
-
Escolha o ambiente computacional que você criou para este tutorial e 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, talvez você queira explorar os seguintes tópicos:
-
Saiba mais sobre as melhores práticas.
-
Explore os componentes AWS Batch principais. Para obter mais informações, consulte Componentes do AWS Batch.
-
Saiba mais sobre os diferentes ambientes de computação disponíveis em AWS Batch.
-
Saiba mais sobre as filas de trabalhos e suas diferentes opções de agendamento.
-
Saiba mais sobre as definições de Job e as diferentes opções de configuração.
-
Saiba mais sobre os diferentes tipos de trabalhos.