

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

# Amazon EKS의 AWS Batch에 대한 메모리 및 vCPU 고려 사항
<a name="memory-cpu-batch-eks"></a>

Amazon EKS의 AWS Batch에서는 컨테이너에 사용할 수 있는 리소스를 지정할 수 있습니다. 예를 들어 vCPU 및 메모리 리소스에 대해 `requests` 또는 `limits` 값을 지정할 수 있습니다.

vCPU 리소스를 지정하기 위한 제약 조건은 다음과 같습니다.
+ vCPU `requests` 또는 `limits` 중 하나는 지정해야 합니다.
+ vCPU 유닛 1개는 물리적 코어 또는 가상 코어 1개와 동일합니다.
+ vCPU 값은 정수로 입력하거나 0.25씩 증분하여 입력해야 합니다.
+ 유효한 vCPU 값 중 가장 작은 값은 0.25입니다.
+ 두 값이 지정되면, `requests` 값은 `limits` 값에 대해 지정된 값과 같거나 이보다 작아야 합니다. 이렇게 하면 소프트 vCPU 구성과 하드 vCPU 구성을 모두 구성할 수 있습니다.
+ vCPU 값은 milliCPU 형식으로 지정할 수 없습니다. 예를 들어, `100m`(은)는 유효한 형식이 아닙니다.
+ AWS Batch(은)는 `requests` 값을 조정 결정에 사용합니다. `requests` 값이 지정되지 않은 경우 `limits` 값이 `requests` 값에 복사됩니다.

다음은 메모리 리소스를 지정하기 위한 제약 조건입니다.
+ 메모리 `requests` 또는 `limits` 중 하나는 지정해야 합니다.
+ 메모리 값은 mebibytes(MiBs)이어야 합니다.
+ 둘 다 지정된 경우 `requests` 값은 `limits` 값과 같아야 합니다.
+ AWS Batch(은)는 `requests` 값을 조정 결정에 사용합니다. `requests` 값이 지정되지 않은 경우 `limits` 값이 `requests` 값에 복사됩니다.

다음은 GPU 리소스를 지정하기 위한 제약 조건입니다.
+ 둘 다 지정된 경우 `requests` 값은 `limits` 값과 같아야 합니다.
+ AWS Batch(은)는 `requests` 값을 조정 결정에 사용합니다. `requests` 값이 지정되지 않은 경우 `limits` 값이 `requests` 값에 복사됩니다.

## 예제: 작업 정의
<a name="memory-cpu-batch-eks-example-job-definition"></a>

Amazon EKS 작업 정의의 AWS Batch(은)는 소프트 vCPU 공유를 구성합니다. 이렇게 하면 Amazon EKS의 AWS Batch(이)가 해당 인스턴스 유형의 vCPU 용량을 모두 사용할 수 있습니다. 하지만 실행 중인 다른 작업이 있는 경우 작업에는 최대 `2`개의 vCPU가 할당됩니다. 메모리는 2GB로 제한됩니다.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "requests": {
                           "cpu": "2",
                           "memory": "2048Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

다음 Amazon EKS의 AWS Batch 작업 정의는 `request` 값이 `1`이고 최대 `4`개의 vCPU를 작업에 할당합니다.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "requests": {
                           "cpu": "1"
                       },
                       "limits": {
                           "cpu": "4",
                           "memory": "2048Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

다음 Amazon EKS의 AWS Batch 작업 정의는 vCPU `limits` 값을 `1`로, 메모리 `limits` 값을 1GB로 설정합니다.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "limits": {
                           "cpu": "1",
                           "memory": "1024Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

AWS Batch(이)가 Amazon EKS의 AWS Batch 작업을 Amazon EKS 포드로 변환하면 AWS Batch가 `limits` 값을 `requests` 값에 복사합니다. 이는 `requests` 값이 지정되지 않은 경우입니다. 위의 예제 작업 정의를 제출하면 포드 `spec`(은)는 다음과 같습니다.

```
apiVersion: v1
kind: Pod
...
spec:
  ...
  containers:
    - command:
        - sleep
        - 60
      image: public.ecr.aws/amazonlinux/amazonlinux:2
      resources:
        limits:
          cpu: 1
          memory: 1024Mi
        requests:
          cpu: 1
          memory: 1024Mi
      ...
```

## 노드 CPU 및 메모리 예약
<a name="memory-cpu-batch-eks-node-cpu-memory-reservations"></a>

AWS Batch(은)는 vCPU 및 메모리 예약에 `bootstrap.sh` 파일의 기본 로직을 사용합니다. `bootstrap.sh` 파일에 대한 자세한 내용은 [bootstrap.sh](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/al2/runtime/bootstrap.sh)을 참조하세요. vCPU와 메모리 리소스의 크기를 조정할 때는 다음 예제를 고려하세요.

**참고**  
실행 중인 인스턴스가 없는 경우 vCPU 및 메모리 예약은 초기에 AWS Batch 조정 로직과 의사 결정에 영향을 미칠 수 있습니다. 인스턴스가 실행된 후 AWS Batch(은)는 초기 할당량을 조정합니다.

## 예제: 노드 CPU 예약
<a name="memory-cpu-batch-eks-node-cpu-reservations"></a>

CPU 예약 값은 인스턴스에 사용할 수 있는 총 vCPU 수를 사용하여 밀리코어 단위로 계산됩니다.


| vCPU 번호 | 예약 비율(%) | 
| --- | --- | 
| 1 | 6% | 
| 2 | 1% | 
| 3\$14 | 0.5% | 
| 4 이상 | 0.25% | 

위 값을 사용하면 다음과 같습니다.
+ vCPU가 2개 있는 `c5.large` 인스턴스의 CPU 예약 값은 70m입니다. 이 값은 다음과 같은 방식으로 계산됩니다. *(1\$160)\$1(1\$110)=70m*.
+ vCPU가 96개 있는 `c5.24xlarge` 인스턴스의 CPU 예약 값은 310m입니다. 이는 다음과 같은 방식으로 계산됩니다. (1\$160)\$1(1\$110)\$1(2\$15)\$1(92\$12.5)=310m.

이 예제에서는 `c5.large` 인스턴스에서 작업을 실행하는 데 사용할 수 있는 밀리코어 vCPU 유닛이 1,930개(2,000\$170개로 계산)입니다. 작업에 `2` (2\$11000 m) vCPU 유닛이 필요한데, 작업이 단일 `c5.large` 인스턴스에 맞지 않다고 가정하겠습니다. 하지만 `1.75` vCPU 유닛이 필요한 작업에는 적합합니다.

## 예제: 노드 메모리 예약
<a name="memory-cpu-batch-eks-node-memory-reservations"></a>

메모리 예약 값은 다음을 사용하여 메비바이트 단위로 계산됩니다.
+ 인스턴스 용량(MiB) 예를 들어 8GB 인스턴스는 7,748MiB입니다.
+ `kubeReserved` 값 `kubeReserved` 값은 시스템 대몬(daemon)용으로 예약할 메모리 양입니다. `kubeReserved` 값은 다음과 같은 방식으로 계산됩니다. *((11\$1인스턴스 유형에서 지원하는 최대 포드 수)\$1255)*. 각 인스턴스 유형별로 지원되는 최대 포드 수 목록은 GitHub에서 [eni-max-pods.txt](https://github.com/awslabs/amazon-eks-ami/blob/main/nodeadm/internal/kubelet/eni-max-pods.txt)를 참조하세요.
+ `HardEvictionLimit` 값 사용 가능한 메모리가 `HardEvictionLimit` 값 아래로 떨어지면 인스턴스는 포드를 제거하려고 시도합니다.

할당 가능한 메모리를 계산하는 공식은 다음과 같습니다. (*instance\$1capacity\$1in\$1MiB*)-(11\$1(*maximum\$1number\$1of\$1pods*))-255-(*`HardEvictionLimit` value.*)).

 `c5.large` 인스턴스는 최대 29개의 포드를 지원합니다. `c5.large` 값이 100MiB인 8GB `HardEvictionLimit` 인스턴스의 경우 할당 가능한 메모리는 7,074MiB입니다. 이 값은 다음과 같은 방식으로 계산됩니다. *(7748-(11\$1 29)-255-100)=7074MiB*. 이 예제에서 8,192MiB 작업은 8gibibyte(GiB) 인스턴스임에도 불구하고 이 인스턴스에 맞지 않습니다.

## DaemonSets
<a name="memory-cpu-batch-eks-reservations-daemonset-scaling"></a>

DaemonSets(을)를 사용할 때 다음 사항을 고려하세요.
+ 실행 중인 Amazon EKS의 AWS Batch 인스턴스가 없는 경우, DaemonSets가 초기에 AWS Batch 조정 로직 및 의사 결정에 영향을 미칠 수 있습니다. AWS Batch는 초기에 예상된 DaemonSets에 0.5 vCPU 유닛과 500MiB를 할당합니다. 인스턴스가 실행된 후 AWS Batch(은)는 초기 할당량을 조정합니다.
+ DaemonSet(은)는 vCPU 또는 메모리 제한을 정의하면 Amazon EKS의 AWS Batch 작업은 더 적은 리소스를 가집니다. AWS Batch 작업에 할당되는 DaemonSets의 수를 가능한 한 적게 유지하는 것이 좋습니다.