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는 v1.5가 제거하는 v1alpha1 API 버전 아래에 일부 Kueue 사용자 지정 리소스 정의(CRDs)를 저장하기 때문에 v1.3.xaws eks update-addon에서 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 레코드를 변경하지 않습니다.

새 워크로드를 제출할 필요가 없는 경우이 작업을 실행합니다. 포드 실행은 일반적으로 중단되지 않지만 마이그레이션 중에 활성 워크로드에 의존하지 않는 것이 좋습니다. 절차가 완료될 때까지 새 워크로드를 예약할 수 없습니다. 한 번에 하나의 클러스터에 대해를 실행합니다.

사전 조건

시작하기 전에 다음 항목이 준비되었는지 확인합니다.

  • 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에서 이전 저장 버전을 지웁니다.

    이렇게 하면 v1.5 CRDs 수 status.storedVersions 있도록에서 v1alpha1 (또는 v1beta1) 항목이 제거됩니다. 객체는 백업에서 안전하며 이후 단계에서 복원됩니다.

    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 확인합니다.