View a markdown version of this page

Mettre à niveau le module complémentaire de gouvernance des tâches - Amazon SageMaker AI

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mettre à niveau le module complémentaire de gouvernance des tâches

Utilisez cette section pour mettre à niveau le module complémentaire Amazon EKS de gouvernance des HyperPod tâches entre les versions. Chaque sous-section fournit des procédures spécifiques à la version pour mettre à niveau votre module complémentaire tout en préservant votre configuration existante.

Mise à niveau de la version 1.5 à la version 1.6

La version v1.6.0-eksbuild.1 contient Kueue v0.19.2. Vous pouvez effectuer une mise à niveau directement depuis la version 1.5 avecaws eks update-addon. Cette mise à niveau ne migre pas les versions de stockage des définitions de ressources personnalisées (CRD). Vous n'avez donc pas besoin de sauvegarder ou de recréer des objets Kueue.

Pour mettre à niveau le module complémentaire vers la version 1.6 via l'interface du module complémentaire Amazon EKS, exécutez la commande suivante. Remplacez-le region par votre région et cluster-name par le nom de votre cluster Amazon EKS.

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

Attendez que le statut soit ACTIVE :

aws eks describe-addon --region region --cluster-name cluster-name \ --addon-name amazon-sagemaker-hyperpod-taskgovernance \ --query 'addon.status' --output text
Topology-aware planification de la validation de la taille des tranches

À partir de la version 1.6 (Kueue v0.19.2), la gouvernance des tâches valide la taille de la tranche de planification tenant compte de la topologie (le nombre de modules regroupés pour le placement) lorsque vous soumettez une tâche. Si vous soumettez une tâche qui définit l'kueue.x-k8s.io/podset-slice-sizeannotation à une valeur inférieure à1, la gouvernance des tâches rejette la tâche avec une erreur telle que la suivante :

admission webhook "vjob.kb.io" denied the request: spec.template.metadata.annotations[kueue.x-k8s.io/podset-slice-size]: Invalid value: "0": must be greater than or equal to 1

Les versions précédentes ne validaient pas cette valeur. Avant de procéder à la mise à niveau, mettez à jour tous les modèles de tâches qui utilisent des tranches de planification tenant compte de la topologie pour les définir kueue.x-k8s.io/podset-slice-size sur une valeur ou une valeur supérieure. 1

Mise à niveau de la version 1.3.x vers la version 1.5 ou ultérieure

La méthode recommandée pour effectuer une mise à niveau depuis la version 1.3.x est l'option de mise à niveau de la HyperPod console SageMaker AI, qui migre automatiquement les CRD Kueue. Utilisez la procédure manuelle décrite dans cette section uniquement si vous ne pouvez pas utiliser la console. Cette procédure prend en charge la version 1.5 et les versions ultérieures en tant que version cible.

Un passage direct aws eks update-addon de la version 1.3.x à la version 1.5 ou ultérieure échoue car la version v1.3.x stocke certaines définitions de ressources personnalisées (CRD) de Kueue sous la v1alpha1 version API, qui supprime :

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

Cette procédure sauvegarde vos objets Kueue et efface l'ancienne version stockée. Il met ensuite à niveau le module complémentaire et restaure vos objets selon le nouveau schéma.

Impact des données et calendrier

Cette procédure supprime et recrée vos objets de ressources personnalisés Kueue (ClusterQueues,, LocalQueues ResourceFlavors, Topologies et objets associés). Il les sauvegarde d'abord et les restaure, de sorte qu'aucune configuration n'est perdue. Il ne supprime aucun espace de noms, ne supprime aucun CRD et ne modifie aucune SageMaker IA ComputeQuota ni ClusterSchedulerConfig aucun enregistrement.

Exécutez-le lorsqu'aucune nouvelle charge de travail n'a besoin d'être soumise. Les pods en cours d'exécution ne sont généralement pas interrompus, mais nous vous recommandons de ne pas vous fier aux charges de travail actives pendant la migration. Les nouvelles charges de travail ne peuvent pas être planifiées tant que la procédure n'est pas terminée. Exécutez sur un cluster à la fois.

Conditions préalables

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • kubectlconfiguré pour le cluster Amazon EKS cible avec un accès administrateur de cluster

  • La AWS CLI configuration pour le compte et la région du cluster

  • L’jq doit être installée.

  • Le module complémentaire est actuellement à la version 1.3.x avec le statut ou ACTIVE DEGRADED

Tout au long, region remplacez-le par votre région et cluster-name par le nom de votre cluster Amazon EKS.

Pour mettre à niveau le module complémentaire de la version 1.3.x à la version 1.5, procédez comme suit :

  1. Vérifiez la version actuelle du module complémentaire et définissez un répertoire de travail.

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

    Vérifiez que la sortie commence parv1.3.. Définissez BACKUP_DIR ensuite un chemin absolu dans un répertoire accessible en écriture et créez-le. Les étapes suivantes permettent de lire et d'écrire dans cette variable. Exécutez donc chaque étape dans la même session shell.

    export BACKUP_DIR=/absolute/path/to/backup-dir mkdir -p "$BACKUP_DIR"
  2. Sauvegardez chaque ressource personnalisée Kueue dans des fichiers locaux.

    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
    Vérifiez la sauvegarde avant de continuer

    Vérifiez que le répertoire de sauvegarde contient un fichier JSON pour chaque ressource personnalisée de la commande précédente et que le nombre d'objets dans la sortie de la commande correspond à celui de votre cluster. Ne poursuivez pas si un fichier est vide ou manquant.

  3. Supprimez les objets sauvegardés et effacez l'ancienne version stockée de chaque CRD.

    Cela supprime l'entrée v1alpha1 (ouv1beta1) status.storedVersions afin que les CRD v1.5 ou versions ultérieures puissent être installés. Les objets sont en sécurité dans votre sauvegarde et sont restaurés ultérieurement.

    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
    À propos de --all-namespaces et de --wait=false

    --all-namespacesici sélectionne les ressources personnalisées dans tous les espaces de noms à supprimer ; il ne supprime aucun espace de noms. --wait=falseévite le blocage sur les finaliseurs. La mise à jour du module complémentaire à l'étape suivante les résout.

  4. Mettez à jour le module complémentaire vers votre version cible (v1.5.0-eksbuild.1 ou version ultérieure).

    target-versionRemplacez-la par la version du module complémentaire cible, par exemple v1.5.0-eksbuild.1 ouv1.6.0-eksbuild.1.

    aws eks update-addon --region region --cluster-name cluster-name \ --addon-name amazon-sagemaker-hyperpod-taskgovernance \ --addon-version target-version --resolve-conflicts OVERWRITE

    Attendez que le statut soit ACTIVE :

    aws eks describe-addon --region region --cluster-name cluster-name \ --addon-name amazon-sagemaker-hyperpod-taskgovernance \ --query 'addon.status' --output text
  5. Attendez que la nouvelle installation soit terminée avant de procéder à la restauration.

    Ne restaurez pas immédiatement après les rapports du module complémentaireACTIVE. Attendez que le contrôleur, son webhook et les tâches de post-installation soient prêts, sinon la restauration à l'étape suivante risque de se bloquer.

    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
  6. Restaurez vos objets selon le nouveau schéma.

    Cela transforme chaque objet sauvegardé en schéma v1.5 ou version ultérieure (v1beta2) et le réapplique.

    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
  7. Vérifiez le résultat.

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

    Voici un exemple de sortie (votre résultat version correspond à celui que target-version vous avez défini à l'étape 4).

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

    Vérifiez que vos objets sont présents et qu'aucun CRD n'est toujours v1alpha1 répertorié :

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

    La storedVersions sortie ne doit contenir que v1beta2 (ou v1beta1 etv1beta2), jamaisv1alpha1. Comparez les objets restaurés avec les fichiers pour vous $BACKUP_DIR assurer que les valeurs de configuration restent inchangées.