View a markdown version of this page

タスクガバナンスアドオンのアップグレード - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

タスクガバナンスアドオンのアップグレード

このセクションを使用して、バージョン間で HyperPod タスクガバナンス Amazon EKS アドオンをアップグレードします。各サブセクションには、既存の設定を保持しながらアドオンをアップグレードするためのバージョン固有の手順が記載されています。

v1.3.x から v1.5 へのアップグレード

v1.3.x から v1.5 にアップグレードする推奨方法は、Kueue CRDs を自動的に移行する SageMaker AI HyperPod コンソールのアップグレードオプションです。このセクションの手動手順は、 コンソールを使用できない場合にのみ使用します。

v1.3.x は v1alpha1 API バージョンにいくつかの Kueue カスタムリソース定義 (CRDs) を保存するため、v1.3.x aws eks update-addonから v1.5 への直接 は失敗します。これにより、v1.5 は以下を削除します。

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

この手順では、Kueue オブジェクトをバックアップし、古いストアドバージョンをクリアします。次に、アドオンをアップグレードし、新しいスキーマでオブジェクトを復元します。

データへの影響とタイミング

この手順では、Kueue カスタムリソースオブジェクト (ClusterQueues、LocalQueues、ResourceFlavors、トポロジ、および関連オブジェクト) を削除して再作成します。最初にバックアップして復元するため、設定が失われることはありません。名前空間は削除されず、CRD も削除されず、SageMaker AI ComputeQuota または ClusterSchedulerConfig レコードも変更されません。

新しいワークロードを送信する必要がない場合は、これを実行します。実行中のポッドは通常中断されませんが、移行中はアクティブなワークロードに依存しないことをお勧めします。新しいワークロードは、手順が完了するまでスケジュールできません。一度に 1 つのクラスターに対して を実行します。

前提条件

作業を開始する前に、次の項目があることを確認します。

  • kubectl クラスター管理者アクセスを持つターゲット Amazon EKS クラスター用に設定された

  • クラスターのアカウントとリージョン用に AWS CLI 設定された

  • jq のインストール

  • アドオンは現在 v1.3.x で、ステータスは ACTIVEまたは です。 DEGRADED

全体で、region を自分のリージョンに置き換え、cluster-name を Amazon EKS クラスター名に置き換えます。

アドオンを v1.3.x から v1.5 にアップグレードするには、次の手順を実行します。

  1. 現在のアドオンバージョンを確認し、作業ディレクトリを設定します。

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

    出力が で始まることを確認しますv1.3.。次に、書き込み可能なディレクトリの絶対パスBACKUP_DIRに設定し、作成します。後のステップでは、この変数に対して読み取りと書き込みを行うため、同じシェルセッションですべてのステップを実行します。

    export BACKUP_DIR=/absolute/path/to/backup-dir mkdir -p "$BACKUP_DIR"
  2. すべての Kueue カスタムリソースをローカルファイルにバックアップします。

    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
    続行する前にバックアップを確認する

    バックアップディレクトリに前述のコマンドの各カスタムリソースの JSON ファイルが含まれ、コマンド出力のオブジェクト数がクラスターのものと一致していることを確認します。ファイルが見つからない場合や空の場合は、続行しないでください。

  3. バックアップされたオブジェクトを削除し、各 CRD から古い保存済みバージョンをクリアします。

    これにより、 から v1alpha1 (または v1beta1) エントリが削除されstatus.storedVersions、v1.5 CRDsをインストールできるようになります。オブジェクトはバックアップで安全であり、後のステップで復元されます。

    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
    --all-namespaces と --wait=false について

    --all-namespaces ここで、 は削除するすべての名前空間のカスタムリソースを選択します。名前空間は削除されません。 はファイナライザーのブロック--wait=falseを回避します。次のステップのアドオン更新によって解決されます。

  4. アドオンを 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

    ステータスが になるまで待ちますACTIVE

    aws eks describe-addon --region region --cluster-name cluster-name \ --addon-name amazon-sagemaker-hyperpod-taskgovernance \ --query 'addon.status' --output text
  5. 復元する前に、新しいインストールが確定するのを待ちます。

    アドオンが を報告した直後に復元しないでくださいACTIVE。コントローラー、そのウェブフック、インストール後のジョブの準備が完了するのを待ちます。そうしないと、次のステップの復元がハングする可能性があります。

    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. 新しいスキーマでオブジェクトを復元します。

    これにより、バックアップされた各オブジェクトが v1.5 (v1beta2) スキーマに変換され、再適用されます。

    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. 結果を確認します。

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

    出力例は次のとおりです。

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

    オブジェクトが存在し、CRD がまだ をリストしていないことを確認しますv1alpha1

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

    storedVersions 出力には v1beta2 (または v1beta1v1beta2) のみを含める必要があり、 を含めることはできませんv1alpha1。復元されたオブジェクトと のファイルを比較$BACKUP_DIRして、設定値が変更されていないことを確認します。