쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

자습서: Amazon EKS 기반 AWS Batch 시작하기

포커스 모드
자습서: Amazon EKS 기반 AWS Batch 시작하기 - AWS Batch

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon EKS 기반 AWS Batch는 기존 Amazon EKS 클러스터로 배치 워크로드를 스케줄링하고 규모를 조정하는 관리형 서비스입니다. AWS Batch는 사용자를 대신하여 Amazon EKS 클러스터를 생성, 관리하거나 수명 주기 작업을 수행하지 않습니다. AWS Batch 오케스트레이션은 AWS Batch가 관리하는 노드를 스케일 업 및 스케일 다운하고 이러한 노드에서 포드를 실행합니다.

AWS Batch는 Amazon EKS 클러스터 내의 AWS Batch 컴퓨팅 환경과 관련이 없는 노드, Auto Scaling 노드 그룹 또는 포드 수명 주기는 건드리지 않습니다. AWS Batch가 효과적으로 작동하려면 서비스 연결 역할에 기존 Amazon EKS 클러스터의 Kubernetes 역할 기반 액세스 제어(RBAC) 권한이 있어야 합니다. 자세한 내용은 Kubernetes 설명서RBAC 승인 사용을 참조하세요.

AWS Batch에는 포드의 범위를 AWS Batch 작업 범위로 지정할 수 있는 Kubernetes 네임스페이스가 필요합니다. AWS Batch 포드를 다른 클러스터 워크로드와 분리하려면 전용 네임스페이스를 사용하는 것이 좋습니다.

AWS Batch가 RBAC 액세스 권한을 부여하고 네임스페이스가 설정된 후에는 CreateComputeEnvironment API 작업을 사용하여 해당 Amazon EKS 클러스터를 AWS Batch 컴퓨팅 환경에 연결할 수 있습니다. 작업 대기열을 이 새로운 Amazon EKS 컴퓨팅 환경에 연결할 수 있습니다. AWS Batch 작업은 SubmitJob API 작업을 사용하여 EKS 작업 정의를 기반으로 작업 대기열에 제출됩니다. 그런 다음 AWS Batch는 AWS Batch 관리형 노드를 시작하고 작업 대기열의 작업을 Kubernetes 포드 형태로 AWS Batch 컴퓨팅 환경과 연결된 Amazon EKS 클러스터에 배치합니다.

다음 섹션에서는 Amazon EKS 기반 AWS Batch를 설정하는 방법을 다룹니다.

사전 조건

이 튜토리얼을 시작하기 전에 먼저 AWS Batch 및 Amazon EKS 리소스를 생성하고 관리할 때 필요한 다음 도구 및 리소스를 설치하고 구성해야 합니다.

  • AWS CLI - Amazon EKS를 비롯한 AWS 서비스를 사용한 작업을 위한 명령줄 도구입니다. 이 가이드에서는 버전 2.8.6 이상 또는 1.26.0 이상을 사용해야 합니다. 자세한 내용은 AWS Command Line Interface 사용 설명서AWS CLI의 설치, 업데이트, 제거를 참조하세요. AWS CLI 설치 후, 구성 작업도 수행하는 것이 좋습니다. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 aws configure를 사용한 빠른 구성을 참조하세요.

  • kubectl - Kubernetes 클러스터 작업을 위한 명령줄 도구입니다. 이 가이드에서는 버전 1.23 이상을 사용해야 합니다. 자세한 내용은 Amazon EKS 사용 설명서kubectl 설치 또는 업데이트를 참조하세요.

  • eksctl - 많은 개별 태스크를 자동화하는 Amazon EKS 클러스터를 사용하기 위한 명령줄 도구입니다. 이 가이드에서는 버전 0.115.0 이상을 사용해야 합니다. 자세한 내용은 Amazon EKS 사용 설명서eksctl 설치 또는 업데이트를 참조하세요.

  • 필요한 IAM 권한 - 사용하는 IAM 보안 주체에는 Amazon EKS IAM 역할 및 서비스 연결 역할, AWS CloudFormation, VPC 및 관련 리소스를 사용할 수 있는 권한이 있어야 합니다. 자세한 내용은 IAM 사용 설명서의 Amazon Elastic Kubernetes Service에 사용되는 작업, 리소스 및 조건 키서비스 연결 역할 사용을 참조하세요. 이 가이드의 모든 단계를 동일한 사용자로 완료해야 합니다.

  • Amazon EKS 클러스터 생성 - 자세한 내용은 Amazon EKS 사용 설명서의 Amazon EKS 시작하기 - eksctl를 참조하세요.

    참고

    AWS Batch는 퍼블릭 액세스 권한이 있고 퍼블릭 인터넷에 액세스할 수 있는 API 서버 엔드포인트가 있는 Amazon EKS 클러스터만 지원합니다. 기본적으로 Amazon EKS 클러스터 API 서버 엔드포인트에는 퍼블릭 액세스 권한이 있습니다. 자세한 내용은 Amazon EKS 사용 설명서Amazon EKS 클러스터 엔드포인트 액세스 제어를 참조하세요.

    참고

    AWS Batch는 CoreDNS 또는 기타 배포 포드에 대한 관리형 노드 오케스트레이션을 제공하지 않습니다. CoreDNS가 필요한 경우 Amazon EKS 사용 설명서CoreDNS Amazon EKS 애드온 추가를 참조하세요. 또는 eksctl create cluster create를 사용하여 클러스터를 생성합니다. 클러스터에는 기본적으로 CoreDNS가 포함됩니다.

  • 권한 - Amazon EKS 리소스를 사용하는 컴퓨팅 환경을 생성하기 위해 CreateComputeEnvironment API 작업을 호출하는 사용자는 eks:DescribeCluster API 작업에 대한 권한이 필요합니다. AWS Management Console을 사용하여 Amazon EKS 리소스를 사용하는 컴퓨팅 리소스를 생성하려면 eks:DescribeClustereks:ListClusters에 대한 권한이 모두 필요합니다.

AWS Batch에 대한 Amazon EKS 클러스터 준비

필요한 단계는 다음과 같습니다.

  1. AWS Batch 작업 전용 네임스페이스 생성

    kubectl을 사용하여 새 네임스페이스를 생성합니다.

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

    출력:

    namespace/my-aws-batch-namespace created
  2. 역할 기반 액세스 제어(RBAC)를 통한 액세스 활성화

    kubectl을 사용하여 AWS Batch가 노드와 포드를 감시하도록 하는 클러스터에 대한 Kubernetes 역할을 생성하고 역할을 바인딩합니다. 이 작업은 각 EKS 클러스터마다 한 번씩 수행해야 합니다.

    참고

    RBAC 승인에 대한 자세한 내용은 Kubernetes 사용 설명서의 RBAC 승인 사용을 참조하세요.

    $ 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

    출력:

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

    포드를 관리하고 수명 주기를 관리할 AWS Batch에 대한 네임스페이스 범위 Kubernetes 역할을 생성하고 바인딩합니다. 이 작업은 각 고유 네임스페이스마다 한 번씩 수행해야 합니다.

    $ 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

    출력:

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

    Kubernetesaws-auth 구성 맵을 업데이트하여 이전 RBAC 권한을 AWS Batch 서비스 연결 역할에 매핑합니다.

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

    출력:

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

    서비스 연결 역할의 ARN에서 aws-service-role/batch.amazonaws.com/ 경로가 제거되었습니다. 이는 구성 맵에 aws-auth 문제가 있기 때문입니다. 자세한 내용은 경로가 aws-authconfigmap의 ARN에 포함될 때 경로가 있는 역할이 작동하지 않는 경우를 참조하세요.

Amazon EKS 컴퓨팅 환경 생성

AWS Batch 컴퓨팅 환경은 배치 워크로드 요구 사항을 충족하는 컴퓨팅 리소스 파라미터를 정의합니다. 관리형 컴퓨팅 환경에서는 Amazon EKS 클러스터 내 컴퓨팅 리소스(Kubernetes 노드)의 용량과 인스턴스 유형을 관리하는 데 AWS Batch가 도움이 됩니다. 이는 컴퓨팅 환경을 생성할 때 사용자가 정의한 컴퓨팅 리소스 사양을 기반으로 합니다. 사용자는 EC2 온디맨드 인스턴스 또는 EC2 스팟 인스턴스를 선택할 수 있습니다.

이제 AWSServiceRoleForBatch서비스 연결 역할이 Amazon EKS 클러스터에 액세스할 수 있으므로 AWS Batch 리소스를 생성할 수 있습니다. 먼저 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-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
참고
  • serviceRole 파라미터를 지정하지 않아야 합니다. 그러면 AWS Batch 서비스 연결 역할이 사용됩니다. Amazon EKS의 AWS Batch는 AWS Batch 서비스 연결 역할만 지원합니다.

  • Amazon EKS 컴퓨팅 환경에서는BEST_FIT_PROGRESSIVE, SPOT_CAPACITY_OPTIMIZEDSPOT_PRICE_CAPACITY_OPTIMIZED 할당 전략만 지원됩니다.

    참고

    대부분의 인스턴스에서 SPOT_CAPACITY_OPTIMIZED보다 SPOT_PRICE_CAPACITY_OPTIMIZED을 사용하는 것을 권장합니다.

  • instanceRole에 대한 내용은 Amazon EKS 사용 설명서Amazon EKS 노드 IAM 역할 생성클러스터에 대한 IAM 주체 액세스 활성화를 참조하세요. 포드 네트워킹을 사용하는 경우 Amazon EKS 사용 설명서서비스 계정에 IAM 역할을 사용하도록 Kubernetes에 Amazon VPC CNI 플러그인 구성을 참조하세요.

  • subnets 파라미터에 사용할 서브넷이 제대로 작동하도록 하는 방법은 Amazon EKS 클러스터를 생성할 때 eksctl이 생성한 Amazon EKS 관리형 노드 그룹 퍼블릭 서브넷을 사용하는 것입니다. 그렇지 않으면 이미지 가져오기를 지원하는 네트워크 경로가 있는 서브넷을 사용합니다.

  • securityGroupIds 파라미터는 Amazon EKS 클러스터와 동일한 보안 그룹을 사용할 수 있습니다. 이 명령은 클러스터의 보안 그룹 ID를 검색합니다.

    $ eks describe-cluster \ --name <cluster-name> \ --query cluster.resourcesVpcConfig.clusterSecurityGroupId
  • Amazon EKS 컴퓨팅 환경의 유지 관리는 공동 책임입니다. 자세한 내용은 Kubernetes 노드에 대한 공동 책임 단원을 참조하십시오.

중요

진행하기 전에 컴퓨팅 환경이 정상인지 확인하는 것이 중요합니다. DescribeComputeEnvironments API 작업을 사용하여 이 작업을 수행할 수 있습니다.

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

status 파라미터가 INVALID로 되어 있지 않은지 확인합니다. 그럴 경우 statusReason 파라미터에서 원인을 확인합니다. 자세한 내용은 문제 해결 AWS Batch 단원을 참조하십시오.

작업 대기열 생성 및 컴퓨팅 환경 연결

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

이 새 작업 대기열에 제출된 작업은 컴퓨팅 환경과 연결된 Amazon EKS 클러스터에 조인된 AWS Batch 관리형 노드에서 포드로 실행됩니다.

$ 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

작업 정의 생성

$ 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
참고

작업 제출

$ 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>
참고

(선택 사항) 재정의를 통한 작업 제출

이 작업은 컨테이너로 전달되는 명령을 재정의합니다.

$ 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
참고
프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.