From 48505261983338d2845134f553d96fbef1fe7939 Mon Sep 17 00:00:00 2001 From: "trusihin.andrey" Date: Tue, 26 Aug 2025 15:09:39 +0300 Subject: [PATCH 01/20] Worker. Add option to set k8s resources. --- functions/onprem/orborus/orborus.go | 75 +++++++++++++++++++++++------ 1 file changed, 59 insertions(+), 16 deletions(-) diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index 26f16017..d8870c59 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -51,6 +51,7 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" ) @@ -734,7 +735,7 @@ func deployServiceWorkers(image string) { var updatedNetworks []swarm.NetworkAttachmentConfig for _, net := range serviceSpec.Networks { if net.Target != "shuffle_shuffle" { - updatedNetworks = append(updatedNetworks, net) + updatedNetworks = append(updatedNetworks, net) } } serviceSpec.Networks = updatedNetworks @@ -786,6 +787,48 @@ func buildEnvVars(envMap map[string]string) []corev1.EnvVar { return envVars } +func buildResourcesFromEnv() corev1.ResourceRequirements { + reqs := corev1.ResourceList{} + lims := corev1.ResourceList{} + + type item struct { + env string + rn corev1.ResourceName + to *corev1.ResourceList + } + + items := []item{ + // kubernetes requests + {env: "KUBERNETES_CPU_REQUEST", rn: corev1.ResourceCPU, to: &reqs}, + {env: "KUBERNETES_MEMORY_REQUEST", rn: corev1.ResourceMemory, to: &reqs}, + {env: "KUBERNETES_EPHEMERAL_STORAGE_REQUEST", rn: corev1.ResourceEphemeralStorage, to: &reqs}, + // kubernetes limits + {env: "KUBERNETES_CPU_LIMIT", rn: corev1.ResourceCPU, to: &lims}, + {env: "KUBERNETES_MEMORY_LIMIT", rn: corev1.ResourceMemory, to: &lims}, + {env: "KUBERNETES_EPHEMERAL_STORAGE_LIMIT", rn: corev1.ResourceEphemeralStorage, to: &lims}, + } + + for _, it := range items { + if v := strings.TrimSpace(os.Getenv(it.env)); v != "" { + if q, err := resource.ParseQuantity(v); err == nil { + (*it.to)[it.rn] = q + } else { + log.Printf("[WARN] Cannot parse %s=%q as resource quantity: %v", it.env, v, err) + } + } + } + + rr := corev1.ResourceRequirements{} + if len(reqs) > 0 { + rr.Requests = reqs + } + if len(lims) > 0 { + rr.Limits = lims + } + + return rr +} + func handleBackendImageDownload(ctx context.Context, images string) error { // Replicate images with lowercase, as the name may be wrong @@ -813,20 +856,20 @@ func handleBackendImageDownload(ctx context.Context, images string) error { newImages = append(newImages, curimage) // Force remove the current image to avoid cached layers - // if swarmConfig == "run" || swarmConfig == "swarm" { - // _, err := dockercli.ImageRemove(ctx, curimage, image.RemoveOptions{ - // Force: true, - // PruneChildren: true, - // }) + // if swarmConfig == "run" || swarmConfig == "swarm" { + // _, err := dockercli.ImageRemove(ctx, curimage, image.RemoveOptions{ + // Force: true, + // PruneChildren: true, + // }) - // if err != nil { - // log.Printf("[ERROR] Failed removing image for re-download: %s", err) - // } else { - // log.Printf("[DEBUG] Removed image: %s", curimage) - // } - // } else { - // //log.Printf("[DEBUG] Skipping image removal for %s as swarmConfig is not set to run or swarm. Value: %#v", curimage, swarmConfig) - // } + // if err != nil { + // log.Printf("[ERROR] Failed removing image for re-download: %s", err) + // } else { + // log.Printf("[DEBUG] Removed image: %s", curimage) + // } + // } else { + // //log.Printf("[DEBUG] Skipping image removal for %s as swarmConfig is not set to run or swarm. Value: %#v", curimage, swarmConfig) + // } err := shuffle.DownloadDockerImageBackend(&http.Client{Timeout: imagedownloadTimeout}, curimage) if err != nil { @@ -887,7 +930,7 @@ func handleBackendImageDownload(ctx context.Context, images string) error { log.Printf("[ERROR] Failed updating service %s with the new image %s: %s. Resp: %#v", service.Spec.Annotations.Name, image, err, resp) } else { log.Printf("[DEBUG] Updated service %s with the new image %s. Resp: %#v", service.Spec.Annotations.Name, image, resp) - + found = true if !strings.Contains(fmt.Sprintf("%s", resp), "error") { @@ -1173,6 +1216,7 @@ func deployK8sWorker(image string, identifier string, env []string) error { Image: kubernetesImage, Env: buildEnvVars(envMap), SecurityContext: containerSecurityContext, + Resources: buildResourcesFromEnv(), //ImagePullPolicy: "Never", ImagePullPolicy: corev1.PullIfNotPresent, @@ -2214,7 +2258,6 @@ func main() { log.Printf("[INFO] Waiting for executions at %s with Environment %#v", fullUrl, environment) - hasStarted := false for { if req.Method == "POST" { From f26f8728356173370de71465c22907e4b2a0fdbb Mon Sep 17 00:00:00 2001 From: "trusihin.andrey" Date: Tue, 26 Aug 2025 16:24:01 +0300 Subject: [PATCH 02/20] Rename k8s resources envs. Add the same options to shuffle app --- functions/onprem/orborus/orborus.go | 40 +++++++++++++++++---- functions/onprem/worker/worker.go | 55 ++++++++++++++++++++++++++--- 2 files changed, 84 insertions(+), 11 deletions(-) diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index d8870c59..3103405a 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -799,13 +799,13 @@ func buildResourcesFromEnv() corev1.ResourceRequirements { items := []item{ // kubernetes requests - {env: "KUBERNETES_CPU_REQUEST", rn: corev1.ResourceCPU, to: &reqs}, - {env: "KUBERNETES_MEMORY_REQUEST", rn: corev1.ResourceMemory, to: &reqs}, - {env: "KUBERNETES_EPHEMERAL_STORAGE_REQUEST", rn: corev1.ResourceEphemeralStorage, to: &reqs}, + {env: "SHUFFLE_WORKER_CPU_REQUEST", rn: corev1.ResourceCPU, to: &reqs}, + {env: "SHUFFLE_WORKER_MEMORY_REQUEST", rn: corev1.ResourceMemory, to: &reqs}, + {env: "SHUFFLE_WORKER_EPHEMERAL_STORAGE_REQUEST", rn: corev1.ResourceEphemeralStorage, to: &reqs}, // kubernetes limits - {env: "KUBERNETES_CPU_LIMIT", rn: corev1.ResourceCPU, to: &lims}, - {env: "KUBERNETES_MEMORY_LIMIT", rn: corev1.ResourceMemory, to: &lims}, - {env: "KUBERNETES_EPHEMERAL_STORAGE_LIMIT", rn: corev1.ResourceEphemeralStorage, to: &lims}, + {env: "SHUFFLE_WORKER_CPU_LIMIT", rn: corev1.ResourceCPU, to: &lims}, + {env: "SHUFFLE_WORKER_MEMORY_LIMIT", rn: corev1.ResourceMemory, to: &lims}, + {env: "SHUFFLE_WORKER_EPHEMERAL_STORAGE_LIMIT", rn: corev1.ResourceEphemeralStorage, to: &lims}, } for _, it := range items { @@ -1072,6 +1072,34 @@ func deployK8sWorker(image string, identifier string, env []string) error { env = append(env, fmt.Sprintf("IS_KUBERNETES=true")) env = append(env, fmt.Sprintf("KUBERNETES_NAMESPACE=%s", os.Getenv("KUBERNETES_NAMESPACE"))) + // worker resource env + for _, k := range []string{ + "SHUFFLE_WORKER_CPU_REQUEST", + "SHUFFLE_WORKER_MEMORY_REQUEST", + "SHUFFLE_WORKER_EPHEMERAL_STORAGE_REQUEST", + "SHUFFLE_WORKER_CPU_LIMIT", + "SHUFFLE_WORKER_MEMORY_LIMIT", + "SHUFFLE_WORKER_EPHEMERAL_STORAGE_LIMIT", + } { + if v := os.Getenv(k); v != "" { + env = append(env, fmt.Sprintf("%s=%s", k, v)) + } + } + + // app resource env + for _, k := range []string{ + "SHUFFLE_APP_CPU_REQUEST", + "SHUFFLE_APP_MEMORY_REQUEST", + "SHUFFLE_APP_EPHEMERAL_STORAGE_REQUEST", + "SHUFFLE_APP_CPU_LIMIT", + "SHUFFLE_APP_MEMORY_LIMIT", + "SHUFFLE_APP_EPHEMERAL_STORAGE_LIMIT", + } { + if v := os.Getenv(k); v != "" { + env = append(env, fmt.Sprintf("%s=%s", k, v)) + } + } + if len(os.Getenv("KUBERNETES_SERVICE_HOST")) > 0 { env = append(env, fmt.Sprintf("KUBERNETES_SERVICE_HOST=%s", os.Getenv("KUBERNETES_SERVICE_HOST"))) } diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 2fbf51e3..133545f3 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -42,6 +42,7 @@ import ( //k8s deps appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/kubernetes" @@ -639,6 +640,7 @@ func deployk8sApp(image string, identifier string, env []string) error { }, }, SecurityContext: containerSecurityContext, + Resources: buildResourcesFromEnv(), }, }, DNSPolicy: corev1.DNSClusterFirst, @@ -2375,6 +2377,49 @@ func buildEnvVars(envMap map[string]string) []corev1.EnvVar { } return envVars } + +func buildResourcesFromEnv() corev1.ResourceRequirements { + reqs := corev1.ResourceList{} + lims := corev1.ResourceList{} + + type item struct { + env string + rn corev1.ResourceName + to *corev1.ResourceList + } + + items := []item{ + // kubernetes requests + {env: "SHUFFLE_APP_CPU_REQUEST", rn: corev1.ResourceCPU, to: &reqs}, + {env: "SHUFFLE_APP_MEMORY_REQUEST", rn: corev1.ResourceMemory, to: &reqs}, + {env: "SHUFFLE_APP_EPHEMERAL_STORAGE_REQUEST", rn: corev1.ResourceEphemeralStorage, to: &reqs}, + // kubernetes limits + {env: "SHUFFLE_APP_CPU_LIMIT", rn: corev1.ResourceCPU, to: &lims}, + {env: "SHUFFLE_APP_MEMORY_LIMIT", rn: corev1.ResourceMemory, to: &lims}, + {env: "SHUFFLE_APP_EPHEMERAL_STORAGE_LIMIT", rn: corev1.ResourceEphemeralStorage, to: &lims}, + } + + for _, it := range items { + if v := strings.TrimSpace(os.Getenv(it.env)); v != "" { + if q, err := resource.ParseQuantity(v); err == nil { + (*it.to)[it.rn] = q + } else { + log.Printf("[WARN] Cannot parse %s=%q as resource quantity: %v", it.env, v, err) + } + } + } + + rr := corev1.ResourceRequirements{} + if len(reqs) > 0 { + rr.Requests = reqs + } + if len(lims) > 0 { + rr.Limits = lims + } + + return rr +} + func getWorkerBackendExecution(auth string, executionId string) (*shuffle.WorkflowExecution, error) { backendUrl := os.Getenv("BASE_URL") if len(backendUrl) == 0 { @@ -2385,9 +2430,9 @@ func getWorkerBackendExecution(auth string, executionId string) (*shuffle.Workfl streamResultUrl := fmt.Sprintf("%s/api/v1/streams/results", backendUrl) topClient := shuffle.GetExternalClient(backendUrl) - requestData := shuffle.ActionResult { + requestData := shuffle.ActionResult{ Authorization: auth, - ExecutionId: executionId, + ExecutionId: executionId, } data, err := json.Marshal(requestData) @@ -2647,7 +2692,7 @@ func runWorkflowExecutionTransaction(ctx context.Context, attempts int64, workfl } if setExecution || workflowExecution.Status == "FINISHED" || workflowExecution.Status == "ABORTED" || workflowExecution.Status == "FAILURE" { - if debug { + if debug { log.Printf("[DEBUG][%s] Running setexec with status %s and %d/%d results", workflowExecution.ExecutionId, workflowExecution.Status, len(workflowExecution.Results), len(workflowExecution.Workflow.Actions)) } @@ -2665,7 +2710,7 @@ func runWorkflowExecutionTransaction(ctx context.Context, attempts int64, workfl if os.Getenv("SHUFFLE_SWARM_CONFIG") == "run" || os.Getenv("SHUFFLE_SWARM_CONFIG") == "swarm" { finished := shuffle.ValidateFinished(ctx, -1, *workflowExecution) if !finished { - if debug { + if debug { log.Printf("[DEBUG][%s] Handling next node since it's not finished!", workflowExecution.ExecutionId) } @@ -3630,7 +3675,7 @@ func sendAppRequest(ctx context.Context, incomingUrl, appName string, port int, log.Printf("[ERROR] Failed reading app request body body: %s", err) return err } else { - if debug { + if debug { log.Printf("[DEBUG][%s] NEWRESP (from app): %s", workflowExecution.ExecutionId, string(body)) } } From dd89bbdd33f70625a0314a549c4169927d8b187a Mon Sep 17 00:00:00 2001 From: "trusihin.andrey" Date: Tue, 26 Aug 2025 18:10:12 +0300 Subject: [PATCH 03/20] Remove SHUFFLE_WORKER_* env from orborus.go --- functions/onprem/orborus/orborus.go | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index 3103405a..6d0d73ea 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -1072,20 +1072,6 @@ func deployK8sWorker(image string, identifier string, env []string) error { env = append(env, fmt.Sprintf("IS_KUBERNETES=true")) env = append(env, fmt.Sprintf("KUBERNETES_NAMESPACE=%s", os.Getenv("KUBERNETES_NAMESPACE"))) - // worker resource env - for _, k := range []string{ - "SHUFFLE_WORKER_CPU_REQUEST", - "SHUFFLE_WORKER_MEMORY_REQUEST", - "SHUFFLE_WORKER_EPHEMERAL_STORAGE_REQUEST", - "SHUFFLE_WORKER_CPU_LIMIT", - "SHUFFLE_WORKER_MEMORY_LIMIT", - "SHUFFLE_WORKER_EPHEMERAL_STORAGE_LIMIT", - } { - if v := os.Getenv(k); v != "" { - env = append(env, fmt.Sprintf("%s=%s", k, v)) - } - } - // app resource env for _, k := range []string{ "SHUFFLE_APP_CPU_REQUEST", From b6e90050371ef06b7c8ff95d93ef02f76a737a78 Mon Sep 17 00:00:00 2001 From: "trusihin.andrey" Date: Wed, 27 Aug 2025 09:26:47 +0300 Subject: [PATCH 04/20] Fix variables name --- functions/onprem/orborus/orborus.go | 38 ++++++++++++++--------------- functions/onprem/worker/worker.go | 38 ++++++++++++++--------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index 6d0d73ea..7e212505 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -788,42 +788,42 @@ func buildEnvVars(envMap map[string]string) []corev1.EnvVar { } func buildResourcesFromEnv() corev1.ResourceRequirements { - reqs := corev1.ResourceList{} - lims := corev1.ResourceList{} + requests := corev1.ResourceList{} + limits := corev1.ResourceList{} type item struct { - env string - rn corev1.ResourceName - to *corev1.ResourceList + env string + resourceName corev1.ResourceName + resourceList corev1.ResourceList } items := []item{ // kubernetes requests - {env: "SHUFFLE_WORKER_CPU_REQUEST", rn: corev1.ResourceCPU, to: &reqs}, - {env: "SHUFFLE_WORKER_MEMORY_REQUEST", rn: corev1.ResourceMemory, to: &reqs}, - {env: "SHUFFLE_WORKER_EPHEMERAL_STORAGE_REQUEST", rn: corev1.ResourceEphemeralStorage, to: &reqs}, + {env: "SHUFFLE_WORKER_CPU_REQUEST", resourceName: corev1.ResourceCPU, resourceList: requests}, + {env: "SHUFFLE_WORKER_MEMORY_REQUEST", resourceName: corev1.ResourceMemory, resourceList: requests}, + {env: "SHUFFLE_WORKER_EPHEMERAL_STORAGE_REQUEST", resourceName: corev1.ResourceEphemeralStorage, resourceList: requests}, // kubernetes limits - {env: "SHUFFLE_WORKER_CPU_LIMIT", rn: corev1.ResourceCPU, to: &lims}, - {env: "SHUFFLE_WORKER_MEMORY_LIMIT", rn: corev1.ResourceMemory, to: &lims}, - {env: "SHUFFLE_WORKER_EPHEMERAL_STORAGE_LIMIT", rn: corev1.ResourceEphemeralStorage, to: &lims}, + {env: "SHUFFLE_WORKER_CPU_LIMIT", resourceName: corev1.ResourceCPU, resourceList: limits}, + {env: "SHUFFLE_WORKER_MEMORY_LIMIT", resourceName: corev1.ResourceMemory, resourceList: limits}, + {env: "SHUFFLE_WORKER_EPHEMERAL_STORAGE_LIMIT", resourceName: corev1.ResourceEphemeralStorage, resourceList: limits}, } for _, it := range items { - if v := strings.TrimSpace(os.Getenv(it.env)); v != "" { - if q, err := resource.ParseQuantity(v); err == nil { - (*it.to)[it.rn] = q + if value := strings.TrimSpace(os.Getenv(it.env)); value != "" { + if quantity, err := resource.ParseQuantity(value); err == nil { + it.resourceList[it.resourceName] = quantity } else { - log.Printf("[WARN] Cannot parse %s=%q as resource quantity: %v", it.env, v, err) + log.Printf("[WARNING] Cannot parse %s=%q as resource quantity: %v", it.env, value, err) } } } rr := corev1.ResourceRequirements{} - if len(reqs) > 0 { - rr.Requests = reqs + if len(requests) > 0 { + rr.Requests = requests } - if len(lims) > 0 { - rr.Limits = lims + if len(limits) > 0 { + rr.Limits = limits } return rr diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 133545f3..3489666c 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -2379,42 +2379,42 @@ func buildEnvVars(envMap map[string]string) []corev1.EnvVar { } func buildResourcesFromEnv() corev1.ResourceRequirements { - reqs := corev1.ResourceList{} - lims := corev1.ResourceList{} + requests := corev1.ResourceList{} + limits := corev1.ResourceList{} type item struct { - env string - rn corev1.ResourceName - to *corev1.ResourceList + env string + resourceName corev1.ResourceName + resourceList corev1.ResourceList } items := []item{ // kubernetes requests - {env: "SHUFFLE_APP_CPU_REQUEST", rn: corev1.ResourceCPU, to: &reqs}, - {env: "SHUFFLE_APP_MEMORY_REQUEST", rn: corev1.ResourceMemory, to: &reqs}, - {env: "SHUFFLE_APP_EPHEMERAL_STORAGE_REQUEST", rn: corev1.ResourceEphemeralStorage, to: &reqs}, + {env: "SHUFFLE_APP_CPU_REQUEST", resourceName: corev1.ResourceCPU, resourceList: requests}, + {env: "SHUFFLE_APP_MEMORY_REQUEST", resourceName: corev1.ResourceMemory, resourceList: requests}, + {env: "SHUFFLE_APP_EPHEMERAL_STORAGE_REQUEST", resourceName: corev1.ResourceEphemeralStorage, resourceList: requests}, // kubernetes limits - {env: "SHUFFLE_APP_CPU_LIMIT", rn: corev1.ResourceCPU, to: &lims}, - {env: "SHUFFLE_APP_MEMORY_LIMIT", rn: corev1.ResourceMemory, to: &lims}, - {env: "SHUFFLE_APP_EPHEMERAL_STORAGE_LIMIT", rn: corev1.ResourceEphemeralStorage, to: &lims}, + {env: "SHUFFLE_APP_CPU_LIMIT", resourceName: corev1.ResourceCPU, resourceList: limits}, + {env: "SHUFFLE_APP_MEMORY_LIMIT", resourceName: corev1.ResourceMemory, resourceList: limits}, + {env: "SHUFFLE_APP_EPHEMERAL_STORAGE_LIMIT", resourceName: corev1.ResourceEphemeralStorage, resourceList: limits}, } for _, it := range items { - if v := strings.TrimSpace(os.Getenv(it.env)); v != "" { - if q, err := resource.ParseQuantity(v); err == nil { - (*it.to)[it.rn] = q + if value := strings.TrimSpace(os.Getenv(it.env)); value != "" { + if quantity, err := resource.ParseQuantity(value); err == nil { + it.resourceList[it.resourceName] = quantity } else { - log.Printf("[WARN] Cannot parse %s=%q as resource quantity: %v", it.env, v, err) + log.Printf("[WARNING] Cannot parse %s=%q as resource quantity: %v", it.env, value, err) } } } rr := corev1.ResourceRequirements{} - if len(reqs) > 0 { - rr.Requests = reqs + if len(requests) > 0 { + rr.Requests = requests } - if len(lims) > 0 { - rr.Limits = lims + if len(limits) > 0 { + rr.Limits = limits } return rr From 5d9b69a45973fddbd99da6f31a943c0b473f2adb Mon Sep 17 00:00:00 2001 From: Pascal Sthamer <10992664+P4sca1@users.noreply.github.com> Date: Wed, 24 Sep 2025 09:26:03 +0200 Subject: [PATCH 05/20] update apt repo for helm --- .github/workflows/helm-release.yml | 4 ++-- .github/workflows/helm-test.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/helm-release.yml b/.github/workflows/helm-release.yml index 4c3c6b6f..69b17917 100644 --- a/.github/workflows/helm-release.yml +++ b/.github/workflows/helm-release.yml @@ -26,9 +26,9 @@ jobs: - name: Install apt dependencies run: | - curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https -y --no-install-recommends - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list + curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null + echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm -y --no-install-recommends diff --git a/.github/workflows/helm-test.yml b/.github/workflows/helm-test.yml index fb0e34aa..49c20240 100644 --- a/.github/workflows/helm-test.yml +++ b/.github/workflows/helm-test.yml @@ -18,9 +18,9 @@ jobs: - name: Install apt dependencies run: | - curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null sudo apt-get install apt-transport-https -y --no-install-recommends - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list + curl -fsSL https://packages.buildkite.com/helm-linux/helm-debian/gpgkey | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null + echo "deb [signed-by=/usr/share/keyrings/helm.gpg] https://packages.buildkite.com/helm-linux/helm-debian/any/ any main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list sudo apt-get update sudo apt-get install helm -y --no-install-recommends From a06c4748e3172a914bb8ef444846281b9c7a4594 Mon Sep 17 00:00:00 2001 From: Aditya <60684641+0x0elliot@users.noreply.github.com> Date: Tue, 30 Sep 2025 14:09:06 +0530 Subject: [PATCH 06/20] feat: adding optional resource monitoring --- docker-compose.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index c1c27efb..8ab7e3b9 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -91,6 +91,27 @@ services: - shuffle restart: unless-stopped + # OPTIONAL: advanced monitoring with cAdvisor + # If you have a seperate orborus config YAML on another server, + # Please add it there as well if you want to monitor that server too. + # FYI: both servers will show up on different dashboards. + # cadvisor: + # image: gcr.io/cadvisor/cadvisor:latest + # volumes: + # - /:/rootfs:ro + # - /var/run:/var/run:ro + # - /sys:/sys:ro + # - /var/lib/docker/:/var/lib/docker:ro + # - /dev/disk/:/dev/disk:ro + # - /var/run/docker.sock:/var/run/docker.sock:ro + # ports: + # - "8080:8080" + # privileged: true + # devices: + # - /dev/kmsg:/dev/kmsg + # networks: + # - shuffle + #memcached: # image: memcached:latest # container_name: shuffle-cache From 8a0b87dd049778e9224526aea124d7dad067ee87 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 13:25:29 +0200 Subject: [PATCH 07/20] Added Opensearch image config --- functions/kubernetes/charts/shuffle/values.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index 57bccb31..00b53a29 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -1888,6 +1888,15 @@ volumePermissions: ## opensearch: enabled: true + + image: + registry: docker.io + repository: opensearchproject/opensearch + tag: "3.2.0" + digest: "" + pullPolicy: IfNotPresent + pullSecrets: [] + master: replicaCount: 1 data: From bd15bfd3640b2a6d64ad3b5b5fa99d20943b8506 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 13:28:03 +0200 Subject: [PATCH 08/20] Delete functions/kubernetes/all-in-one.yaml as it's handled in charts/shuffle instead --- functions/kubernetes/all-in-one.yaml | 894 --------------------------- 1 file changed, 894 deletions(-) delete mode 100644 functions/kubernetes/all-in-one.yaml diff --git a/functions/kubernetes/all-in-one.yaml b/functions/kubernetes/all-in-one.yaml deleted file mode 100644 index d9bec68d..00000000 --- a/functions/kubernetes/all-in-one.yaml +++ /dev/null @@ -1,894 +0,0 @@ -apiVersion: v1 -kind: Namespace -metadata: - name: shuffle - ---- -## ONLY for minikube -# apiVersion: storage.k8s.io/v1 -# kind: StorageClass -# metadata: -# name: standard-rwo -# provisioner: k8s.io/minikube-hostpath -# reclaimPolicy: Delete -# volumeBindingMode: Immediate - -# --- - -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: shuffle-data - namespace: shuffle -provisioner: kubernetes.io/no-provisioner -volumeBindingMode: WaitForFirstConsumer - ---- - -apiVersion: v1 -metadata: - namespace: shuffle - creationTimestamp: null - labels: - io.kompose.service: backend-env - name: env -data: - BACKEND_HOSTNAME: shuffle-backend - BACKEND_PORT: "5001" - BASE_URL: http://shuffle-backend:5001 - DATASTORE_EMULATOR_HOST: shuffle-database:8000 - DB_LOCATION: /mnt/shuffle-data/open-search - DOCKER_API_VERSION: "1.40" - ENVIRONMENT_NAME: Shuffle - FRONTEND_PORT: "3001" - FRONTEND_PORT_HTTPS: "3443" - HTTP_PROXY: "" - HTTPS_PROXY: "" - ORBORUS_CONTAINER_NAME: "\t\t\t\t" - ORG_ID: Shuffle - OUTER_HOSTNAME: shuffle-backend - SHUFFLE_APP_DOWNLOAD_LOCATION: https://github.com/shuffle/python-apps - SHUFFLE_APP_FORCE_UPDATE: "false" - SHUFFLE_APP_HOTLOAD_FOLDER: /shuffle-apps - SHUFFLE_APP_HOTLOAD_LOCATION: ./shuffle-apps - SHUFFLE_BASE_IMAGE_NAME: shuffle - SHUFFLE_BASE_IMAGE_REGISTRY: ghcr.io - SHUFFLE_BASE_IMAGE_TAG_SUFFIX: -1.0.0 - SHUFFLE_CHAT_DISABLED: "false" - SHUFFLE_CONTAINER_AUTO_CLEANUP: "false" - SHUFFLE_DEFAULT_APIKEY: "" - SHUFFLE_DEFAULT_PASSWORD: "" - SHUFFLE_DEFAULT_USERNAME: "" - SHUFFLE_DOWNLOAD_AUTH_BRANCH: "" - SHUFFLE_DOWNLOAD_AUTH_PASSWORD: "" - SHUFFLE_DOWNLOAD_AUTH_USERNAME: "" - SHUFFLE_DOWNLOAD_WORKFLOW_BRANCH: "" - SHUFFLE_DOWNLOAD_WORKFLOW_LOCATION: "" - SHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD: "" - SHUFFLE_DOWNLOAD_WORKFLOW_USERNAME: "" - SHUFFLE_ELASTIC: "true" - SHUFFLE_ENCRYPTION_MODIFIER: "" - SHUFFLE_FILE_LOCATION: /shuffle-files - SHUFFLE_LOGS_DISABLED: "false" - SHUFFLE_OPENSEARCH_APIKEY: "" - SHUFFLE_OPENSEARCH_CERTIFICATE_FILE: "" - SHUFFLE_OPENSEARCH_CLOUDID: "" - KUBERNETES_NAMESPACE: shuffle - SHUFFLE_OPENSEARCH_INDEX_PREFIX: "" - SHUFFLE_OPENSEARCH_PASSWORD: admin - SHUFFLE_OPENSEARCH_PROXY: "" - SHUFFLE_OPENSEARCH_SKIPSSL_VERIFY: "true" - SHUFFLE_OPENSEARCH_URL: https://opensearch:9200 - SHUFFLE_MEMCACHED: shuffle-memcached:11211 - SHUFFLE_OPENSEARCH_USERNAME: admin - SHUFFLE_ORBORUS_STARTUP_DELAY: "\t\t" - SHUFFLE_PASS_APP_PROXY: "FALSE" - SHUFFLE_PASS_WORKER_PROXY: "TRUE" - SHUFFLE_RERUN_SCHEDULE: "300" - SSO_REDIRECT_URL: "" - TZ: "Europe/Amsterdam \t\t\t\t\t" - IS_KUBERNETES: "true" - REGISTRY_URL: "docker-registry:5000" - REGISTRY_AUTH: "false" - SHUFFLE_KUBERNETES_WORKER: "ghcr.io/shuffle/shuffle-worker:latest" -kind: ConfigMap - ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - namespace: shuffle - name: pod-manager -rules: -- apiGroups: [""] - resources: ["pods", "services", "deployments"] - verbs: ["get", "list", "create", "update", "delete"] -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create", "get", "list", "watch", "delete"] -- apiGroups: ["rbac.authorization.k8s.io"] - resources: ["rolebindings", "roles"] - verbs: ["get", "list", "create"] -- apiGroups: ["apps"] - resources: ["deployments", "pods", "services"] - verbs: ["create", "get", "list", "update", "delete"] - ---- - -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-manager-binding - namespace: shuffle -subjects: -- kind: ServiceAccount - name: default - namespace: shuffle -roleRef: - kind: Role - name: pod-manager - apiGroup: rbac.authorization.k8s.io - ---- - -# apiVersion: v1 -# kind: PersistentVolume -# metadata: -# name: shuffle-os-pv -# namespace: shuffle -# spec: -# capacity: -# storage: 10Gi # Adjust the storage size as per your requirements -# accessModes: -# - ReadWriteOnce # This allows read-write access to a single node -# persistentVolumeReclaimPolicy: Retain # Adjust the reclaim policy as per your needs -# storageClassName: standard-rwo # Set the desired storage class -# hostPath: -# path: /mnt/shuffle-data/open-search - -# --- - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - namespace: shuffle - creationTimestamp: null - labels: - io.kompose.service: opensearch-claim0 - name: opensearch-claim0 -spec: - accessModes: - - ReadWriteOnce - storageClassName: standard-rwo - resources: - requests: - storage: 500Mi -status: {} - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: opensearch - name: opensearch -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: opensearch - strategy: {} - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.network/shuffle: "true" - io.kompose.service: opensearch - spec: - # securityContext: - # runAsUser: 1000 # UID - # fsGroup: 1000 # GID - # nodeSelector: - # node: worker1 - initContainers: - - name: volume-permissions - image: busybox - command: ["sh", "-c", "chown -R 1000:1000 /usr/share/opensearch/data"] - volumeMounts: - - name: opensearch-claim0 - mountPath: /usr/share/opensearch/data - containers: - - env: - - name: OPENSEARCH_JAVA_OPTS - value: -Xms1024m -Xmx1024m - #- name: bootstrap.memory_lock - #value: "true" - - name: cluster.initial_master_nodes - value: shuffle-opensearch - - name: cluster.name - value: shuffle-cluster - - name: cluster.routing.allocation.disk.threshold_enabled - value: "false" - - name: discovery.seed_hosts - value: shuffle-opensearch - - name: node.name - value: shuffle-opensearch - - name: node.store.allow_mmap - value: "false" - - name: DB_LOCATION - valueFrom: - configMapKeyRef: - name: env - key: DB_LOCATION - image: opensearchproject/opensearch:2.5.0 - name: shuffle-opensearch - ports: - - containerPort: 9200 - resources: {} - volumeMounts: - - mountPath: /usr/share/opensearch/data - name: opensearch-claim0 - hostname: shuffle-opensearch - restartPolicy: Always - volumes: - - name: opensearch-claim0 - persistentVolumeClaim: - claimName: opensearch-claim0 -status: {} - ---- - -apiVersion: v1 -kind: Service -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: opensearch - name: opensearch -spec: - ports: - - name: "9200" - port: 9200 - targetPort: 9200 - selector: - io.kompose.service: opensearch -status: - loadBalancer: {} - ---- - -# apiVersion: v1 -# kind: PersistentVolume -# metadata: -# namespace: shuffle -# name: shuffle-apps-pv -# spec: -# capacity: -# storage: 5Gi -# accessModes: -# - ReadWriteOnce -# persistentVolumeReclaimPolicy: Retain -# storageClassName: shuffle-data -# hostPath: -# path: /mnt/shuffle-data/backend - -# --- -# apiVersion: v1 -# kind: PersistentVolume -# metadata: -# namespace: shuffle -# name: shuffle-files-pv -# spec: -# capacity: -# storage: 5Gi -# accessModes: -# - ReadWriteOnce -# persistentVolumeReclaimPolicy: Retain -# storageClassName: shuffle-data -# hostPath: -# path: /mnt/shuffle-data/backend - -# --- - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - namespace: shuffle - creationTimestamp: null - labels: - io.kompose.service: backend-files-claim - name: backend-files-claim -spec: - accessModes: - - ReadWriteOnce - storageClassName: standard-rwo - resources: - requests: - storage: 5Gi -# status: {} - ---- - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - namespace: shuffle - creationTimestamp: null - labels: - io.kompose.service: backend-apps-claim - name: backend-apps-claim -spec: - accessModes: - - ReadWriteOnce - storageClassName: standard-rwo - resources: - requests: - storage: 5Gi -# status: {} - ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - name: shuffle-memcached - namespace: shuffle -spec: - replicas: 1 - selector: - matchLabels: - app: shuffle-memcached - template: - metadata: - labels: - app: shuffle-memcached - spec: - containers: - - name: shuffle-memcached - image: memcached:latest - ports: - - containerPort: 11211 - resources: {} - restartPolicy: Always - - ---- - -apiVersion: v1 -kind: Service -metadata: - namespace: shuffle - name: shuffle-memcached -spec: - ports: - - port: 11211 - targetPort: 11211 - selector: - app: shuffle-memcached - type: ClusterIP - ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: backend - name: backend -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: backend - strategy: - type: Recreate - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.network/shuffle: "true" - io.kompose.service: backend - app: shuffle-backend - name: shuffle-backend - spec: - volumes: - - name: shuffle-files - persistentVolumeClaim: - claimName: backend-files-claim - - name: shuffle-apps - persistentVolumeClaim: - claimName: backend-apps-claim -# nodeSelector: -# node: master - containers: - - env: - - name: BACKEND_HOSTNAME - valueFrom: - configMapKeyRef: - key: BACKEND_HOSTNAME - name: env - - name: BACKEND_PORT - valueFrom: - configMapKeyRef: - key: BACKEND_PORT - name: env - - name: BASE_URL - valueFrom: - configMapKeyRef: - key: BASE_URL - name: env - - name: DATASTORE_EMULATOR_HOST - valueFrom: - configMapKeyRef: - key: DATASTORE_EMULATOR_HOST - name: env - - name: DB_LOCATION - valueFrom: - configMapKeyRef: - key: DB_LOCATION - name: env - - name: DOCKER_API_VERSION - valueFrom: - configMapKeyRef: - key: DOCKER_API_VERSION - name: env - - name: ENVIRONMENT_NAME - valueFrom: - configMapKeyRef: - key: ENVIRONMENT_NAME - name: env - - name: FRONTEND_PORT - valueFrom: - configMapKeyRef: - key: FRONTEND_PORT - name: env - - name: FRONTEND_PORT_HTTPS - valueFrom: - configMapKeyRef: - key: FRONTEND_PORT_HTTPS - name: env - - name: HTTPS_PROXY - valueFrom: - configMapKeyRef: - key: HTTPS_PROXY - name: env - - name: HTTP_PROXY - valueFrom: - configMapKeyRef: - key: HTTP_PROXY - name: env - - name: ORBORUS_CONTAINER_NAME - valueFrom: - configMapKeyRef: - key: ORBORUS_CONTAINER_NAME - name: env - - name: ORG_ID - valueFrom: - configMapKeyRef: - key: ORG_ID - name: env - - name: OUTER_HOSTNAME - valueFrom: - configMapKeyRef: - key: OUTER_HOSTNAME - name: env - - name: SHUFFLE_APP_DOWNLOAD_LOCATION - valueFrom: - configMapKeyRef: - key: SHUFFLE_APP_DOWNLOAD_LOCATION - name: env - - name: SHUFFLE_APP_FORCE_UPDATE - valueFrom: - configMapKeyRef: - key: SHUFFLE_APP_FORCE_UPDATE - name: env - - name: SHUFFLE_APP_HOTLOAD_FOLDER - valueFrom: - configMapKeyRef: - key: SHUFFLE_APP_HOTLOAD_FOLDER - name: env - - name: SHUFFLE_APP_HOTLOAD_LOCATION - valueFrom: - configMapKeyRef: - key: SHUFFLE_APP_HOTLOAD_LOCATION - name: env - - name: SHUFFLE_BASE_IMAGE_NAME - valueFrom: - configMapKeyRef: - key: SHUFFLE_BASE_IMAGE_NAME - name: env - - name: SHUFFLE_BASE_IMAGE_REGISTRY - valueFrom: - configMapKeyRef: - key: SHUFFLE_BASE_IMAGE_REGISTRY - name: env - - name: SHUFFLE_BASE_IMAGE_TAG_SUFFIX - valueFrom: - configMapKeyRef: - key: SHUFFLE_BASE_IMAGE_TAG_SUFFIX - name: env - - name: SHUFFLE_CHAT_DISABLED - valueFrom: - configMapKeyRef: - key: SHUFFLE_CHAT_DISABLED - name: env - - name: SHUFFLE_CONTAINER_AUTO_CLEANUP - valueFrom: - configMapKeyRef: - key: SHUFFLE_CONTAINER_AUTO_CLEANUP - name: env - - name: SHUFFLE_DEFAULT_APIKEY - valueFrom: - configMapKeyRef: - key: SHUFFLE_DEFAULT_APIKEY - name: env - - name: SHUFFLE_DEFAULT_PASSWORD - valueFrom: - configMapKeyRef: - key: SHUFFLE_DEFAULT_PASSWORD - name: env - - name: SHUFFLE_DEFAULT_USERNAME - valueFrom: - configMapKeyRef: - key: SHUFFLE_DEFAULT_USERNAME - name: env - - name: SHUFFLE_DOWNLOAD_AUTH_BRANCH - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_AUTH_BRANCH - name: env - - name: SHUFFLE_DOWNLOAD_AUTH_PASSWORD - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_AUTH_PASSWORD - name: env - - name: SHUFFLE_DOWNLOAD_AUTH_USERNAME - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_AUTH_USERNAME - name: env - - name: SHUFFLE_DOWNLOAD_WORKFLOW_BRANCH - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_WORKFLOW_BRANCH - name: env - - name: SHUFFLE_DOWNLOAD_WORKFLOW_LOCATION - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_WORKFLOW_LOCATION - name: env - - name: SHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_WORKFLOW_PASSWORD - name: env - - name: SHUFFLE_DOWNLOAD_WORKFLOW_USERNAME - valueFrom: - configMapKeyRef: - key: SHUFFLE_DOWNLOAD_WORKFLOW_USERNAME - name: env - - name: SHUFFLE_ELASTIC - valueFrom: - configMapKeyRef: - key: SHUFFLE_ELASTIC - name: env - - name: SHUFFLE_ENCRYPTION_MODIFIER - valueFrom: - configMapKeyRef: - key: SHUFFLE_ENCRYPTION_MODIFIER - name: env - - name: SHUFFLE_FILE_LOCATION - valueFrom: - configMapKeyRef: - key: SHUFFLE_FILE_LOCATION - name: env - - name: SHUFFLE_LOGS_DISABLED - valueFrom: - configMapKeyRef: - key: SHUFFLE_LOGS_DISABLED - name: env - - name: SHUFFLE_OPENSEARCH_APIKEY - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_APIKEY - name: env - - name: SHUFFLE_MEMCACHED - valueFrom: - configMapKeyRef: - key: SHUFFLE_MEMCACHED - name: env - - name: SHUFFLE_OPENSEARCH_CERTIFICATE_FILE - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_CERTIFICATE_FILE - name: env - - name: SHUFFLE_OPENSEARCH_CLOUDID - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_CLOUDID - name: env - - name: SHUFFLE_OPENSEARCH_INDEX_PREFIX - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_INDEX_PREFIX - name: env - - name: SHUFFLE_OPENSEARCH_PASSWORD - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_PASSWORD - name: env - - name: SHUFFLE_OPENSEARCH_PROXY - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_PROXY - name: env - - name: SHUFFLE_OPENSEARCH_SKIPSSL_VERIFY - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_SKIPSSL_VERIFY - name: env - - name: SHUFFLE_OPENSEARCH_URL - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_URL - name: env - - name: SHUFFLE_OPENSEARCH_USERNAME - valueFrom: - configMapKeyRef: - key: SHUFFLE_OPENSEARCH_USERNAME - name: env - - name: SHUFFLE_ORBORUS_STARTUP_DELAY - valueFrom: - configMapKeyRef: - key: SHUFFLE_ORBORUS_STARTUP_DELAY - name: env - - name: SHUFFLE_PASS_APP_PROXY - valueFrom: - configMapKeyRef: - key: SHUFFLE_PASS_APP_PROXY - name: env - - name: SHUFFLE_PASS_WORKER_PROXY - valueFrom: - configMapKeyRef: - key: SHUFFLE_PASS_WORKER_PROXY - name: env - - name: SHUFFLE_RERUN_SCHEDULE - valueFrom: - configMapKeyRef: - key: SHUFFLE_RERUN_SCHEDULE - name: env - - name: SSO_REDIRECT_URL - valueFrom: - configMapKeyRef: - key: SSO_REDIRECT_URL - name: env - - name: TZ - valueFrom: - configMapKeyRef: - key: TZ - name: env - - name: IS_KUBERNETES - valueFrom: - configMapKeyRef: - key: IS_KUBERNETES - name: env - - name: REGISTRY_URL - valueFrom: - configMapKeyRef: - key: REGISTRY_URL - name: env - - name: REGISTRY_AUTH - valueFrom: - configMapKeyRef: - key: REGISTRY_AUTH - name: env - image: ghcr.io/shuffle/shuffle-backend:latest - imagePullPolicy: Always - name: shuffle-backend - ports: - - containerPort: 5001 - resources: {} - volumeMounts: - - name: shuffle-apps - mountPath: /app/generated - - name: shuffle-files - mountPath: /shuffle-files - restartPolicy: Always -status: {} - ---- - -apiVersion: v1 -kind: Service -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: backend - name: shuffle-backend -spec: - ports: - - name: "5001" - port: 5001 - targetPort: 5001 - selector: - io.kompose.service: backend -status: - loadBalancer: {} - ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: frontend - name: frontend -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: frontend - strategy: {} - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.network/shuffle: "true" - io.kompose.service: frontend - spec: - containers: - - name: shuffle-frontend - image: ghcr.io/shuffle/shuffle-frontend:latest - env: - - name: BACKEND_HOSTNAME - valueFrom: - configMapKeyRef: - key: BACKEND_HOSTNAME - name: env - ports: - - containerPort: 80 - - containerPort: 443 - resources: {} - hostname: shuffle-frontend - restartPolicy: Always -status: {} - ---- - -apiVersion: v1 -kind: Service -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: frontend - name: frontend -spec: - type: NodePort - ports: - - name: "80" - port: 80 - targetPort: 80 - nodePort: 30007 - - name: "443" - port: 443 - targetPort: 443 - nodePort: 30008 - selector: - io.kompose.service: frontend -# status: -# loadBalancer: {} - ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - namespace: shuffle - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: orborus - name: orborus -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: orborus - strategy: {} - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.network/shuffle: "true" - io.kompose.service: orborus - spec: - containers: - - env: - - name: BASE_URL - value: "http://shuffle-backend:5001" - - name: DOCKER_API_VERSION - value: "1.40" - - name: ENVIRONMENT_NAME - value: Shuffle - - name: ORG_ID - value: Shuffle - - name: SHUFFLE_APP_SDK_VERSION - value: latest - - name: SHUFFLE_SCALE_REPLICAS - value: "5" - - name: SHUFFLE_SWARM_CONFIG - value: run - - name: SHUFFLE_WORKER_VERSION - value: latest - - name: IS_KUBERNETES - valueFrom: - configMapKeyRef: - key: IS_KUBERNETES - name: env - - name: KUBERNETES_NAMESPACE - valueFrom: - configMapKeyRef: - key: KUBERNETES_NAMESPACE - name: env - - name: REGISTRY_URL - valueFrom: - configMapKeyRef: - key: REGISTRY_URL - name: env - - name: SHUFFLE_KUBERNETES_WORKER - valueFrom: - configMapKeyRef: - key: SHUFFLE_KUBERNETES_WORKER - name: env - - name: SHUFFLE_MEMCACHED - valueFrom: - configMapKeyRef: - key: SHUFFLE_MEMCACHED - name: env - image: ghcr.io/shuffle/shuffle-orborus:latest - #imagePullPolicy: Never - name: shuffle-orborus - resources: {} - hostname: shuffle-orborus - restartPolicy: Always -status: {} From 9d62427f9168080447543cdefeb183919b0fe019 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 13:35:49 +0200 Subject: [PATCH 09/20] Configure frontend service as NodePort Added NodePort service type with HTTP and HTTPS ports. --- functions/kubernetes/charts/shuffle/values.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index 00b53a29..a3729458 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -885,6 +885,16 @@ frontend: ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ ## labels: {} + type: NodePort + ports: + - name: http + port: 80 + targetPort: 3001 + nodePort: 30080 + - name: https + port: 443 + targetPort: 3443 + nodePort: 30443 ## ServiceAccount configuration ## From 2628b9ee8097722b76fb86474e0ad24349c4733d Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 13:39:47 +0200 Subject: [PATCH 10/20] Update Helm chart version to 2.1.0 --- functions/kubernetes/charts/shuffle/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/kubernetes/charts/shuffle/Chart.yaml b/functions/kubernetes/charts/shuffle/Chart.yaml index b01df7da..c1e36716 100644 --- a/functions/kubernetes/charts/shuffle/Chart.yaml +++ b/functions/kubernetes/charts/shuffle/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: shuffle description: A Helm chart for deploying Shuffle on Kubernetes type: application -version: 0.0.0 # Set during publishing in GitHub actions +version: 2.1.0 # Set during publishing in GitHub actions appVersion: latest # Overwritten during publishing in GitHub actions dependencies: - name: common From add5b35b9835da5ab3c3458ec867ef2f60bdd253 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 13:50:32 +0200 Subject: [PATCH 11/20] Update values.yaml --- functions/kubernetes/charts/shuffle/values.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index a3729458..5937ecdd 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -1899,14 +1899,6 @@ volumePermissions: opensearch: enabled: true - image: - registry: docker.io - repository: opensearchproject/opensearch - tag: "3.2.0" - digest: "" - pullPolicy: IfNotPresent - pullSecrets: [] - master: replicaCount: 1 data: From cd91c13f081ba0fc2bed30f9a7adf8c63d11f9d7 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 14:23:43 +0200 Subject: [PATCH 12/20] Delete functions/kubernetes/orborus.yaml --- functions/kubernetes/orborus.yaml | 80 ------------------------------- 1 file changed, 80 deletions(-) delete mode 100644 functions/kubernetes/orborus.yaml diff --git a/functions/kubernetes/orborus.yaml b/functions/kubernetes/orborus.yaml deleted file mode 100644 index 000d9fbd..00000000 --- a/functions/kubernetes/orborus.yaml +++ /dev/null @@ -1,80 +0,0 @@ ---- - -apiVersion: rbac.authorization.k8s.io/v1 -kind: Role -metadata: - namespace: default - name: pod-manager -rules: -- apiGroups: [""] - resources: ["pods"] - verbs: ["get", "list", "create", "update", "delete"] -- apiGroups: ["batch"] - resources: ["jobs"] - verbs: ["create", "get", "list", "watch", "delete"] - ---- - -apiVersion: rbac.authorization.k8s.io/v1 -kind: RoleBinding -metadata: - name: pod-manager-binding - namespace: default -subjects: -- kind: ServiceAccount - name: default - namespace: default -roleRef: - kind: Role - name: pod-manager - apiGroup: rbac.authorization.k8s.io - ---- - -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.service: orborus - name: orborus -spec: - replicas: 1 - selector: - matchLabels: - io.kompose.service: orborus - strategy: {} - template: - metadata: - annotations: - kompose.cmd: kompose convert -f docker-compose.yml - kompose.version: 1.26.0 (40646f47) - creationTimestamp: null - labels: - io.kompose.network/shuffle: "true" - io.kompose.service: orborus - spec: - containers: - - env: - - name: BASE_URL - value: "https://shuffler.io" - - name: SHUFFLE_SCALE_REPLICAS - value: "7" - - name: IS_KUBERNETES - value: "true" - - name: ENVIRONMENT_NAME - value: "environment test" - - name: ORG - value: "9c938e5b-d812-40d9-92f0-93783f43ec0d" - - name: AUTH - value: "3663a270-bb3a-4678-a365-d879601a1a0c" - - image: ghcr.io/shuffle/shuffle-orborus:latest - #imagePullPolicy: Never - name: shuffle-orborus - resources: {} - hostname: shuffle-orborus - restartPolicy: Always From 20248686fc373fd39353e4e9088a84a3f46ace56 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 14:23:59 +0200 Subject: [PATCH 13/20] Delete functions/kubernetes/generate_certs.sh --- functions/kubernetes/generate_certs.sh | 39 -------------------------- 1 file changed, 39 deletions(-) delete mode 100644 functions/kubernetes/generate_certs.sh diff --git a/functions/kubernetes/generate_certs.sh b/functions/kubernetes/generate_certs.sh deleted file mode 100644 index cb316a72..00000000 --- a/functions/kubernetes/generate_certs.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -# Check if ifconfig is present and use it to get the default IP -if command -v ifconfig &> /dev/null; then - default_ip=$(ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}') -# Check if ip is present and use it if ifconfig is not available -elif command -v ip &> /dev/null; then - default_ip=$(ip addr show | grep -oP 'inet \K[\d.]+' | sed -n '2p') -# If both tools are not available, error out -else - echo "Error: Neither ifconfig nor ip command found in the machine. Exiting.." - exit 1 -fi - - -read -p "Enter your node IP to use for cert generation (default is $default_ip): " custom_ip -# Use localhost as the default value -node_ip=${custom_ip:-$default_ip} - -echo "Using node IP: $node_ip to generate SSL certs!" - -mkdir -p certs - -# Generate CA key -openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.key -x509 -days 365 -out certs/reg.crt -subj "/CN=$node_ip" - -# generate a random string -random_string=$(openssl rand -hex 3) - -echo "Starting docker registry with name shuffle-local-registry-$random_string.." - -docker run -d -p 5000:5000 --restart=always --name "shuffle-local-registry-$random_string" \ - -v $(pwd)/certs:/certs \ - -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.crt \ - -e REGISTRY_HTTP_TLS_KEY=/certs/reg.key \ - registry:2 - -echo "Set up certs and launched docker registry successfully!" - -echo "Please put $node_ip:5000 as the REGISTRY_URL in all-in-one.yaml file" \ No newline at end of file From 43415c5fe485cbfbb78ae9594447d26acdba0f3f Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 14:24:06 +0200 Subject: [PATCH 14/20] Delete functions/kubernetes/setup_registry.sh --- functions/kubernetes/setup_registry.sh | 36 -------------------------- 1 file changed, 36 deletions(-) delete mode 100755 functions/kubernetes/setup_registry.sh diff --git a/functions/kubernetes/setup_registry.sh b/functions/kubernetes/setup_registry.sh deleted file mode 100755 index be4c266f..00000000 --- a/functions/kubernetes/setup_registry.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash -# Check if ifconfig is present and use it to get the default IP -if command -v ifconfig &> /dev/null; then - default_ip=$(ifconfig | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}') -# Check if ip is present and use it if ifconfig is not available -elif command -v ip &> /dev/null; then - default_ip=$(ip addr show | grep -oP 'inet \K[\d.]+' | sed -n '2p') -# If both tools are not available, error out -else - echo "Error: Neither ifconfig nor ip command found in the machine. Exiting.." - exit 1 -fi - - -read -p "Enter your node IP to use for cert generation (default is $default_ip): " custom_ip -# Use localhost as the default value -node_ip=${custom_ip:-$default_ip} - -echo "Using node IP: $node_ip to generate SSL certs!" - -mkdir -p certs - -# Generate CA key -openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/reg.key -x509 -days 365 -out certs/reg.crt -subj "/CN=$node_ip" - -echo "Generated certs/reg.key and certs/reg.crt!" - -echo -e "Please run:\n" -echo "docker run -d -p 5000:5000 --restart=always --name "shuffle-local-registry" \ - -v $(pwd)/certs:/certs \ - -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/reg.crt \ - -e REGISTRY_HTTP_TLS_KEY=/certs/reg.key \ - registry:2" - -echo -e "\nnow to start the reigstry :)!" - From 64284f51384fbd1e5d5c2162daae2a19c1065a94 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 14:26:52 +0200 Subject: [PATCH 15/20] Update README.md --- functions/kubernetes/README.md | 69 ++-------------------------------- 1 file changed, 4 insertions(+), 65 deletions(-) diff --git a/functions/kubernetes/README.md b/functions/kubernetes/README.md index a54884e8..a98ef015 100644 --- a/functions/kubernetes/README.md +++ b/functions/kubernetes/README.md @@ -1,68 +1,7 @@ ## How to deploy Shuffle on Kubernetes? -### Prerequisites: -- Clone the https://github.com/shuffle/shuffle repository using Git then, navigate to the functions/kubernetes directory, which contains all the necessary Kubernetes configuration files for deployment. -- [Running a Kubernetes cluster](https://kubernetes.io/docs/setup/). You can do that with either minikube or run the cluster locally. -- Ensure you have a local Docker registry set up to store and manage Docker images for applications built with Shuffle. While the registry is crucial for handling custom-built apps, you’ll still be able to run workflows without it. To setup a docker registry, if you have docker installed on one of your node run following commands. - - - ``` - chmod +x generate_certs.sh - ./setup_registry.sh - ``` - - > This will give you a NODE_IP which is you're local IP if you're not sure about what to use. - - > **Make sure that port 5000 is not exposed to the internet!** - -- 8 GB RAM and 4 CPUs are recommended as **minimum configs** for running Shuffle on Kubernetes. K8s is a resource-intensive application, and you may experience performance issues if you run it on a machine with fewer resources. - -- If you've used the above commands to set up a registry, you'll need to skip an SSL verification for your registry. If you're using Containerd as a runtime - add the following lines in /etc/containerd/config.toml - ``` - [plugins."io.containerd.grpc.v1.cri".registry.mirrors.""] - endpoint = ["https://"] - - [plugins."io.containerd.grpc.v1.cri".registry.configs."".tls] - insecure_skip_verify = true - ``` - -### Instructions -Step 1: Create a namespace called shuffle in a cluster by running ```kubectl create ns shuffle```. - -Step 2: Open the ```all-in-one.yaml``` file and review the configuration values. Change the value of REGISTRY_URL with ':5000' where the registry is at. Adjust other variables as per your deployment requirements; otherwise, the application will deploy using the default settings provided within the file. Then apply the configmap and deploy with ```kubectl apply -f all-in-one.yaml -n shuffle``` - -Step 3: Now, open ```https://:30008``` or ```http://:30007```. You should be seeing a signup page. NODE_IP should be where the frontend is deployed. - -### Dev Mode - -1. Run backend and orborus with the environment variable `IS_KUBERNETES=true`: - -```bash -export IS_KUBERNETES=true -``` - -2. Turn on the k8s engine with minikube: - -```bash -minikube start -``` - -3. To use the worker scale feature, build the image with the following command: - -```bash -$NAME=shuffle-worker-scale -$VERSION=1.2.0 - -minikube build . -t shuffle/shuffle:$NAME -t shuffle/shuffle:$NAME_$VERSION -t docker.pkg.github.com/shuffle/shuffle/$NAME:$VERSION -t ghcr.io/shuffle/$NAME:$VERSION -t ghcr.io/shuffle/$NAME:nightly -t ghcr.io/shuffle/$NAME:$VERSION -t ghcr.io/shuffle/$NAME:nightly -t ghcr.io/shuffle/$NAME:latest -``` - -4. To run executions, Make sure to do the following: - -```bash -kubectl create role pod-creator --namespace=default --verb=create --resource=pods -kubectl create rolebinding pod-creator-binding --namespace=default --role=pod-creator --serviceaccount=default:default -``` - - +1. Make sure you have a Kubernetes cluster available. MiniKube works for testing. +2. Install `helm install shuffle oci://ghcr.io/shuffle/charts/shuffle --namespace shuffle --create-namespace` +3. Tweak the configuration files if needed! This is not meant to be a one-size-fits-all +More details in the [kubernetes/Charts/Shuffle folder.](https://github.com/Shuffle/Shuffle/tree/main/functions/kubernetes/charts/shuffle#usage) From f81e39e2358619e4b51477a1ad3bb13cfb944582 Mon Sep 17 00:00:00 2001 From: Frikky Date: Tue, 30 Sep 2025 14:29:05 +0200 Subject: [PATCH 16/20] Update README.md --- functions/kubernetes/README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/functions/kubernetes/README.md b/functions/kubernetes/README.md index a98ef015..c2d2c3d1 100644 --- a/functions/kubernetes/README.md +++ b/functions/kubernetes/README.md @@ -1,7 +1,12 @@ -## How to deploy Shuffle on Kubernetes? +# Shuffle in Kubernetes 1. Make sure you have a Kubernetes cluster available. MiniKube works for testing. 2. Install `helm install shuffle oci://ghcr.io/shuffle/charts/shuffle --namespace shuffle --create-namespace` 3. Tweak the configuration files if needed! This is not meant to be a one-size-fits-all More details in the [kubernetes/Charts/Shuffle folder.](https://github.com/Shuffle/Shuffle/tree/main/functions/kubernetes/charts/shuffle#usage) + +## Architecture +Here is the default architecture it follows, with the "Frontend" being the exposed container you interact with. + +image From 160352f5f326c5c7156884664f629729e008438c Mon Sep 17 00:00:00 2001 From: yashsinghcodes Date: Wed, 1 Oct 2025 19:23:27 +0530 Subject: [PATCH 17/20] fixed auto deploy config --- .../kubernetes/charts/shuffle/Chart.yaml | 4 +- .../kubernetes/charts/shuffle/values.yaml | 42 +++++++++++++++---- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/functions/kubernetes/charts/shuffle/Chart.yaml b/functions/kubernetes/charts/shuffle/Chart.yaml index c1e36716..e286e11f 100644 --- a/functions/kubernetes/charts/shuffle/Chart.yaml +++ b/functions/kubernetes/charts/shuffle/Chart.yaml @@ -9,6 +9,6 @@ dependencies: version: ^2.23.0 repository: oci://registry-1.docker.io/bitnamicharts - name: opensearch - version: ^1.3.0 - repository: oci://registry-1.docker.io/bitnamicharts + version: 2.0.10 + repository: https://charts.bitnami.com/bitnami condition: opensearch.enabled diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index 5937ecdd..d0b39608 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -19,6 +19,8 @@ global: defaultStorageClass: "" ## Compatibility adaptations for Kubernetes platforms ## + security: + allowInsecureImages: true compatibility: ## Compatibility adaptations for Openshift ## @@ -1197,7 +1199,19 @@ orborus: ## - name: FOO ## value: "bar" ## - extraEnvVars: [] + extraEnvVars: + - name: SHUFFLE_APP_SDK_TIMEOUT + value: "300" + - name: SHUFFLE_ORBORUS_EXCUTION_CONCURRENCY + value: "7" + - name: ENVIRONMENT_NAME + value: "Shuffle" + - name: BASE_URL + value: "http://shuffle-backend:5001" + - name: SHUFFLE_STATS_DISABLED + value: "true" + - name: CLEANUP + value: "false" ## @param orborus.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for orborus containers ## extraEnvVarsCM: "" @@ -1841,7 +1855,7 @@ volumePermissions: ## @param volumePermissions.image.pullSecrets OS Shell + Utility image pull secrets ## image: - registry: docker.io + registry: public.ecr.aws repository: bitnami/os-shell tag: 12-debian-12-r30 pullPolicy: IfNotPresent @@ -1898,17 +1912,31 @@ volumePermissions: ## opensearch: enabled: true - + + sysctlImage: + enabled: false + + image: + registry: public.ecr.aws + repository: bitnami/opensearch + tag: "3.2.0" + master: replicaCount: 1 + extraEnvVars: + - { name: OPENSEARCH_JAVA_OPTS, value: "-Xms1g -Xmx1g" } + - { name: DISABLE_PERFORMANCE_ANALYZER_AGENT_CLI, value: "true" } + - { name: node.store.allow_mmap, value: "false" } + - { name: cluster.routing.allocation.disk.threshold_enabled, value: "false" } + data: - replicaCount: 1 + replicaCount: 0 coordinating: - replicaCount: 1 + replicaCount: 0 ingest: - replicaCount: 1 + replicaCount: 0 dashboards: - enabled: true + enabled: false ## @section Vault Parameters ## From dcc20e9c844f464abe1313211493cf0ded77ff61 Mon Sep 17 00:00:00 2001 From: yashsinghcodes Date: Thu, 2 Oct 2025 01:58:12 +0530 Subject: [PATCH 18/20] fix default k8 deployment --- .../kubernetes/charts/shuffle/values.yaml | 30 ++++++++----------- functions/onprem/orborus/orborus.go | 2 +- functions/onprem/worker/worker.go | 2 +- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index d0b39608..1e6af05e 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -76,7 +76,7 @@ diagnosticMode: shuffle: ## @param shuffle.baseUrl The external base URL under which Shuffle is reachable. ## - baseUrl: "" + #baseUrl: "" ## ref: https://shuffler.io/docs/organizations ## This chart only supports single-tenant deployments at the moment @@ -527,6 +527,8 @@ backend: ## @param backend.openSearch.username The username that is used for authenticating with OpenSearch ## username: admin + + password: StrongShufflePassword321! ## @param backend.openSearch.certificateFile The path to a custom OpenSearch certificate file ## certificateFile: "" @@ -1204,14 +1206,12 @@ orborus: value: "300" - name: SHUFFLE_ORBORUS_EXCUTION_CONCURRENCY value: "7" - - name: ENVIRONMENT_NAME - value: "Shuffle" - - name: BASE_URL - value: "http://shuffle-backend:5001" - name: SHUFFLE_STATS_DISABLED value: "true" - - name: CLEANUP - value: "false" + - name: KUBERNETES_NAMESPACE + value: "shuffle" + - name: SHUFFLE_BASE_IMAGE_NAME + value: "frikky/shuffle" ## @param orborus.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for orborus containers ## extraEnvVarsCM: "" @@ -1855,8 +1855,8 @@ volumePermissions: ## @param volumePermissions.image.pullSecrets OS Shell + Utility image pull secrets ## image: - registry: public.ecr.aws - repository: bitnami/os-shell + registry: docker.io + repository: bitnamilegacy/os-shell tag: 12-debian-12-r30 pullPolicy: IfNotPresent ## Optionally specify an array of imagePullSecrets. @@ -1917,20 +1917,14 @@ opensearch: enabled: false image: - registry: public.ecr.aws - repository: bitnami/opensearch + registry: docker.io + repository: bitnamilegacy/opensearch tag: "3.2.0" master: replicaCount: 1 - extraEnvVars: - - { name: OPENSEARCH_JAVA_OPTS, value: "-Xms1g -Xmx1g" } - - { name: DISABLE_PERFORMANCE_ANALYZER_AGENT_CLI, value: "true" } - - { name: node.store.allow_mmap, value: "false" } - - { name: cluster.routing.allocation.disk.threshold_enabled, value: "false" } - data: - replicaCount: 0 + replicaCount: 1 coordinating: replicaCount: 0 ingest: diff --git a/functions/onprem/orborus/orborus.go b/functions/onprem/orborus/orborus.go index ab9b2230..2fd9cd0f 100755 --- a/functions/onprem/orborus/orborus.go +++ b/functions/onprem/orborus/orborus.go @@ -1586,7 +1586,7 @@ func initializeImages() { if len(os.Getenv("REGISTRY_URL")) > 0 { baseimageregistry = os.Getenv("REGISTRY_URL") } else { - os.Setenv("REGISTRY_URL", baseimageregistry) + // os.Setenv("REGISTRY_URL", baseimageregistry) } os.Setenv("SHUFFLE_BASE_IMAGE_REGISTRY", baseimageregistry) diff --git a/functions/onprem/worker/worker.go b/functions/onprem/worker/worker.go index 6dd41de4..10c1fc8c 100644 --- a/functions/onprem/worker/worker.go +++ b/functions/onprem/worker/worker.go @@ -3893,7 +3893,7 @@ func sendAppRequest(ctx context.Context, incomingUrl, appName string, port int, if attempts < 2 { // Check the service and fix it. if isKubernetes == "true" { - log.Printf("[WARNING] App Redeployment in K8s isn't fully supported yet, but should be done for app %s with image %s.", appName, image) + log.Printf("[WARNING] App Redeployment in K8s isn't fully supported yet, but should be done for app %s with image %s.", appName, image) } else { _, err = findAppInfo(image, appName, true) if err != nil { From 7947c6dcaa9fc19454438b8d0f8d54b2cda63a3c Mon Sep 17 00:00:00 2001 From: yashsinghcodes Date: Thu, 2 Oct 2025 02:01:36 +0530 Subject: [PATCH 19/20] don't allow insecure images --- functions/kubernetes/charts/shuffle/values.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index 1e6af05e..4f46e482 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -19,8 +19,6 @@ global: defaultStorageClass: "" ## Compatibility adaptations for Kubernetes platforms ## - security: - allowInsecureImages: true compatibility: ## Compatibility adaptations for Openshift ## From 2fb54766e03a4178ed9c91efabb29fc46b9daca4 Mon Sep 17 00:00:00 2001 From: monilprajapati Date: Thu, 2 Oct 2025 18:05:24 +0530 Subject: [PATCH 20/20] nunito font issue --- frontend/src/codeeditor-index.css | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/src/codeeditor-index.css b/frontend/src/codeeditor-index.css index c87341f5..9ccc0acd 100644 --- a/frontend/src/codeeditor-index.css +++ b/frontend/src/codeeditor-index.css @@ -1,9 +1,7 @@ -@import url('https://fonts.googleapis.com/css?family=Nunito+Sans'); - body { margin: 0; padding: 0; - font-family: "Nunito Sans", sans-serif; + font-family: "Segoe UI", Roboto, "Noto Sans", "Liberation Sans", Arial, "Helvetica Neue", -apple-system, BlinkMacSystemFont, "Nunito Sans", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }