

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á.

# Configurando rótulos e manchas personalizados do Kubernetes na Amazon SageMaker HyperPod
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints"></a>

 SageMaker HyperPod Os clusters da Amazon com o orquestrador do Amazon Elastic Kubernetes Service (Amazon EKS) oferecem suporte a rótulos e contaminações personalizadas do Kubernetes para nós dentro de grupos de instâncias. Rótulos e contaminações são mecanismos fundamentais de agendamento e organização no Kubernetes que oferecem controle refinado sobre o posicionamento do pod e a utilização de recursos.

Os rótulos são pares de valores-chave que podem ser anexados aos objetos do Kubernetes, permitindo que você organize e selecione recursos com base em atributos. As manchas, trabalhando em conjunto com as tolerâncias, são propriedades específicas dos nós que influenciam o agendamento das cápsulas ao repelir as cápsulas que não têm tolerâncias correspondentes. Juntos, esses mecanismos permitem isolar cargas de trabalho, atribuí-las de acordo com as especificações de hardware e garantir a utilização ideal dos recursos.

## Casos de uso comuns
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-use-cases"></a>

Veja a seguir cenários comuns em que rótulos e tintas personalizados são benéficos:
+ **Prevenção de pods de sistema em instâncias caras** — aplique manchas em instâncias de GPU para evitar que pods de sistema e outras cargas de trabalho não críticas consumam recursos computacionais caros
+ **Integração com ferramentas existentes** - aplique rótulos que correspondam aos padrões de infraestrutura estabelecidos pela sua organização e às configurações de afinidade de nós

## Configurando rótulos e manchas
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-configure"></a>

Você pode configurar rótulos e contaminações personalizados do Kubernetes no nível do grupo de instâncias usando o `KubernetesConfig` parâmetro na configuração do cluster. Rótulos e contaminações são aplicados a todos os nós no grupo de instâncias e persistem durante todo o ciclo de vida do cluster.

O `KubernetesConfig` parâmetro é declarativo, o que significa que você especifica o estado completo desejado de rótulos e manchas para um grupo de instâncias. SageMaker HyperPod em seguida, reconcilia o estado real dos nós para corresponder ao estado desejado.
+ **Adicionar rótulos ou manchas** - Inclua os novos rótulos ou manchas `KubernetesConfig` junto com os existentes que você deseja manter
+ **Atualizando rótulos ou manchas** - Modifique os valores dos rótulos ou manchas que você deseja alterar e inclua todos os outros que deseja manter `KubernetesConfig`
+ **Removendo rótulos ou manchas** - Omita os rótulos ou manchas que você deseja remover do`KubernetesConfig`, mantendo somente aqueles que você deseja reter

### Criação de um cluster com rótulos e manchas
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-create"></a>

Ao criar um novo SageMaker HyperPod cluster, inclua o `KubernetesConfig` parâmetro na configuração do seu grupo de instâncias. O exemplo a seguir mostra como criar um cluster com rótulos e manchas personalizados:

```
{
    "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"}}
        }
    }
}
```

Neste exemplo:
+ **Etiquetas** - Três etiquetas personalizadas são aplicadas:`env=prod`,`team=ml-training`, e `gpu-type=a100`
+ **Contaminações** - Duas impurezas são configuradas para evitar o agendamento indesejado de pods

### Atualização de rótulos e manchas em um cluster existente
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-update"></a>

Você pode modificar rótulos e manchas em um cluster existente usando a `UpdateCluster` API. O exemplo a seguir mostra como atualizar o `KubernetesConfig` para um grupo de instâncias:

```
{
    "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"
            }]
        }
    }]
}
```

Quando você atualiza rótulos e manchas, SageMaker HyperPod aplica as alterações a todos os nós no grupo de instâncias. O serviço gerencia a transição do estado atual para o desejado, que você pode monitorar usando a `DescribeCluster` API.

## Rótulo de monitoramento e aplicação de manchas
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-monitor"></a>

SageMaker HyperPod fornece APIs para monitorar o status de rótulos e contaminações à medida que são aplicados aos nós do cluster.

### Verificando o status no nível do cluster
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-describe-cluster"></a>

Use a `DescribeCluster` API para visualizar os estados atuais e desejados de rótulos e contaminações no nível do grupo de instâncias. O exemplo a seguir mostra a estrutura da resposta:

```
{
    "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"
            }]
        }
    }]
}
```

Quando as instâncias `CurrentLabels` `CurrentTaints` combinam `DesiredLabels` e coincidem`DesiredTaints`, todos os nós no grupo de instâncias têm a configuração especificada aplicada. Se forem diferentes, o cluster ainda está aplicando as alterações.

### Verificando o status individual do nó
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-describe-node"></a>

Para obter detalhes em nível de nó, use a `DescribeClusterNode` API para verificar a configuração de rótulos e manchas de nós individuais. O exemplo a seguir mostra a estrutura da resposta:

```
{
    "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"
            }]
        }
    }
}
```

Node-level o monitoramento é útil para solucionar problemas quando rótulos ou contaminações não estão sendo aplicados corretamente a nós específicos ou quando você precisa verificar a configuração de uma instância específica.

## Prefixos reservados
<a name="sagemaker-hyperpod-eks-custom-labels-and-taints-reserved-prefixes"></a>

Alguns prefixos são reservados para uso do sistema e não devem ser usados para rótulos ou manchas personalizadas. Os seguintes prefixos são reservados:
+ `kubernetes.io/`- Reservado para os principais componentes do Kubernetes
+ `k8s.io/`- Reservado para os principais componentes do Kubernetes
+ `sagemaker.amazonaws.com/`- Reservado para SageMaker HyperPod
+ `eks.amazonaws.com/`- Reservado para Amazon EKS
+ `k8s.aws/`- Reservado para Amazon EKS
+ `karpenter.sh/`- Reservado para escalonamento automático do Karpenter

Rótulos e manchas com esses prefixos são gerenciados pelos componentes do sistema e não devem ser substituídos por valores personalizados.