Tutorial: Como começar a usar AWS Batch na 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á.

Tutorial: Como começar a usar AWS Batch na Amazon EKS

AWS Batch on Amazon EKS é um serviço gerenciado para programar e escalar cargas de trabalho em lotes em clusters existentes da Amazon. EKS AWS Batch não cria, administra ou executa operações de ciclo de vida de seus EKS clusters da Amazon 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 da Amazon. EKS AWS Batch Para operar de forma eficaz, sua função vinculada a serviços precisa Kubernetes permissões de controle de acesso baseado em função (RBAC) em seu cluster Amazon EKS existente. Para obter mais informações, consulte Usando a RBAC autorização no Kubernetes documentação.

AWS Batch requer um Kubernetes namespace onde ele pode 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 o RBAC acesso e estabelecer um namespace, você pode associar esse EKS cluster da Amazon a um ambiente AWS Batch computacional usando a operação. CreateComputeEnvironmentAPI Uma fila de trabalhos pode ser associada a esse novo ambiente EKS computacional da Amazon. AWS Batch os trabalhos são enviados para a fila de trabalhos com base em uma definição de EKS trabalho da Amazon usando a SubmitJobAPIoperação. AWS Batch em seguida, inicia os nós AWS Batch gerenciados e coloca os trabalhos da fila de trabalhos como Kubernetes pods no EKS cluster associado a um ambiente AWS Batch computacional.

As seções a seguir abordam como se configurar AWS Batch na AmazonEKS.

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 AWS Batch EKS recursos quanto os da Amazon.

  • AWS CLI— Uma ferramenta de linha de comando para trabalhar com AWS serviços, incluindo a AmazonEKS. 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 Kubernetes . Este guia requer que você use a versão 1.23 ou superior. Para obter mais informações, consulte Instalação ou atualização kubectl no Guia do EKS usuário da Amazon.

  • eksctl— Uma ferramenta de linha de comando para trabalhar com EKS clusters da Amazon que automatiza muitas tarefas individuais. Este guia requer que você use a versão 0.115.0 ou superior. Para obter mais informações, consulte Instalação ou atualização eksctl no Guia do EKS usuário da Amazon.

  • IAMPermissões necessárias — O diretor de IAM segurança que você está usando deve ter permissões para trabalhar com EKS IAM funções da Amazon AWS CloudFormation, funções vinculadas a serviços 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. IAM Você deve concluir todas as etapas deste manual como o mesmo usuário.

  • Criação de um EKS cluster da Amazon — Para obter mais informações, consulte Introdução à Amazon EKS — eksctl no Guia EKS do usuário da Amazon.

    nota

    AWS Batch só oferece suporte a EKS clusters da Amazon com endpoints de API servidor com acesso público, acessíveis à Internet pública. Por padrão, os endpoints API do servidor de EKS clusters da Amazon têm acesso público. Para obter mais informações, consulte Controle de acesso ao endpoint de EKS cluster da Amazon no Guia do EKS usuário da Amazon.

    nota

    AWS Batch não fornece orquestração de nós gerenciados para o Core DNS ou outros pods de implantação. Se você precisar do CoreDNS, consulte Adicionar o EKS complemento Core DNS Amazon no Guia do EKS usuário da Amazon. Ou, use eksctl create cluster create para criar o cluster, ele inclui o Core DNS por padrão.

  • Permissões — Os usuários que chamam a CreateComputeEnvironmentAPIoperação para criar um ambiente computacional que usa EKS recursos da Amazon precisam de permissões para a eks:DescribeCluster API operação. Usar o AWS Management Console para criar um recurso computacional usando EKS os recursos da Amazon requer permissões para eks:DescribeCluster e. eks:ListClusters

Prepare seu EKS cluster Amazon para AWS Batch

Todas as etapas são necessárias.

  1. 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
  2. Habilite o acesso por meio do controle de acesso baseado em funções () RBAC

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

    nota

    Para obter mais informações sobre o uso da RBAC autorização, consulte Usando a RBAC autorização no Kubernetes Guia do usuário.

    $ 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 EOF

    Saída:

    clusterrole.rbac.authorization.k8s.io/aws-batch-cluster-role created clusterrolebinding.rbac.authorization.k8s.io/aws-batch-cluster-role-binding created

    Crie com escopo de namespace Kubernetes função de gerenciar e AWS Batch fazer o ciclo de vida dos 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 EOF

    Saída:

    role.rbac.authorization.k8s.io/aws-batch-compute-environment-role created rolebinding.rbac.authorization.k8s.io/aws-batch-compute-environment-role-binding created

    Atualizar Kubernetes aws-authmapa de configuração para mapear as RBAC permissões anteriores 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" \ --username aws-batch

    Saída:

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

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

Crie um ambiente EKS computacional da Amazon

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 (Kubernetes nodes) dentro do seu EKS cluster da Amazon. 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 o AWSServiceRoleForBatchA função vinculada ao serviço tem acesso ao seu EKS cluster da Amazon, você pode criar AWS Batch recursos. Primeiro, crie um ambiente computacional que aponte para o seu EKS cluster da Amazon.

$ 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-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
  • O serviceRole parâmetro não deve ser especificado, então a função AWS Batch vinculada ao serviço será usada. AWS Batch na Amazon EKS só oferece suporte à função AWS Batch vinculada ao serviço.

  • SomenteBEST_FIT_PROGRESSIVE,SPOT_CAPACITY_OPTIMIZED, e as estratégias de SPOT_PRICE_CAPACITY_OPTIMIZED alocação são suportadas para ambientes EKS computacionais da Amazon.

    nota

    Em vez disso, recomendamos utilizar SPOT_PRICE_CAPACITY_OPTIMIZED em vez de SPOT_CAPACITY_OPTIMIZED na maioria das instâncias.

  • Para issoinstanceRole, consulte Como criar a IAM função de EKS nó da Amazon e Habilitar o acesso IAM principal ao seu cluster no Guia EKS do usuário da Amazon. Se você estiver usando uma rede de pods, consulte Como configurar o VPC CNI plug-in da Amazon para Kubernetes para usar IAM funções para contas de serviço no Guia do EKS usuário da Amazon.

  • Uma forma de fazer com que as sub-redes funcionem para o subnets parâmetro é usar as sub-redes públicas dos grupos de nós EKS gerenciados pela Amazon que foram criadas ao eksctl criar um cluster da Amazon. EKS Caso contrário, use sub-redes que tenham um caminho de rede compatível com a extração de imagens.

  • O securityGroupIds parâmetro pode usar o mesmo grupo de segurança do EKS cluster da Amazon. 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 EKS computacional da Amazon é uma responsabilidade compartilhada. Para obter mais informações, consulte Responsabilidade compartilhada do Kubernetes nós.

Importante

É importante confirmar se o ambiente de computação está íntegro antes de continuar. A DescribeComputeEnvironmentsAPIoperação 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.

Crie uma fila de trabalhos e conecte o ambiente computacional

$ 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 EKS cluster da Amazon 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

Crie uma definição de trabalho

$ 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

Enviar um trabalho

$ aws batch submit-job --job-queue My-Eks-JQ1 \ --job-definition MyJobOnEks_Sleep --job-name My-Eks-Job1 $ aws batch describe-jobs --job <jobId-from-submit-response>
Observações

(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