

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

# Atualize o complemento de governança de tarefas
<a name="sagemaker-hyperpod-eks-operate-console-ui-governance-upgrade"></a>

Use esta seção para atualizar o complemento Amazon EKS de governança de HyperPod tarefas entre as versões. Cada subseção fornece procedimentos específicos da versão para atualizar seu complemento e, ao mesmo tempo, preservar sua configuração existente.

**Topics**
+ [Atualize da v1.3.x para a v1.5](#hp-eks-task-governance-upgrade-v13-to-v15)

## Atualize da v1.3.x para a v1.5
<a name="hp-eks-task-governance-upgrade-v13-to-v15"></a>

A forma recomendada de atualizar da v1.3.x para a v1.5 é a opção de atualização no HyperPod console SageMaker AI, que migra os CRDs Kueue automaticamente. Use o procedimento manual nesta seção somente se você não puder usar o console.

Um direto `aws eks update-addon` da v1.3.x para a v1.5 falha porque a v1.3.x armazena algumas definições de recursos personalizados (CRDs) do Kueue na versão da API, que a v1.5 remove: `v1alpha1`

```
CustomResourceDefinition.apiextensions.k8s.io "cohorts.kueue.x-k8s.io" is invalid:
status.storedVersions[0]: Invalid value: "v1alpha1": missing from spec.versions
```

Esse procedimento faz backup de seus objetos Kueue e limpa a versão antiga armazenada. Em seguida, ele atualiza o complemento e restaura seus objetos sob o novo esquema.

**Impacto e cronograma dos dados**  
Esse procedimento exclui e recria seus objetos de recursos personalizados do Kueue (ClusterQueues,, LocalQueues ResourceFlavors, Topologias e objetos relacionados). Ele faz o backup deles primeiro e os restaura, para que nenhuma configuração seja perdida. Ele não exclui nenhum namespace, não exclui nenhum CRD e não altera nenhuma SageMaker IA ComputeQuota ou registro. ClusterSchedulerConfig   
Execute isso quando nenhuma carga de trabalho nova precisar ser enviada. A execução de pods geralmente não é interrompida, mas recomendamos não depender de cargas de trabalho ativas durante a migração. Novas cargas de trabalho não podem ser agendadas até que o procedimento seja concluído. Execute em um cluster por vez.

### Pré-requisitos
<a name="hp-eks-task-governance-upgrade-v13-to-v15-prerequisites"></a>

Antes de começar, você deve ter o seguinte:
+ `kubectl`configurado para o cluster Amazon EKS de destino com acesso de administrador de cluster
+ O AWS CLI configurado para a conta e a região do cluster
+ `jq` instalada
+ O complemento está atualmente na v1.3.x com status ou `ACTIVE` `DEGRADED`

Por toda parte, {{region}} substitua por sua região e {{cluster-name}} pelo nome do seu cluster Amazon EKS.

Para atualizar o complemento de v1.3.x para v1.5, conclua as seguintes etapas:

1. **Confirme a versão atual do complemento e defina um diretório de trabalho. **

   ```
   aws eks describe-addon --region {{region}} --cluster-name {{cluster-name}} \
     --addon-name amazon-sagemaker-hyperpod-taskgovernance \
     --query 'addon.addonVersion' --output text
   ```

   Confirme se a saída começa com`v1.3.`. Em seguida, `BACKUP_DIR` defina como um caminho absoluto em um diretório gravável e crie-o. As etapas posteriores são lidas e gravadas nessa variável, portanto, execute todas as etapas na mesma sessão do shell.

   ```
   export BACKUP_DIR={{/absolute/path/to/backup-dir}}
   mkdir -p "$BACKUP_DIR"
   ```

1. **Faça backup de todos os recursos personalizados do Kueue em arquivos locais. **

   ```
   for crd in admissionchecks clusterqueues cohorts localqueues multikueueclusters \
              multikueueconfigs provisioningrequestconfigs resourceflavors topologies \
              workloadpriorityclasses workloads; do
     kubectl get "${crd}.kueue.x-k8s.io" --all-namespaces -o json \
       > "$BACKUP_DIR/${crd}.json" 2>/dev/null
     echo "${crd}: $(jq '.items | length' "$BACKUP_DIR/${crd}.json" 2>/dev/null || echo 0)"
   done
   ```
**Verifique o backup antes de continuar**  
Confirme se o diretório de backup contém um arquivo JSON para cada recurso personalizado no comando anterior e se as contagens de objetos na saída do comando correspondem às do cluster. Não prossiga se algum arquivo estiver ausente ou vazio.

1. **Exclua os objetos de backup e limpe a versão antiga armazenada de cada CRD. **

   Isso remove a entrada `v1alpha1` (ou`v1beta1`) `status.storedVersions` para que os CRDs v1.5 possam ser instalados. Os objetos estão seguros em seu backup e são restaurados em uma etapa posterior.

   ```
   for crd in admissionchecks clusterqueues cohorts localqueues multikueueclusters \
              multikueueconfigs provisioningrequestconfigs resourceflavors topologies \
              workloadpriorityclasses workloads; do
     kubectl get crd "${crd}.kueue.x-k8s.io" >/dev/null 2>&1 || continue
     kubectl delete "${crd}.kueue.x-k8s.io" --all --all-namespaces \
       --ignore-not-found=true --wait=false --request-timeout=30s
     kubectl patch crd "${crd}.kueue.x-k8s.io" --subresource=status --type=merge \
       --request-timeout=30s -p '{"status":{"storedVersions":["v1beta2"]}}'
   done
   ```
**Sobre --all-namespaces e --wait=false**  
`--all-namespaces`aqui seleciona recursos personalizados em todos os namespaces para excluir; ele não exclui nenhum namespace. `--wait=false`evita o bloqueio nos finalizadores. A atualização do complemento na próxima etapa os resolve.

1. **Atualize o complemento para a v1.5. **

   ```
   aws eks update-addon --region {{region}} --cluster-name {{cluster-name}} \
     --addon-name amazon-sagemaker-hyperpod-taskgovernance \
     --addon-version v1.5.0-eksbuild.1 --resolve-conflicts OVERWRITE
   ```

   Espere até que o status seja`ACTIVE`:

   ```
   aws eks describe-addon --region {{region}} --cluster-name {{cluster-name}} \
     --addon-name amazon-sagemaker-hyperpod-taskgovernance \
     --query 'addon.status' --output text
   ```

1. **Aguarde até que a nova instalação seja resolvida antes de restaurar. **

   Não restaure imediatamente após os relatórios `ACTIVE` complementares. Aguarde até que o controlador, seu webhook e os trabalhos de pós-instalação estejam prontos, ou a restauração na próxima etapa poderá ser interrompida.

   ```
   kubectl rollout status deploy/kueue-controller-manager -n kueue-system --timeout=300s
   ```

   ```
   until [ -n "$(kubectl get endpoints -n kueue-system kueue-webhook-service \
                 -o jsonpath='{.subsets[*].addresses[*].ip}' 2>/dev/null)" ]; do
     echo "waiting for kueue webhook endpoint..."; sleep 5
   done
   ```

   ```
   kubectl wait --for=condition=complete job -l app.kubernetes.io/name=kueue \
     -n kueue-system --timeout=180s || true
   ```

1. **Restaure seus objetos sob o novo esquema. **

   Isso transforma cada objeto de backup no esquema v1.5 (`v1beta2`) e o reaplica.

   ```
   transform() {
     jq '
       .apiVersion = "kueue.x-k8s.io/v1beta2"
       | del(.status)
       | del(.metadata.resourceVersion, .metadata.uid, .metadata.creationTimestamp,
             .metadata.generation, .metadata.managedFields, .metadata.selfLink)
       | del(.metadata.annotations."kubectl.kubernetes.io/last-applied-configuration")
       | if .kind == "Cohort" and (.spec.parent != null)
           then .spec.parentName = (.spec.parentName // .spec.parent) | del(.spec.parent) else . end
       | if .kind == "ClusterQueue" and (.spec.cohort != null)
           then .spec.cohortName = (.spec.cohortName // .spec.cohort) | del(.spec.cohort) else . end
       | if .kind == "ClusterQueue" then del(.spec.admissionChecks) else . end
       | if .kind == "AdmissionCheck" then del(.spec.retryDelayMinutes) else . end
     '
   }
   
   for crd in resourceflavors topologies workloadpriorityclasses admissionchecks cohorts \
              provisioningrequestconfigs multikueueclusters multikueueconfigs \
              clusterqueues localqueues workloads; do
     f="$BACKUP_DIR/${crd}.json"
     [ -s "$f" ] || continue
     count=$(jq '.items | length' "$f")
     for (( i=0; i<count; i++ )); do
       obj=$(jq -c ".items[$i]" "$f" | transform)
       name=$(printf '%s' "$obj" | jq -r '.kind + "/" + .metadata.name')
       if printf '%s' "$obj" | kubectl apply --request-timeout=30s -f - >/dev/null 2>&1; then
         echo "applied $name"
       else
         echo "check $name (may already be recreated by the add-on)"
       fi
     done
   done
   ```

1. **Verifique o resultado. **

   ```
   aws eks describe-addon --region {{region}} --cluster-name {{cluster-name}} \
     --addon-name amazon-sagemaker-hyperpod-taskgovernance \
     --query 'addon.{version:addonVersion,status:status}'
   ```

   Veja abaixo um exemplo de saída.

   ```
   {
       "version": "v1.5.0-eksbuild.1",
       "status": "ACTIVE"
   }
   ```

   Confirme se seus objetos estão presentes e se nenhum CRD ainda está `v1alpha1` listado:

   ```
   kubectl get clusterqueues
   kubectl get localqueues --all-namespaces
   kubectl get crd clusterqueues.kueue.x-k8s.io -o jsonpath='{.status.storedVersions}'
   ```

   A `storedVersions` saída deve conter somente `v1beta2` (ou `v1beta1` e`v1beta2`), nunca`v1alpha1`. Compare os objetos restaurados com os arquivos em `$BACKUP_DIR` para confirmar que seus valores de configuração permanecem inalterados.