status=$(kubectl get dynamographdeployment "$DEPLOYMENT_NAME"-n"$NAMESPACE"-ojsonpath='{.status.state}')
status=$(kubectl get dynamographdeployment "$DEPLOYMENT_NAME"-n"$NAMESPACE"-ojsonpath='{.status.state}')
if["$status"="successful"];then
if["$status"="successful"];then
# Check if frontend pod is running
# Note: operator automatically prefixes k8s namespace to dynamo-namespace
if kubectl get pods -n"$NAMESPACE"-l"nvidia.com/dynamo-component-type=frontend,nvidia.com/dynamo-namespace=${NAMESPACE}-vllm-disagg-planner"--field-selector=status.phase=Running | grep-q .;then
if kubectl get pods -n"$NAMESPACE"-l"nvidia.com/dynamo-component-type=frontend,nvidia.com/dynamo-namespace=${NAMESPACE}-vllm-disagg-planner"--field-selector=status.phase=Running | grep-q .;then
log_success "Existing deployment is ready"
log_success "Existing deployment is ready"
return 0
return 0
else
fi
log_warning "Existing deployment pods are not ready, will redeploy"
log_warning "Existing deployment pods are not ready, will redeploy"
return 1
return 1
fi
fi
else
log_warning "Existing deployment is not ready (status: $status), will redeploy"
log_warning "Existing deployment is not ready (status: $status), will redeploy"
return 1
return 1
fi
fi
else
log_info "No existing deployment found"
log_info "No existing deployment found"
return 1
return 1
fi
}
}
# Deploy the planner
deploy_planner(){
deploy_planner(){
log_info "Deploying SLA planner..."
log_info "Deploying SLA planner..."
...
@@ -118,55 +112,28 @@ deploy_planner() {
...
@@ -118,55 +112,28 @@ deploy_planner() {
exit 1
exit 1
fi
fi
# Apply the deployment
kubectl apply -f"$YAML_FILE"-n"$NAMESPACE"
if kubectl apply -f"$YAML_FILE"-n"$NAMESPACE";then
log_success "Deployment applied successfully"
log_success "Deployment applied successfully"
else
log_error "Failed to apply deployment"
exit 1
fi
log_info "Waiting for DynamoGraphDeployment to be processed..."
log_info "Waiting for DynamoGraphDeployment to be processed..."
if kubectl wait--for=condition=Ready dynamographdeployment/"$DEPLOYMENT_NAME"-n"$NAMESPACE"--timeout=600s;then
log_error "DynamoGraphDeployment failed to become ready within timeout"
exit 1
fi
log_info "Waiting for pods to be running (this may take several minutes for image pulls)..."
log_info "Waiting for frontend pod..."
log_info "Waiting for frontend pod..."
# Note: operator automatically prefixes k8s namespace to dynamo-namespace
kubectl wait--for=condition=Ready pod -l"nvidia.com/dynamo-component-type=frontend,nvidia.com/dynamo-namespace=${NAMESPACE}-vllm-disagg-planner"-n"$NAMESPACE"--timeout=900s
if kubectl wait--for=condition=Ready pod -l"nvidia.com/dynamo-component-type=frontend,nvidia.com/dynamo-namespace=${NAMESPACE}-vllm-disagg-planner"-n"$NAMESPACE"--timeout=900s;then
log_success "Frontend pod is ready"
log_success "Frontend pod is ready"
else
log_error "Frontend pod failed to become ready within timeout"
exit 1
fi
log_info "Waiting for all pods to be running..."
log_info "Waiting for planner pod..."
kubectl wait--for=condition=Ready pod -l"nvidia.com/dynamo-component-type=planner,nvidia.com/dynamo-namespace=${NAMESPACE}-vllm-disagg-planner"-n"$NAMESPACE"--timeout=900s
sleep 30
sleep 30
}
}
setup_port_forward(){
setup_port_forward(){
log_info "Setting up port forwarding..."
log_info "Setting up port forwarding..."
LOCAL_PORT=$(find_free_local_port)
# Kill any existing port forward on the same port
log_info "Using local port $LOCAL_PORT for frontend port-forward"
if lsof -ti:$LOCAL_PORT &> /dev/null;then
log_warning "Port $LOCAL_PORT is already in use, attempting to free it..."
kill"$(lsof -ti:$LOCAL_PORT)" 2>/dev/null ||true
sleep 2
fi
local frontend_service="vllm-disagg-planner-frontend"
local frontend_service="vllm-disagg-planner-frontend"
if! kubectl get service "$frontend_service"-n"$NAMESPACE" &> /dev/null;then
log_error "Frontend service '$frontend_service' not found"
return 1
fi
log_info "Port forwarding to service: $frontend_service"