Amazon EKS 컴퓨팅 환경 - AWS Batch

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

Amazon EKS 컴퓨팅 환경

아마존 AWS Batch EKS에서 시작하기는 EKS 컴퓨팅 환경 생성에 대한 간략한 안내서를 제공합니다. 이 섹션에서는 Amazon EKS 컴퓨팅 환경에 대한 자세한 내용을 제공합니다.

기본 AMI 선택

Amazon EKS 컴퓨팅 환경을 생성할 때는 Amazon 머신 이미지 (AMI) 를 지정하지 않아도 됩니다. AWS Batch CreateComputeEnvironment요청에 지정된 Kubernetes 버전 및 인스턴스 유형을 기반으로 Amazon EKS에 최적화된 AMI를 선택합니다. 일반적으로 기본 AMI를 선택하는 것이 좋습니다. Amazon EKS에 최적화된 AMI에 대한 자세한 내용은 Amazon EKS 사용자 설명서Amazon EKS에 최적화된 Amazon Linux AMI를 참조하세요.

다음 명령을 실행하여 Amazon EKS 컴퓨팅 환경에 대해 어떤 AMI 유형이 AWS Batch 선택되었는지 확인합니다. 다음 예는 비 GPU 인스턴스 유형입니다.

# compute CE example: indicates Batch has chosen the AL2 x86 or ARM EKS 1.29 AMI, depending on instance types $ aws batch describe-compute-environments --compute-environments My-Eks-CE1 \ | jq '.computeEnvironments[].computeResources.ec2Configuration' [ { "imageType": "EKS_AL2", "imageKubernetesVersion": "1.29" } ]

다음 예는 GPU 인스턴스 유형입니다.

# GPU CE example: indicates Batch has choosen the AL2 x86 EKS Accelerated 1.29 AMI $ aws batch describe-compute-environments --compute-environments My-Eks-GPU-CE \ | jq '.computeEnvironments[].computeResources.ec2Configuration' [ { "imageType": "EKS_AL2_NVIDIA", "imageKubernetesVersion": "1.29" } ]

지원되는 Kubernetes 버전

AWS Batch Amazon에서 EKS는 현재 다음 Kubernetes 버전을 지원합니다.

  • 1.29

  • 1.28

  • 1.27

  • 1.26

  • 1.25

  • 1.24

  • 1.23

CreateComputeEnvironment API 작업 또는 UpdateComputeEnvironment API 작업을 사용하여 컴퓨팅 환경을 생성하거나 업데이트할 때 다음과 유사한 오류 메시지가 표시될 수 있습니다. EC2Configuration에서 지원되지 않는 Kubernetes 버전을 지정하는 경우 이 문제가 발생합니다.

At least one imageKubernetesVersion in EC2Configuration is not supported.

이 문제를 해결하려면 컴퓨팅 환경을 삭제하고 지원되는 Kubernetes 버전으로 다시 생성하세요.

Amazon EKS 클러스터에서 마이너 버전 업그레이드를 수행할 수 있습니다. 예를 들어 마이너 버전이 지원되지 않는 경우에도 클러스터를 1.xx에서 1.yy로 업그레이드할 수 있습니다.

하지만 메이저 버전 업데이트 후에는 컴퓨팅 환경 상태가 INVALID로 변경될 수 있습니다. 메이저 버전을 1.xx에서 2.yy로 업그레이드하는 경우를 예로 들 수 있습니다. 에서 메이저 버전을 지원하지 않는 경우 다음과 유사한 오류 메시지가 표시됩니다. AWS Batch

reason=CLIENT_ERROR - ... EKS Cluster version [2.yy] is unsupported

컴퓨팅 환경 Kubernetes 버전 업데이트

를 사용하면 Amazon EKS 클러스터 업그레이드를 지원하도록 컴퓨팅 환경 Kubernetes 버전을 업데이트할 수 있습니다. AWS Batch컴퓨팅 환경 Kubernetes 버전은 작업을 실행하기 위해 AWS Batch 시작하는 Kubernetes 노드의 Amazon EKS AMI 버전입니다. Amazon EKS 클러스터의 컨트롤 플레인 Kubernetes 버전을 업데이트하기 이전 또는 이후에 Amazon EKS 노드에서 버전 업그레이드를 수행할 수 있습니다. 컨트롤 플레인을 업그레이드한 후에는 노드를 업데이트하는 것이 좋습니다. 자세한 내용은 Amazon EKS 사용자 설명서Amazon EKS 클러스터 Kubernetes 버전 업데이트를 참조하세요.

컴퓨팅 환경의 Kubernetes 버전을 업그레이드하려면 UpdateComputeEnvironment API 작업을 사용합니다.

$ aws batch update-compute-environment \ --compute-environment <compute-environment-name> \ --compute-resources \ 'ec2Configuration=[{imageType=EKS_AL2,imageKubernetesVersion=1.23}]'

Kubernetes 노드에 대한 공동 책임

컴퓨팅 환경의 유지 관리는 공동의 책임입니다.

  • AWS Batch 노드, 라벨, 테인트, 네임스페이스, 시작 템플릿 또는 Auto Scaling 그룹을 변경하거나 제거하지 마세요. 관리형 노드에는 테인트를 추가하지 마세요. AWS Batch 이러한 변경을 수행하면 컴퓨팅 환경이 지원되지 없으며 유휴 인스턴스를 비롯한 장애가 발생합니다.

  • 파드를 AWS Batch 관리형 노드로 타겟팅하지 마세요. 포드의 대상을 관리형 노드로 설정하면 규모 조정이 중단되고 작업 대기열이 멈추는 현상이 발생합니다. 자체 관리형 노드 또는 관리형 노드 그룹에서 사용하지 AWS Batch 않는 워크로드를 실행하세요. 자세한 내용은 Amazon EKS 사용자 설명서관리형 노드 그룹을 참조하세요.

  • a가 AWS Batch 관리형 노드에서 DaemonSet 실행되도록 타겟팅할 수 있습니다. 자세한 설명은 AWS Batch 관리형 노드에서 실행 DaemonSet 섹션을 참조하세요.

AWS Batch 컴퓨팅 환경 AMI를 자동으로 업데이트하지 않습니다. 업데이트하는 것은 사용자의 책임입니다. AMI를 최신 AMI 버전으로 업그레이드하려면 다음 명령을 실행합니다.

$ aws batch update-compute-environment \ --compute-environment <compute-environment-name> \ --compute-resources 'updateToLatestImageVersion=true'

AWS Batch Kubernetes버전을 자동으로 업그레이드하지 않습니다. 다음 명령을 실행하여 컴퓨터 환경의 Kubernetes 버전을 1.23으로 업데이트합니다.

$ aws batch update-compute-environment \ --compute-environment <compute-environment-name> \ --compute-resources \ 'ec2Configuration=[{imageType=EKS_AL2,imageKubernetesVersion=1.23}]'

최신 AMI 또는 Kubernetes 버전으로 업데이트하는 경우 작업이 업데이트될 때 작업을 종료할지 여부(terminateJobsOnUpdate)와 실행 중인 작업 실행이 완료되지 않은 경우 인스턴스가 교체될 때까지 기다릴 시간을 지정할 수 있습니다(jobExecutionTimeoutMinutes). 자세한 내용은 컴퓨팅 환경 업데이트 섹션 및 UpdateComputeEnvironment API 작업에 설정된 인프라 업데이트 정책(UpdatePolicy)을 참조하세요.

AWS Batch 관리형 노드에서 실행 DaemonSet

AWS Batch AWS Batch 관리 Kubernetes 노드에 테인트를 설정합니다. 다음을 사용하여 a가 AWS Batch 관리 노드에서 DaemonSet 실행되도록 타겟팅할 수 있습니다tolerations.

tolerations: - key: "batch.amazonaws.com/batch-node" operator: "Exists"

이 작업을 수행하는 또 다른 방법은 다음 tolerations를 사용하는 것입니다.

tolerations: - key: "batch.amazonaws.com/batch-node" operator: "Exists" effect: "NoSchedule" - key: "batch.amazonaws.com/batch-node" operator: "Exists" effect: "NoExecute"

시작 템플릿 사용자 지정

AWS Batch Amazon에서 EKS는 시작 템플릿을 지원합니다. 시작 템플릿으로 수행할 수 있는 작업에는 제약이 있습니다.

중요

AWS Batch 를 실행합니다/etc/eks/bootstrap.sh. 시작 템플릿이나 cloud-init user-data 스크립트에서 /etc/eks/bootstrap.sh를 실행하지 않습니다. --kubelet-extra-args 파라미터 외에 다른 파라미터를 bootstrap.sh로 추가할 수 있습니다. 이렇게 하려면 /etc/aws-batch/batch.config 파일에 AWS_BATCH_KUBELET_EXTRA_ARGS 변수를 설정합니다. 자세한 내용은 다음 예제를 참조하세요.

참고

를 호출한 후 시작 CreateComputeEnvironment템플릿이 변경된 경우, 를 호출하여 교체할 시작 템플릿의 버전을 UpdateComputeEnvironment평가해야 합니다.

추가 kubelet 인수 추가

AWS Batch kubelet명령에 추가 인수 추가를 지원합니다. 지원되는 파라미터 목록은 Kubernetes 설명서kubelet 섹션을 참조하세요. 다음 예제에서는 --node-labels mylabel=helloworldkubelet 명령줄에 추가됩니다.

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash mkdir -p /etc/aws-batch echo AWS_BATCH_KUBELET_EXTRA_ARGS=\"--node-labels mylabel=helloworld\" >> /etc/aws-batch/batch.config --==MYBOUNDARY==--

컨테이너 런타임 구성

AWS Batch CONTAINER_RUNTIME 환경 변수를 사용하여 관리형 노드에서 컨테이너 런타임을 구성할 수 있습니다. 다음 예제에서는 컨테이너 런타임을 containerd 실행 시점의 bootstrap.sh로 설정합니다. 자세한 내용은 Kubernetes 설명서containerd 섹션을 참조하세요.

참고

CONTAINER_RUNTIME 환경 변수는 bootstrap.sh--container-runtime 옵션과 동일합니다. 자세한 내용은 Kubernetes 설명서Options 섹션을 참조하세요.

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash mkdir -p /etc/aws-batch echo CONTAINER_RUNTIME=containerd >> /etc/aws-batch/batch.config --==MYBOUNDARY==--

Amazon EFS 볼륨 마운트하기

시작 템플릿을 사용하여 볼륨을 노드에 마운트할 수 있습니다. 다음 예제에서는 cloud-config packagesruncmd 설정이 사용됩니다. 자세한 내용은 cloud-init 설명서Cloud 구성 예제를 참조하세요.

MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-efs-utils runcmd: - file_system_id_01=fs-abcdef123 - efs_directory=/mnt/efs - mkdir -p ${efs_directory} - echo "${file_system_id_01}:/ ${efs_directory} efs _netdev,noresvport,tls,iam 0 0" >> /etc/fstab - mount -t efs -o tls ${file_system_id_01}:/ ${efs_directory} --==MYBOUNDARY==--

이 볼륨을 작업에 사용하려면 EKSProperties 매개 변수에 볼륨을 추가해야 합니다. RegisterJobDefinition 다음 예제는 작업 정의의 많은 부분입니다.

{ "jobDefinitionName": "MyJobOnEks_EFS", "type": "container", "eksProperties": { "podProperties": { "containers": [ { "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": ["ls", "-la", "/efs"], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } }, "volumeMounts": [ { "name": "efs-volume", "mountPath": "/efs" } ] } ], "volumes": [ { "name": "efs-volume", "hostPath": { "path": "/mnt/efs" } } ] } } }

노드에서 Amazon EFS 볼륨은 /mnt/efs 디렉터리에 마운트됩니다. Amazon EKS 작업을 위한 컨테이너의 볼륨은 /efs 디렉터리에 마운트됩니다.

IPv6 지원

AWS Batch IPv6 주소가 있는 Amazon EKS 클러스터를 지원합니다. 지원을 위한 사용자 지정은 필요하지 않습니다. AWS Batch 하지만 시작하기 전에 Amazon EKS 사용자 설명서포드 및 서비스에 IPv6 주소 할당에 설명된 고려 사항 및 조건을 검토하는 것이 좋습니다.