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á.
Introdução aos AWS Batch clusters privados do Amazon EKS
AWS Batch é um serviço gerenciado que orquestra cargas de trabalho em lotes em seus clusters do Amazon Elastic Kubernetes Service (Amazon EKS). Isso inclui filas, rastreamento de dependências, tentativas e prioridades gerenciadas de tarefas, gerenciamento de pods e escalabilidade de nós. Esse recurso conecta seu cluster privado existente do Amazon EKS AWS Batch para executar seus trabalhos em grande escala. Você pode usar eksctl
Os clusters somente privados do Amazon EKS não têm acesso de entrada/saída à Internet e têm apenas sub-redes privadas. Os endpoints do Amazon VPC são usados para permitir o acesso privado a outros serviços. AWS
eksctl
suporta a criação de clusters totalmente privados usando uma Amazon VPC e sub-redes preexistentes.
também cria endpoints da Amazon VPC na Amazon VPC fornecida e modifica as tabelas de rotas para as sub-redes fornecidas.eksctl
Cada sub-rede deve ter uma tabela de rotas explícita associada a ela porque
não modifica a tabela de rotas principal. Seu clustereksctl
Opcionalmente, você pode criar uma regra de cache pull through com o Amazon ECR. Depois que uma regra de cache pull through é criada para um registro público externo, você pode extrair uma imagem desse registro público externo usando o identificador de recursos uriform (URI) do registro privado do Amazon ECR. Em seguida, o Amazon ECR cria um repositório e armazena a imagem em cache. Quando uma imagem em cache é extraída usando o URI de registro privado do Amazon ECR, o Amazon ECR verifica o registro remoto para ver se há uma nova versão da imagem e atualiza seu registro privado até uma vez a cada 24 horas.
Sumário
- Pré-requisitos
- Etapa 1: Preparando seu cluster EKS para AWS Batch
- Etapa 2: Criação de um ambiente de computação do Amazon EKS
- Etapa 3: Criar uma fila de trabalhos e anexar o ambiente de computação
- Etapa 4: Criar uma definição de trabalho
- Etapa 5: Enviar um trabalho
- (Opcional) Envie um trabalho com substituições
- Solução de problemas
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. Você também precisa criar todos os recursos necessários, incluindo VPC, sub-redes, tabelas de rotas, VPC endpoints e cluster Amazon EKS. Você precisa usar AWS CLI o.
-
AWS CLI— Uma ferramenta de linha de comando para trabalhar com AWS serviços, 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ê 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 Kubernetes clusters. 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 muitas 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 obrigatórias AWS Identity and Access Management (IAM) — O diretor de segurança do IAM que você está usando deve ter permissões para trabalhar com funções do IAM e funções vinculadas a serviços 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 para o Amazon Elastic Kubernetes Service e Uso de funções vinculadas a serviços no Guia do usuário do IAM. Você deve concluir todas as etapas deste manual como o mesmo usuário.
-
Criação de um cluster do Amazon EKS — Para obter mais informações, consulte Introdução ao Amazon EKS —
eksctl
no Guia do usuário do Amazon EKS.nota
AWS Batch não fornece orquestração de nós gerenciados para CoreDNS ou outros pods de implantação. Se você precisar do CoreDNS, consulte Adicionar o complemento CoreDNS do Amazon EKS no Guia do usuário do Amazon EKS. Ou use
eksctl create cluster create
para criar o cluster. Ele inclui o CoreDNS por padrão. -
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. Usar o AWS Management Console para criar um recurso computacional usando os recursos do Amazon EKS requer permissões paraeks:DescribeCluster
e.eks:ListClusters
-
Crie um cluster EKS privado na região us-east-1 usando o arquivo de
configuração de amostra.eksctl
kind: ClusterConfig apiVersion: eksctl.io/v1alpha5 availabilityZones: - us-east-1a - us-east-1b - us-east-1d managedNodeGroups: privateNetworking: true privateCluster: enabled: true skipEndpointCreation: false
Crie seus recursos usando o comando:
eksctl create cluster -f clusterConfig.yaml
-
Os nós gerenciados em lote devem ser implantados em sub-redes que tenham os endpoints de interface VPC de que você precisa. Para obter mais informações, consulte Requisitos de cluster privado.
Etapa 1: Preparando seu cluster 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 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 Amazon EKS.nota
Para obter mais informações sobre o uso de autorização RBAC, consulte Usar a autorização RBAC
na documentação do Kubernetes. $
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: ["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 Batch$
eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::<your-account>
:role/AWSServiceRoleForBatch" \ --usernameaws-batch
Saída:
2022-10-25 20:19:57 [ℹ] adding identity "arn:aws:iam::
<your-account>
: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 Funções com caminhos não funcionam quando o caminho é incluído em seu ARN no. aws-authconfigmap
Etapa 2: Criação de um ambiente de computação do 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 sob demanda do EC2 ou instâncias spot do EC2.
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.
$
cat <<EOF > ./batch-eks-compute-environment.json { "computeEnvironmentName": "
My-Eks-CE1
", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:<region>
:123456789012
:cluster/<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-the-image-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
-
O
serviceRole
parâmetro não deve ser especificado e, em seguida, a função AWS Batch vinculada ao serviço será usada. AWS Batch no Amazon EKS só oferece suporte à função AWS Batch vinculada ao serviço. -
Somente
BEST_FIT_PROGRESSIVE
,SPOT_CAPACITY_OPTIMIZED
, e as estratégias deSPOT_PRICE_CAPACITY_OPTIMIZED
alocação são suportadas para ambientes computacionais Amazon EKS.nota
Recomendamos utilizar
SPOT_PRICE_CAPACITY_OPTIMIZED
em vez deSPOT_CAPACITY_OPTIMIZED
na maioria das instâncias. -
Para o
instanceRole
, 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. -
Uma forma de fazer com que as sub-redes funcionem para o parâmetro
subnets
é usar as sub-redes públicas dos grupos de nós gerenciados do Amazon EKS que foram criadas peloeksctl
ao criar um cluster do Amazon EKS. Caso contrário, use sub-redes que tenham um caminho de rede compatível com a extração de imagens. -
O parâmetro
securityGroupIds
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.$
eks describe-cluster \ --name
<cluster-name>
\ --query cluster.resourcesVpcConfig.clusterSecurityGroupId -
A manutenção de um ambiente computacional Amazon EKS é uma responsabilidade compartilhada. Para obter mais informações, consulte Segurança no Amazon EKS.
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 ter mais informações, consulte Solução de problemas AWS Batch.
Etapa 3: Criar uma fila de trabalhos e anexar o ambiente de computação
$
aws batch describe-compute-environments --compute-environments
My-Eks-CE1
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 4: Criar uma definição de trabalho
No campo de imagem da definição do trabalho, em vez de fornecer um link para a imagem em um repositório ECR público, forneça o link para a imagem armazenada em nosso repositório ECR privado. Veja o exemplo de definição de tarefa a seguir:
$
cat <<EOF > ./batch-eks-job-definition.json { "jobDefinitionName": "
MyJobOnEks_Sleep
", "type": "container", "eksProperties": { "podProperties": { "hostNetwork": true, "containers": [ { "image": "account-id
.dkr.ecr.region
.amazonaws.com/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
Para executar comandos kubectl, você precisará de acesso privado ao seu cluster Amazon EKS. Isso significa que todo o tráfego para seu servidor de API de cluster deve vir da VPC do seu cluster ou de uma rede conectada.
Etapa 5: Enviar um trabalho
$
aws batch submit-job - -job-queue
My-Eks-JQ1
\ - -job-definitionMyJobOnEks_Sleep
- -job-nameMy-Eks-Job1
$
aws batch describe-jobs - -job
<jobId-from-submit-response>
Observações
-
Somente trabalhos em um único contêiner são suportados.
-
Certifique-se de estar familiarizado com todas as considerações relevantes para os parâmetros
cpu
ememory
. Para ter mais informações, consulte Considerações sobre memória e vCPU para AWS Batch no Amazon EKS. -
Para obter mais informações sobre a execução de trabalhos nos recursos do Amazon EKS, consulteTrabalhos do Amazon EKS.
(Opcional) Envie um trabalho com substituições
Esse trabalho substitui o comando passado para o contêiner.
$
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
-
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 ter mais informações, consulte Use o CloudWatch Logs para monitorar AWS Batch trabalhos do Amazon EKS.
-
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 ter mais informações, consulte Considerações sobre memória e vCPU para AWS Batch no Amazon EKS.
Solução de problemas
Se os nós lançados por AWS Batch não tiverem acesso ao repositório Amazon ECR (ou a qualquer outro repositório) que armazena sua imagem, seus trabalhos poderão permanecer no estado STARTING. Isso ocorre porque o pod não conseguirá baixar a imagem e executar seu AWS Batch trabalho. Se você clicar no nome do pod lançado por AWS Batch , poderá ver a mensagem de erro e confirmar o problema. A mensagem de erro deve ser semelhante à seguinte:
Failed to pull image "public.ecr.aws/amazonlinux/amazonlinux:2": rpc error: code = Unknown desc = failed to pull and unpack image "public.ecr.aws/amazonlinux/amazonlinux:2": failed to resolve reference "public.ecr.aws/amazonlinux/amazonlinux:2": failed to do request: Head "https://public.ecr.aws/v2/amazonlinux/amazonlinux/manifests/2": dial tcp: i/o timeout
Para outros cenários comuns de solução de problemas, consulte Solução de problemas AWS Batch. Para obter informações sobre a solução de problemas com base no status do pod, consulte Como eu soluciono o status do pod no Amazon EKS