

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

# Amazon SageMaker HyperPod에서 사용자 지정 Kubernetes 레이블 및 테인트 구성
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints"></a>

Amazon Elastic Kubernetes Service(Amazon EKS) 오케스트레이터를 사용하는 Amazon SageMaker HyperPod 클러스터는 인스턴스 그룹 내 노드에 대한 사용자 지정 Kubernetes 레이블 및 테인트를 지원합니다. 레이블과 테인트는 포드 배치 및 리소스 사용률을 세밀하게 제어할 수 있는 Kubernetes의 기본 일정 및 조직 메커니즘입니다.

레이블은 Kubernetes 객체에 연결할 수 있는 키-값 페어로, 속성을 기반으로 리소스를 구성하고 선택할 수 있습니다. 테인트는 허용 오차와 함께 작동하며, 일치하는 허용 오차가 없는 포드를 제거함으로써 포드 스케줄링에 영향을 미치는 노드별 속성입니다. 이러한 메커니즘을 함께 사용하면 워크로드를 격리하고 하드웨어 사양에 따라 할당하며 리소스 사용률을 최적화할 수 있습니다.

## 일반 사용 사례
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-use-cases"></a>

다음은 사용자 지정 레이블과 테인트가 유용한 일반적인 시나리오입니다.
+ **고가의 인스턴스에서 시스템 포드 방지 **- GPU 인스턴스에 테인트를 적용하여 시스템 포드 및 기타 중요하지 않은 워크로드가 고가의 컴퓨팅 리소스를 소비하지 않도록 방지
+ **기존 도구와의 통합** - 조직의 확립된 인프라 패턴 및 노드 선호도 구성과 일치하는 레이블 적용

## 레이블 및 테인트 구성
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-configure"></a>

클러스터 구성의 `KubernetesConfig` 파라미터를 사용하여 인스턴스 그룹 수준에서 사용자 지정 Kubernetes 레이블 및 테인트를 구성할 수 있습니다. 레이블과 테인트는 인스턴스 그룹의 모든 노드에 적용되며 클러스터의 수명 주기 동안 유지됩니다.

`KubernetesConfig` 파라미터는 선언적입니다. 즉, 인스턴스 그룹에 대해 원하는 전체 레이블 및 테인트 상태를 지정합니다. 그런 다음 SageMaker HyperPod는 원하는 상태와 일치하도록 노드의 실제 상태를 조정합니다.
+ **레이블 또는 테인트 추가** - 유지하려는 기존 레이블 또는 테인트와 `KubernetesConfig` 함께에 새 레이블 또는 테인트를 포함합니다.
+ **레이블 또는 테인트 업데이트** - 변경하려는 레이블 또는 테인트`KubernetesConfig`의 값을 수정하고 유지하려는 다른 모든 레이블 또는 테인트를 포함합니다.
+ **레이블 또는 테인트 제거** -에서 제거하려는 레이블 또는 테인트를 생략`KubernetesConfig`하고 유지하려는 레이블 또는 테인트만 유지합니다.

### 레이블 및 테인트가 있는 클러스터 생성
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-create"></a>

새 SageMaker HyperPod 클러스터를 생성할 때 인스턴스 그룹 구성에 `KubernetesConfig` 파라미터를 포함합니다. 다음 예제에서는 사용자 지정 레이블 및 테인트로 클러스터를 생성하는 방법을 보여줍니다.

```
{
    "ClusterName": "my-cluster",
    "InstanceGroups": [{
        "InstanceGroupName": "worker-group-1",
        "InstanceType": "ml.p4d.24xlarge",
        "InstanceCount": 4,
        "LifeCycleConfig": {
            "SourceS3Uri": "s3://my-bucket/lifecycle-config.sh",
            "OnCreate": "on-create.sh"
        },
        "ExecutionRole": "arn:aws:iam::123456789012:role/HyperPodExecutionRole",
        "ThreadsPerCore": 1,
        "KubernetesConfig": { 
            "Labels": {
                "env": "prod",
                "team": "ml-training",
                "gpu-type": "a100"
            },
            "Taints": [{
                "key": "gpu",
                "value": "true",
                "effect": "NoSchedule"
            },
            {
                "key": "dedicated",
                "value": "ml-workloads",
                "effect": "NoExecute"
            }]
        }
    }],
    "VpcConfig": {
        "SecurityGroupIds": ["sg-0123456789abcdef0"],
        "Subnets": ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"]
    },
    "Orchestrator": {
        "Eks": {
            "ClusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-eks-cluster"
        }
    }
}
```

이 예시는 다음과 같이 설정되어 있습니다.
+ **레이블** - `env=prod`, 및 `team=ml-training`의 세 가지 사용자 지정 레이블이 적용됩니다. `gpu-type=a100` 
+ **테인트** - 원치 않는 포드 예약을 방지하기 위해 두 개의 테인트가 구성됨

### 기존 클러스터의 레이블 및 테인트 업데이트
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-update"></a>

`UpdateCluster` API를 사용하여 기존 클러스터의 레이블과 테인트를 수정할 수 있습니다. 다음 예제에서는 인스턴스 그룹의 `KubernetesConfig`를 업데이트하는 방법을 보여줍니다.

```
{
    "ClusterName": "my-cluster",
    "InstanceGroups": [{
        "InstanceGroupName": "worker-group-1",
        "KubernetesConfig": { 
            "Labels": {
                "env": "prod",
                "team": "ml-training",
                "gpu-type": "a100",
                "cost-center": "ml-ops"
            },
            "Taints": [{
                "key": "gpu",
                "value": "true",
                "effect": "NoSchedule"
            }]
        }
    }]
}
```

레이블과 테인트를 업데이트하면 SageMaker HyperPod는 인스턴스 그룹의 모든 노드에 변경 사항을 적용합니다. 서비스는 `DescribeCluster` API를 사용하여 모니터링할 수 있는 현재 상태에서 원하는 상태로의 전환을 관리합니다.

## 레이블 및 테인트 애플리케이션 모니터링
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-monitor"></a>

SageMaker HyperPod는 클러스터 노드에 적용되는 레이블 및 테인트의 상태를 모니터링하는 APIs를 제공합니다.

### 클러스터 수준 상태 확인
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-describe-cluster"></a>

`DescribeCluster` API를 사용하여 인스턴스 그룹 수준에서 레이블 및 테인의 현재 및 원하는 상태를 봅니다. 다음 예제에서는 응답 구조를 보여줍니다.

```
{
    "ClusterName": "my-cluster",
    "ClusterStatus": "InService",
    "InstanceGroups": [{
        "InstanceGroupName": "worker-group-1",
        "InstanceType": "ml.p4d.24xlarge",
        "CurrentInstanceCount": 4,
        "TargetInstanceCount": 4,
        "KubernetesConfig": {
            "CurrentLabels": {
                "env": "prod",
                "team": "ml-training",
                "gpu-type": "a100"
            },
            "DesiredLabels": {
                "env": "prod",
                "team": "ml-training",
                "gpu-type": "a100"
            },
            "CurrentTaints": [{
                "key": "gpu",
                "value": "true",
                "effect": "NoSchedule"
            }],
            "DesiredTaints": [{
                "key": "gpu",
                "value": "true",
                "effect": "NoSchedule"
            }]
        }
    }]
}
```

`CurrentLabels` 일치 `DesiredLabels` 및 `CurrentTaints` 일치 시 인스턴스 그룹의 `DesiredTaints`모든 노드에는 지정된 구성이 적용됩니다. 서로 다른 경우 클러스터는 여전히 변경 사항을 적용하는 중입니다.

### 개별 노드 상태 확인
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-describe-node"></a>

노드 수준 세부 정보는 `DescribeClusterNode` API를 사용하여 개별 노드의 레이블 및 테인트 구성을 확인합니다. 다음 예제에서는 응답 구조를 보여줍니다.

```
{
    "NodeDetails": { 
        "InstanceId": "i-0123456789abcdef0",
        "InstanceGroupName": "worker-group-1",
        "InstanceType": "ml.p4d.24xlarge",
        "InstanceStatus": {
            "Status": "Running",
            "Message": "Node is healthy"
        },
        "LifeCycleConfig": {
            "SourceS3Uri": "s3://my-bucket/lifecycle-config.sh",
            "OnCreate": "on-create.sh"
        },
        "LaunchTime": 1699564800.0,
        "KubernetesConfig": {
            "CurrentLabels": {
                "env": "prod",
                "team": "ml-training",
                "gpu-type": "a100"
            },
            "DesiredLabels": {
                "env": "prod",
                "team": "ml-training",
                "gpu-type": "a100"
            },
            "CurrentTaints": [{
                "key": "gpu",
                "value": "true",
                "effect": "NoSchedule"
            }],
            "DesiredTaints": [{
                "key": "gpu",
                "value": "true",
                "effect": "NoSchedule"
            }]
        }
    }
}
```

노드 수준 모니터링은 레이블 또는 테인트가 특정 노드에 올바르게 적용되지 않거나 특정 인스턴스의 구성을 확인해야 하는 경우 문제를 해결하는 데 유용합니다.

## 예약 접두사
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-reserved-prefixes"></a>

특정 접두사는 시스템용으로 예약되어 있으며 사용자 지정 레이블 또는 테인트에 사용해서는 안 됩니다. 다음 접두사가 예약되어 있습니다.
+ `kubernetes.io/` - Kubernetes 핵심 구성 요소에 대해 예약됨
+ `k8s.io/` - Kubernetes 핵심 구성 요소에 대해 예약됨
+ `sagemaker.amazonaws.com/` - SageMaker HyperPod용으로 예약됨
+ `eks.amazonaws.com/` - Amazon EKS용으로 예약됨
+ `k8s.aws/` - Amazon EKS용으로 예약됨
+ `karpenter.sh/` - Karpenter Auto Scaling용으로 예약됨

이러한 접두사가 있는 레이블과 테인트는 시스템 구성 요소에 의해 관리되며 사용자 지정 값으로 덮어쓰면 안 됩니다.