-
Notifications
You must be signed in to change notification settings - Fork 664
[Bug] Sidecar mode shouldn't restart head pod when head pod is deleted #4141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug] Sidecar mode shouldn't restart head pod when head pod is deleted #4141
Conversation
Signed-off-by: 400Ping <fourhundredping@gmail.com>
Signed-off-by: 400Ping <fourhundredping@gmail.com>
|
@400Ping, the change should be made in the raycluster_controller. We need to make the raycluster_controller not recreate the head pod if the cluster belongs to a RayJob, so that we can avoid races where the raycluster_controller recreates the head before the rayjob_controller checks it. |
ok, thanks |
Signed-off-by: 400Ping <fourhundredping@gmail.com>
Signed-off-by: 400Ping <fourhundredping@gmail.com>
| originatedFrom := utils.GetCRDType(instance.Labels[utils.RayOriginatedFromCRDLabelKey]) | ||
| if originatedFrom == utils.RayJobCRD { | ||
| logger.Info( | ||
| "reconcilePods: Found 0 head Pods for a RayJob-managed RayCluster; skipping head creation to let RayJob controller handle the failure", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Won't this cause no head pod to be created at all? We still need to create the first head pod. I think you can check the RayClusterProvisioned condition to decide whether to create one or not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this is related to the flaky test in CI now.
https://buildkite.com/ray-project/ray-ecosystem-ci-kuberay-ci/builds/11427#019a2849-e063-47f4-8aef-9143855d8976
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
let's try to fix this, super important.
Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com>
Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com>
|
sorry, I am a bit busy taking midterm this week so I am a bit slow to respond |
good luck for your midterm exam, thank you! |
Future-Outlier
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I tested this in my local laptop, and @machichima did it too.
reproduce step
- create a RayJob
apiVersion: ray.io/v1
kind: RayJob
metadata:
name: rayjob-sidecar-mode-flaky
spec:
# In SidecarMode, the KubeRay operator injects a container into the Ray head Pod to submit the Ray job and tail logs.
# This will avoid inter-Pod communication, which may cause network issues. For example, some users face WebSocket hangs.
# For more details, see https://github.com/ray-project/kuberay/issues/3928#issuecomment-3187164736.
submissionMode: "SidecarMode"
entrypoint: python -c "import time; time.sleep(60)"
runtimeEnvYAML: |
pip:
- requests==2.26.0
- pendulum==2.1.2
env_vars:
counter_name: "test_counter"
rayClusterSpec:
rayVersion: '2.46.0'
headGroupSpec:
rayStartParams: {}
template:
spec:
containers:
- name: ray-head
image: rayproject/ray:2.46.0
ports:
- containerPort: 6379
name: gcs-server
- containerPort: 8265
name: dashboard
- containerPort: 10001
name: client
resources:
limits:
cpu: "1"
requests:
cpu: "200m"
volumeMounts:
- mountPath: /home/ray/samples
name: code-sample
volumes:
- name: code-sample
configMap:
name: ray-job-code-sample
items:
- key: sample_code.py
path: sample_code.py
workerGroupSpecs:
- replicas: 1
minReplicas: 1
maxReplicas: 5
groupName: small-group
rayStartParams: {}
template:
spec:
containers:
- name: ray-worker
image: rayproject/ray:2.46.0
resources:
limits:
cpu: "1"
requests:
cpu: "200m"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: ray-job-code-sample
data:
sample_code.py: |
import ray
import os
import requests
ray.init()
@ray.remote
class Counter:
def __init__(self):
# Used to verify runtimeEnv
self.name = os.getenv("counter_name")
assert self.name == "test_counter"
self.counter = 0
def inc(self):
self.counter += 1
def get_counter(self):
return "{} got {}".format(self.name, self.counter)
counter = Counter.remote()
for _ in range(5):
ray.get(counter.inc.remote())
print(ray.get(counter.get_counter.remote()))
# Verify that the correct runtime env was used for the job.
assert requests.__version__ == "2.26.0"-
delete the head pod once the head container and submitter container are both running
-
check the rayjob CR's status (should be failure both)
-
you might wonder should we delete the worker pod? the answer is no, since we can't know if we use cluster selector from rayjob in raycluster.
but 1 thing we can do is we can use deletion policy to delete the whole raycluster if needed.
|
cc @rueian @andrewsykim for merge, thank you! |
|
@400Ping, The RayJob_fails_when_head_Pod_is_deleted_when_job_is_running test is failing |
Future-Outlier
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Signed-off-by: Future-Outlier <eric901201@gmail.com>
ray-project#4141) * [Bug] Sidecar mode shouldn't restart head pod when head pod is deleted Signed-off-by: 400Ping <fourhundredping@gmail.com> * [Fix] Fix e2e error Signed-off-by: 400Ping <fourhundredping@gmail.com> * [Fix] fix according to rueian's comment Signed-off-by: 400Ping <fourhundredping@gmail.com> * [Chore] fix ci error Signed-off-by: 400Ping <fourhundredping@gmail.com> * Update ray-operator/controllers/ray/raycluster_controller.go Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> * Update ray-operator/controllers/ray/rayjob_controller.go Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * Trigger CI Signed-off-by: Future-Outlier <eric901201@gmail.com> --------- Signed-off-by: 400Ping <fourhundredping@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> Signed-off-by: Future-Outlier <eric901201@gmail.com> Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Rueian <rueiancsie@gmail.com>
#4141) (#4156) * [Bug] Sidecar mode shouldn't restart head pod when head pod is deleted * [Fix] Fix e2e error * [Fix] fix according to rueian's comment * [Chore] fix ci error * Update ray-operator/controllers/ray/raycluster_controller.go * Update ray-operator/controllers/ray/rayjob_controller.go * update * update * Trigger CI --------- Signed-off-by: 400Ping <fourhundredping@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> Signed-off-by: Future-Outlier <eric901201@gmail.com> Signed-off-by: Rueian <rueiancsie@gmail.com> Co-authored-by: Ping <fourhundredping@gmail.com> Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com>
* [Bug] Sidecar mode shouldn't restart head pod when head pod is deleted (#4141) * [Bug] Sidecar mode shouldn't restart head pod when head pod is deleted Signed-off-by: 400Ping <fourhundredping@gmail.com> * [Fix] Fix e2e error Signed-off-by: 400Ping <fourhundredping@gmail.com> * [Fix] fix according to rueian's comment Signed-off-by: 400Ping <fourhundredping@gmail.com> * [Chore] fix ci error Signed-off-by: 400Ping <fourhundredping@gmail.com> * Update ray-operator/controllers/ray/raycluster_controller.go Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> * Update ray-operator/controllers/ray/rayjob_controller.go Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * Trigger CI Signed-off-by: Future-Outlier <eric901201@gmail.com> --------- Signed-off-by: 400Ping <fourhundredping@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> Signed-off-by: Future-Outlier <eric901201@gmail.com> Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> * fix: dashboard build for kuberay 1.5.0 (#4161) Signed-off-by: Future-Outlier <eric901201@gmail.com> * [Feature Enhancement] Set ordered replica index label to support multi-slice (#4163) * [Feature Enhancement] Set ordered replica index label to support multi-slice Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * rename replica-id -> replica-name Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * Separate replica index feature gate logic Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * remove index arg in createWorkerPod Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> --------- Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * update stale feature gate comments (#4174) Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * [RayCluster] Add more context why we don't recreate head Pod for RayJob (#4175) Signed-off-by: Kai-Hsun Chen <khchen@x.ai> * feature: Remove empty resource list initialization. (#4168) Fixes #4142. * [Dockerfile] [KubeRay Dashboard]: Fix Dockerfile warnings (ENV format, CMD JSON args) (#4167) * [#4166] improvement: Fix Dockerfile warnings (ENV format, CMD JSON args) * extract the hostname from CMD Signed-off-by: Neo Chien <6762509+cchung100m@users.noreply.github.com> --------- Signed-off-by: Neo Chien <6762509+cchung100m@users.noreply.github.com> Co-authored-by: cchung100m <cchung100m@users.noreply.github.com> * [Fix] Resolve int32 overflow by having the calculation in int64 and c… (#4158) * [Fix] Resolve int32 overflow by having the calculation in int64 and cap it if the count is over math.MaxInt32 Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Test] Add unit tests for CalculateReadyReplicas Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Fix] Add a nosec comment to pass the Lint (pre-commit) test Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Refactor] Add CapInt64ToInt32 to replace #nosec directives Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Refactor] Rename function to SafeInt64ToInt32 and add a underflowing prevention (it also help pass the lint test) Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Refactor] Remove the early return as SafeInt64ToInt32 handles the int32 overflow and underflow checking. Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> --------- Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * Add RayService incremental upgrade sample for guide (#4164) Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * Edit RayCluster example config for label selectors (#4151) Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * [RayJob] update light weight submitter image from quay.io (#4181) Signed-off-by: Future-Outlier <eric901201@gmail.com> * [flaky] RayJob fails when head Pod is deleted when job is running (#4182) Signed-off-by: Future-Outlier <eric901201@gmail.com> * [CI] Pin Docker api version to avoid API version mismatch (#4188) Signed-off-by: win5923 <ken89@kimo.com> * Make replicas configurable for kuberay-operator #4180 (#4195) * Make replicas configurable for kuberay-operator #4180 * Make replicas configurable for kuberay-operator #4180 * [Fix] rayjob update raycluster status (#4192) * feat: check if raycluster status update in rayjob * test: e2e test to check the rayjob raycluster status update * fix: dashboard http client tests discovered and passing (#4173) Signed-off-by: alimaazamat <alima.azamat2003@gmail.com> * [RayJob] Lift cluster status while initializing (#4191) Signed-off-by: Spencer Peterson <spencerjp@google.com> * [RayJob] Remove updateJobStatus call (#4198) Fast follow to #4191 Signed-off-by: Spencer Peterson <spencerjp@google.com> * Add support for Ray token auth (#4179) * Add support for Ray token auth Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * add e2e test for Ray cluster auth Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * address nits from Ruiean Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * update RAY_auth_mode -> RAY_AUTH_MODE Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * configure auth for Ray autoscaler Signed-off-by: Andrew Sy Kim <andrewsy@google.com> --------- Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * Bump js-yaml from 4.1.0 to 4.1.1 in /dashboard (#4194) Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](nodeca/js-yaml@4.1.0...4.1.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.1.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * update minimum Ray version required for token authentication to 2.52.0 (#4201) * update minimum Ray version required for token authentication to 2.52.0 Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * update RayCluster auth e2e test to use Ray v2.52 Signed-off-by: Andrew Sy Kim <andrewsy@google.com> --------- Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * add samples for RayCluster token auth (#4200) Signed-off-by: Andrew Sy Kim <andrewsy@google.com> * update (#4208) Signed-off-by: Future-Outlier <eric901201@gmail.com> * [RayJob] Add token authentication support for All mode (#4210) * dashboard client authentication support Signed-off-by: Future-Outlier <eric901201@gmail.com> * support rayjob Signed-off-by: Future-Outlier <eric901201@gmail.com> * update to fix api serverr err Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * updarte Signed-off-by: Future-Outlier <eric901201@gmail.com> * Rayjob sidecar mode auth token mode support Signed-off-by: Future-Outlier <eric901201@gmail.com> * RayJob support k8s job mode Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * Address Andrew's advice Signed-off-by: Future-Outlier <eric901201@gmail.com> * add todo x-ray-authorization comments Signed-off-by: Future-Outlier <eric901201@gmail.com> --------- Signed-off-by: Future-Outlier <eric901201@gmail.com> * [RayCluster] Enable Secret informer watch/list and remove unused RBAC verbs (#4202) * Add authentication secret reconciliation support Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * update Signed-off-by: Future-Outlier <eric901201@gmail.com> * fix flaky test Signed-off-by: Future-Outlier <eric901201@gmail.com> * remove test fix Signed-off-by: Rueian <rueiancsie@gmail.com> --------- Signed-off-by: Future-Outlier <eric901201@gmail.com> Signed-off-by: Rueian <rueiancsie@gmail.com> Co-authored-by: Rueian <rueiancsie@gmail.com> * [APIServer][Docs] Add user guide for retry behavior & configuration (#4144) * [Docs] Add the draft description about feature intro, configurations, and usecases Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Fix] Update the retry walk-through Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Doc] rewrite the first 2 sections Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Doc] Revise documentation wording and add Observing Retry Behavior section Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Fix] fix linting issue by running pre-commit run berfore commiting Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Fix] fix linting errors in the Markdown linting Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Fix] Clean up the math equation Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * Update the math formula of Backoff calculation. Co-authored-by: Nary Yeh <60069744+machichima@users.noreply.github.com> Signed-off-by: JustinYeh <justinyeh1995@gmail.com> * [Fix] Explicitly mentioned exponential backoff and removed the customization parts Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * [Docs] Clarify naming by replacing “APIServer” with “KubeRay APIServer” Co-authored-by: Cheng-Yeh Chung <kenchung285@gmail.com> Signed-off-by: JustinYeh <justinyeh1995@gmail.com> * [Docs] Rename retry-configuration.md to retry-behavior.md for accuracy Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> * Update Title to KubeRay APIServer Retry Behavior Co-authored-by: Cheng-Yeh Chung <kenchung285@gmail.com> Signed-off-by: JustinYeh <justinyeh1995@gmail.com> * [Docs] Add a note about the limitation of retry configuration Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> --------- Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> Signed-off-by: JustinYeh <justinyeh1995@gmail.com> Co-authored-by: Nary Yeh <60069744+machichima@users.noreply.github.com> Co-authored-by: Cheng-Yeh Chung <kenchung285@gmail.com> * Support X-Ray-Authorization fallback header for accepting auth token via proxy (#4213) * Support X-Ray-Authorization fallback header for accepting auth token in dashboard Signed-off-by: Future-Outlier <eric901201@gmail.com> * remove todo comment Signed-off-by: Future-Outlier <eric901201@gmail.com> --------- Signed-off-by: Future-Outlier <eric901201@gmail.com> * [RayCluster] make auth token secret name consistency (#4216) Signed-off-by: fscnick <fscnick.dev@gmail.com> * [RayCluster] Status includes head containter status message (#4196) * [RayCluster] Status includes head containter status message Signed-off-by: Spencer Peterson <spencerjp@google.com> * lint Signed-off-by: Spencer Peterson <spencerjp@google.com> * [RayCluster] Containers not ready status reflects structured reason Signed-off-by: Spencer Peterson <spencerjp@google.com> * nit Signed-off-by: Spencer Peterson <spencerjp@google.com> --------- Signed-off-by: Spencer Peterson <spencerjp@google.com> * Remove erroneous call in applyServeTargetCapacity (#4212) Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> * [RayJob] Add token authentication support for light weight job submitter (#4215) * [RayJob] light weight job submitter auth token support Signed-off-by: Future-Outlier <eric901201@gmail.com> * X-Ray-Authorization Signed-off-by: Rueian <rueiancsie@gmail.com> --------- Signed-off-by: Future-Outlier <eric901201@gmail.com> Signed-off-by: Rueian <rueiancsie@gmail.com> Co-authored-by: Rueian <rueiancsie@gmail.com> * feat: kubectl ray get token command (#4218) * feat: kubectl ray get token command Signed-off-by: Rueian <rueiancsie@gmail.com> * Update kubectl-plugin/pkg/cmd/get/get_token_test.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Rueian <rueiancsie@gmail.com> * Update kubectl-plugin/pkg/cmd/get/get_token.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Rueian <rueiancsie@gmail.com> * make sure the raycluster exists before getting the secret Signed-off-by: Rueian <rueiancsie@gmail.com> * better ux Signed-off-by: Rueian <rueiancsie@gmail.com> * Update kubectl-plugin/pkg/cmd/get/get_token.go Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Signed-off-by: Rueian <rueiancsie@gmail.com> --------- Signed-off-by: Rueian <rueiancsie@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> --------- Signed-off-by: 400Ping <fourhundredping@gmail.com> Signed-off-by: Ping <fourhundredping@gmail.com> Signed-off-by: Future-Outlier <eric901201@gmail.com> Signed-off-by: Ryan O'Leary <ryanaoleary@google.com> Signed-off-by: Andrew Sy Kim <andrewsy@google.com> Signed-off-by: Kai-Hsun Chen <khchen@x.ai> Signed-off-by: Neo Chien <6762509+cchung100m@users.noreply.github.com> Signed-off-by: justinyeh1995 <justinyeh1995@gmail.com> Signed-off-by: win5923 <ken89@kimo.com> Signed-off-by: alimaazamat <alima.azamat2003@gmail.com> Signed-off-by: Spencer Peterson <spencerjp@google.com> Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Rueian <rueiancsie@gmail.com> Signed-off-by: JustinYeh <justinyeh1995@gmail.com> Signed-off-by: fscnick <fscnick.dev@gmail.com> Co-authored-by: Ping <fourhundredping@gmail.com> Co-authored-by: Han-Ju Chen (Future-Outlier) <eric901201@gmail.com> Co-authored-by: Ryan O'Leary <113500783+ryanaoleary@users.noreply.github.com> Co-authored-by: Kai-Hsun Chen <kaihsun@anyscale.com> Co-authored-by: Kavish <141061817+kash2104@users.noreply.github.com> Co-authored-by: Neo Chien <6762509+cchung100m@users.noreply.github.com> Co-authored-by: cchung100m <cchung100m@users.noreply.github.com> Co-authored-by: JustinYeh <justinyeh1995@gmail.com> Co-authored-by: Jun-Hao Wan <ken89@kimo.com> Co-authored-by: Divyam Raj <41264059+divyamraj18@users.noreply.github.com> Co-authored-by: Nary Yeh <60069744+machichima@users.noreply.github.com> Co-authored-by: Alima Azamat <92766804+alimaazamat@users.noreply.github.com> Co-authored-by: Spencer Peterson <spencerjp@google.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Rueian <rueiancsie@gmail.com> Co-authored-by: Cheng-Yeh Chung <kenchung285@gmail.com> Co-authored-by: fscnick <6858627+fscnick@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Why are these changes needed?
When using sidecar mode, the head pod should not be recreated after it is deleted. The RayJob should be marked as Failed.
Related issue number
Closes #4130
Checks