From 78b1a24c9927bd1715ea53d07eb4b378d7eeb166 Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Fri, 8 Dec 2023 15:35:22 +0700 Subject: [PATCH 01/13] Update Merlin helm-charts --- charts/caraml/Chart.yaml | 4 +-- charts/caraml/README.md | 4 +-- charts/merlin/Chart.yaml | 4 +-- charts/merlin/README.md | 36 +++++++++++++++----------- charts/merlin/templates/_config.tpl | 40 ++++++++--------------------- charts/merlin/values.yaml | 37 ++++++++++++++------------ 6 files changed, 59 insertions(+), 66 deletions(-) diff --git a/charts/caraml/Chart.yaml b/charts/caraml/Chart.yaml index 5873cc2e..9266a76e 100644 --- a/charts/caraml/Chart.yaml +++ b/charts/caraml/Chart.yaml @@ -8,7 +8,7 @@ dependencies: - condition: merlin.enabled name: merlin repository: https://caraml-dev.github.io/helm-charts - version: 0.13.4 + version: 0.13.7 - condition: turing.enabled name: turing repository: https://caraml-dev.github.io/helm-charts @@ -72,4 +72,4 @@ maintainers: name: caraml-dev name: caraml type: application -version: 0.8.15 +version: 0.8.16 diff --git a/charts/caraml/README.md b/charts/caraml/README.md index 5cab6d78..32dbe1c0 100644 --- a/charts/caraml/README.md +++ b/charts/caraml/README.md @@ -1,6 +1,6 @@ # caraml -![Version: 0.8.15](https://img.shields.io/badge/Version-0.8.15-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) +![Version: 0.8.16](https://img.shields.io/badge/Version-0.8.16-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) A Helm chart for deploying CaraML components @@ -21,7 +21,7 @@ A Helm chart for deploying CaraML components | https://caraml-dev.github.io/helm-charts | clusterLocalGateway(generic-dep-installer) | 0.2.1 | | https://caraml-dev.github.io/helm-charts | istioIngressGateway(generic-dep-installer) | 0.2.1 | | https://caraml-dev.github.io/helm-charts | istiod(generic-dep-installer) | 0.2.1 | -| https://caraml-dev.github.io/helm-charts | merlin | 0.13.4 | +| https://caraml-dev.github.io/helm-charts | merlin | 0.13.7 | | https://caraml-dev.github.io/helm-charts | mlp | 0.6.3 | | https://caraml-dev.github.io/helm-charts | turing | 0.3.5 | | https://caraml-dev.github.io/helm-charts | xp-management | 0.2.9 | diff --git a/charts/merlin/Chart.yaml b/charts/merlin/Chart.yaml index 16358e91..3bf1c4bf 100644 --- a/charts/merlin/Chart.yaml +++ b/charts/merlin/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: v0.36.0 +appVersion: v0.37.0 dependencies: - alias: merlin-postgresql condition: merlin-postgresql.enabled @@ -33,4 +33,4 @@ maintainers: - email: caraml-dev@caraml.dev name: caraml-dev name: merlin -version: 0.13.6 +version: 0.13.7 diff --git a/charts/merlin/README.md b/charts/merlin/README.md index d85f796a..085b2333 100644 --- a/charts/merlin/README.md +++ b/charts/merlin/README.md @@ -1,8 +1,8 @@ # merlin --- -![Version: 0.13.6](https://img.shields.io/badge/Version-0.13.6-informational?style=flat-square) -![AppVersion: v0.36.0](https://img.shields.io/badge/AppVersion-v0.36.0-informational?style=flat-square) +![Version: 0.13.7](https://img.shields.io/badge/Version-0.13.7-informational?style=flat-square) +![AppVersion: v0.37.0](https://img.shields.io/badge/AppVersion-v0.37.0-informational?style=flat-square) Kubernetes-friendly ML model management, deployment, and serving. @@ -208,24 +208,30 @@ The following table lists the configurable parameters of the Merlin chart and th | environmentConfigs[0].queue_resource_percentage | string | `"20"` | | | environmentConfigs[0].region | string | `"id"` | | | global.protocol | string | `"http"` | | -| imageBuilder.builderConfig.BaseImages."3.8.*".BuildContextURI | string | `"git://github.com/gojek/merlin.git#refs/tags/v0.1"` | | -| imageBuilder.builderConfig.BaseImages."3.8.*".DockerfilePath | string | `"docker/Dockerfile"` | | -| imageBuilder.builderConfig.BaseImages."3.8.*".ImageName | string | `"pyfunc-py38:v0.1.0"` | | -| imageBuilder.builderConfig.BaseImages."3.8.*".MainAppPath | string | `"/merlin-spark-app/main.py"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | +| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | +| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0"` | | | imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | | imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | | imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | -| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.6.0"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | +| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | | imageBuilder.builderConfig.MaximumRetry | int | `3` | | | imageBuilder.builderConfig.NodeSelectors | object | `{}` | | -| imageBuilder.builderConfig.PredictionJobBaseImages."3.8.*".BuildContextURI | string | `"git://github.com/gojek/merlin.git#refs/tags/v0.1"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages."3.8.*".DockerfilePath | string | `"docker/app.Dockerfile"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages."3.8.*".ImageName | string | `"pyspark-py38:v0.1.0"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages."3.8.*".MainAppPath | string | `"/merlin-spark-app/main.py"` | | -| imageBuilder.builderConfig.Resources.Limits.CPU | string | `"1"` | | -| imageBuilder.builderConfig.Resources.Limits.Memory | string | `"1Gi"` | | -| imageBuilder.builderConfig.Resources.Requests.CPU | string | `"1"` | | -| imageBuilder.builderConfig.Resources.Requests.Memory | string | `"512Mi"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.37.0"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | | imageBuilder.builderConfig.Retention | string | `"48h"` | | | imageBuilder.builderConfig.SafeToEvict | bool | `false` | | | imageBuilder.builderConfig.Tolerations | list | `[]` | | diff --git a/charts/merlin/templates/_config.tpl b/charts/merlin/templates/_config.tpl index 1ba5afe0..726d971f 100644 --- a/charts/merlin/templates/_config.tpl +++ b/charts/merlin/templates/_config.tpl @@ -16,35 +16,17 @@ # Now we have access to the "real" root and current contexts # just as if we were outside of include/define: ImageBuilderConfig: - BaseImages: - 3.8.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py38:{{ printf "%s" $tag }} - DockerfilePath: "python/pyfunc-server/docker/Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" - 3.9.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py39:{{ printf "%s" $tag }} - DockerfilePath: "python/pyfunc-server/docker/Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" - 3.10.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py310:{{ printf "%s" $tag }} - DockerfilePath: "python/pyfunc-server/docker/Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" - PredictionJobBaseImages: - 3.8.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py38:{{ printf "%s" $tag }} - DockerfilePath: "python/batch-predictor/docker/app.Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" - MainAppPath: "/home/spark/merlin-spark-app/main.py" - 3.9.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py39:{{ printf "%s" $tag }} - DockerfilePath: "python/batch-predictor/docker/app.Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" - MainAppPath: "/home/spark/merlin-spark-app/main.py" - 3.10.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py310:{{ printf "%s" $tag }} - DockerfilePath: "python/batch-predictor/docker/app.Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" - MainAppPath: "/home/spark/merlin-spark-app/main.py" + BaseImage: + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:{{ printf "%s" $tag }} + DockerfilePath: "pyfunc-server/docker/Dockerfile" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" + BuildContextSubPath: "python" + PredictionJobBaseImage: + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base:{{ printf "%s" $tag }} + DockerfilePath: "batch-predictor/docker/app.Dockerfile" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#{{ printf "%s" $reference }}" + BuildContextSubPath: "python" + MainAppPath: "/home/spark/merlin-spark-app/main.py" StandardTransformerConfig: ImageName: ghcr.io/caraml-dev/merlin-transformer:{{ printf "%s" $tag }} {{- end -}} diff --git a/charts/merlin/values.yaml b/charts/merlin/values.yaml index 2a48a302..280a8fcc 100644 --- a/charts/merlin/values.yaml +++ b/charts/merlin/values.yaml @@ -158,10 +158,10 @@ config: MaxAllowedReplica: 20 MerlinURL: /api/merlin/v1 MlpURL: /api - OauthClientID: # to be set via CICD pipeline + OauthClientID: # to be set via CICD pipeline UPIDocumentation: "https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md" - CPUCost: # Unused - MemoryCost: # Unused + CPUCost: # Unused + MemoryCost: # Unused StandardTransformerConfig: ImageName: ghcr.io/caraml-dev/merlin-transformer:1.0.0 SimulationFeast: @@ -266,23 +266,28 @@ imageBuilder: # interactiveMode: IfAvailable # provideClusterInfo: true builderConfig: - BaseImages: - 3.8.*: - ImageName: pyfunc-py38:v0.1.0 - DockerfilePath: "docker/Dockerfile" - BuildContextURI: "git://github.com/gojek/merlin.git#refs/tags/v0.1" - MainAppPath: /merlin-spark-app/main.py + BaseImage: + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0 + DockerfilePath: "pyfunc-server/docker/Dockerfile" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0" + BuildContextSubPath: "python" PredictionJobBaseImages: - 3.8.*: - ImageName: pyspark-py38:v0.1.0 - DockerfilePath: "docker/app.Dockerfile" - BuildContextURI: "git://github.com/gojek/merlin.git#refs/tags/v0.1" - MainAppPath: /merlin-spark-app/main.py + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.37.0 + DockerfilePath: "batch-predictor/docker/app.Dockerfile" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0" + BuildContextSubPath: "python" + MainAppPath: "/home/spark/merlin-spark-app/main.py" BuildNamespace: "mlp" DockerRegistry: "dockerRegistry" BuildTimeout: "30m" - KanikoImage: "gcr.io/kaniko-project/executor:v1.6.0" - Resources: + KanikoImage: "gcr.io/kaniko-project/executor:v1.18.0" + KanikoAdditionalArgs: + - "--cache=true" + - "--compressed-caching=false" + - "--snapshot-mode=redo" + - "--use-new-run" + - "--log-timestamp" + DefaultResources: Requests: CPU: "1" Memory: 512Mi From 6d14072f28bf121ddcea994fe83278753189bf6a Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 14:50:01 +0700 Subject: [PATCH 02/13] Run helm dep update --- charts/caraml/Chart.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/charts/caraml/Chart.lock b/charts/caraml/Chart.lock index 548f2201..19e4b918 100644 --- a/charts/caraml/Chart.lock +++ b/charts/caraml/Chart.lock @@ -4,7 +4,7 @@ dependencies: version: 0.6.4 - name: merlin repository: https://caraml-dev.github.io/helm-charts - version: 0.13.6 + version: 0.13.7 - name: turing repository: https://caraml-dev.github.io/helm-charts version: 0.3.7 @@ -44,5 +44,5 @@ dependencies: - name: cert-manager repository: https://charts.jetstack.io version: v1.8.2 -digest: sha256:63345d3cdfdb506d5ca52c9361aadaa58410f9ccdda78e263832dd0b4e875cdd -generated: "2023-12-07T08:59:09.454202719Z" +digest: sha256:f8f2548a13d442bb899e2e6783189b0a41458620de4c08479ca7b93845267d3c +generated: "2023-12-11T14:49:21.880055+07:00" From edf7e405eed6f5be4e76e02de78ae6573915d98a Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 14:57:50 +0700 Subject: [PATCH 03/13] Revert caraml change --- charts/caraml/Chart.lock | 6 +- charts/caraml/Chart.yaml | 136 ++++----- charts/caraml/README.md | 403 ++++++++++++------------ charts/merlin/Chart.yaml | 60 ++-- charts/merlin/README.md | 645 +++++++++++++++++++-------------------- 5 files changed, 622 insertions(+), 628 deletions(-) diff --git a/charts/caraml/Chart.lock b/charts/caraml/Chart.lock index 19e4b918..5239ea50 100644 --- a/charts/caraml/Chart.lock +++ b/charts/caraml/Chart.lock @@ -4,7 +4,7 @@ dependencies: version: 0.6.4 - name: merlin repository: https://caraml-dev.github.io/helm-charts - version: 0.13.7 + version: 0.13.6 - name: turing repository: https://caraml-dev.github.io/helm-charts version: 0.3.7 @@ -44,5 +44,5 @@ dependencies: - name: cert-manager repository: https://charts.jetstack.io version: v1.8.2 -digest: sha256:f8f2548a13d442bb899e2e6783189b0a41458620de4c08479ca7b93845267d3c -generated: "2023-12-11T14:49:21.880055+07:00" +digest: sha256:63345d3cdfdb506d5ca52c9361aadaa58410f9ccdda78e263832dd0b4e875cdd +generated: "2023-12-07T08:59:09.454202719Z" \ No newline at end of file diff --git a/charts/caraml/Chart.yaml b/charts/caraml/Chart.yaml index efe434aa..5df45803 100644 --- a/charts/caraml/Chart.yaml +++ b/charts/caraml/Chart.yaml @@ -1,75 +1,75 @@ apiVersion: v2 appVersion: 1.0.0 dependencies: - - condition: mlp.enabled - name: mlp - repository: https://caraml-dev.github.io/helm-charts - version: 0.6.4 - - condition: merlin.enabled - name: merlin - repository: https://caraml-dev.github.io/helm-charts - version: 0.13.7 - - condition: turing.enabled - name: turing - repository: https://caraml-dev.github.io/helm-charts - version: 0.3.7 - - condition: xp-treatment.enabled - name: xp-treatment - repository: https://caraml-dev.github.io/helm-charts - version: 0.1.26 - - condition: xp-management.enabled - name: xp-management - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.10 - - condition: postgresql.enabled - name: postgresql - repository: https://charts.helm.sh/stable - version: 7.0.2 - - alias: caraml-authz - condition: caraml-authz.enabled - name: authz - repository: https://caraml-dev.github.io/helm-charts - version: 0.1.12 - - condition: caraml-routes.enabled - name: caraml-routes - repository: https://caraml-dev.github.io/helm-charts - version: 0.3.3 - - name: common - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.9 - - alias: base - condition: base.enabled - name: base - repository: https://istio-release.storage.googleapis.com/charts - version: 1.13.9 - - alias: istiod - condition: istiod.enabled - name: generic-dep-installer - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.1 - - alias: istioIngressGateway - condition: istioIngressGateway.global.enabled - name: generic-dep-installer - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.1 - - alias: clusterLocalGateway - condition: clusterLocalGateway.global.enabled - name: generic-dep-installer - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.1 - - alias: certManagerBase - condition: certManagerBase.enabled - name: cert-manager-base - repository: https://caraml-dev.github.io/helm-charts - version: 1.8.1 - - condition: cert-manager.enabled - name: cert-manager - repository: https://charts.jetstack.io - version: v1.8.2 +- condition: mlp.enabled + name: mlp + repository: https://caraml-dev.github.io/helm-charts + version: 0.6.4 +- condition: merlin.enabled + name: merlin + repository: https://caraml-dev.github.io/helm-charts + version: 0.13.6 +- condition: turing.enabled + name: turing + repository: https://caraml-dev.github.io/helm-charts + version: 0.3.7 +- condition: xp-treatment.enabled + name: xp-treatment + repository: https://caraml-dev.github.io/helm-charts + version: 0.1.26 +- condition: xp-management.enabled + name: xp-management + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.10 +- condition: postgresql.enabled + name: postgresql + repository: https://charts.helm.sh/stable + version: 7.0.2 +- alias: caraml-authz + condition: caraml-authz.enabled + name: authz + repository: https://caraml-dev.github.io/helm-charts + version: 0.1.12 +- condition: caraml-routes.enabled + name: caraml-routes + repository: https://caraml-dev.github.io/helm-charts + version: 0.3.3 +- name: common + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.9 +- alias: base + condition: base.enabled + name: base + repository: https://istio-release.storage.googleapis.com/charts + version: 1.13.9 +- alias: istiod + condition: istiod.enabled + name: generic-dep-installer + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.1 +- alias: istioIngressGateway + condition: istioIngressGateway.global.enabled + name: generic-dep-installer + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.1 +- alias: clusterLocalGateway + condition: clusterLocalGateway.global.enabled + name: generic-dep-installer + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.1 +- alias: certManagerBase + condition: certManagerBase.enabled + name: cert-manager-base + repository: https://caraml-dev.github.io/helm-charts + version: 1.8.1 +- condition: cert-manager.enabled + name: cert-manager + repository: https://charts.jetstack.io + version: v1.8.2 description: A Helm chart for deploying CaraML components maintainers: - - email: caraml-dev@caraml.dev - name: caraml-dev +- email: caraml-dev@caraml.dev + name: caraml-dev name: caraml type: application -version: 0.8.21 +version: 0.8.20 \ No newline at end of file diff --git a/charts/caraml/README.md b/charts/caraml/README.md index 110ef5e3..5fcb5f97 100644 --- a/charts/caraml/README.md +++ b/charts/caraml/README.md @@ -1,216 +1,215 @@ # caraml -![Version: 0.8.21](https://img.shields.io/badge/Version-0.8.21-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) +![Version: 0.8.20](https://img.shields.io/badge/Version-0.8.20-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) A Helm chart for deploying CaraML components ## Maintainers -| Name | Email | Url | -| ---------- | ----------------------- | --- | -| caraml-dev | | | +| Name | Email | Url | +| ---- | ------ | --- | +| caraml-dev | | | ## Requirements -| Repository | Name | Version | -| --------------------------------------------------- | ------------------------------------------ | ------- | -| https://caraml-dev.github.io/helm-charts | caraml-authz(authz) | 0.1.12 | -| https://caraml-dev.github.io/helm-charts | caraml-routes | 0.3.3 | -| https://caraml-dev.github.io/helm-charts | certManagerBase(cert-manager-base) | 1.8.1 | -| https://caraml-dev.github.io/helm-charts | common | 0.2.9 | -| https://caraml-dev.github.io/helm-charts | clusterLocalGateway(generic-dep-installer) | 0.2.1 | -| https://caraml-dev.github.io/helm-charts | istioIngressGateway(generic-dep-installer) | 0.2.1 | -| https://caraml-dev.github.io/helm-charts | istiod(generic-dep-installer) | 0.2.1 | -| https://caraml-dev.github.io/helm-charts | merlin | 0.13.7 | -| https://caraml-dev.github.io/helm-charts | mlp | 0.6.4 | -| https://caraml-dev.github.io/helm-charts | turing | 0.3.7 | -| https://caraml-dev.github.io/helm-charts | xp-management | 0.2.10 | -| https://caraml-dev.github.io/helm-charts | xp-treatment | 0.1.26 | -| https://charts.helm.sh/stable | postgresql | 7.0.2 | -| https://charts.jetstack.io | cert-manager | v1.8.2 | -| https://istio-release.storage.googleapis.com/charts | base(base) | 1.13.9 | +| Repository | Name | Version | +|------------|------|---------| +| https://caraml-dev.github.io/helm-charts | caraml-authz(authz) | 0.1.12 | +| https://caraml-dev.github.io/helm-charts | caraml-routes | 0.3.3 | +| https://caraml-dev.github.io/helm-charts | certManagerBase(cert-manager-base) | 1.8.1 | +| https://caraml-dev.github.io/helm-charts | common | 0.2.9 | +| https://caraml-dev.github.io/helm-charts | clusterLocalGateway(generic-dep-installer) | 0.2.1 | +| https://caraml-dev.github.io/helm-charts | istioIngressGateway(generic-dep-installer) | 0.2.1 | +| https://caraml-dev.github.io/helm-charts | istiod(generic-dep-installer) | 0.2.1 | +| https://caraml-dev.github.io/helm-charts | merlin | 0.13.6 | +| https://caraml-dev.github.io/helm-charts | mlp | 0.6.4 | +| https://caraml-dev.github.io/helm-charts | turing | 0.3.7 | +| https://caraml-dev.github.io/helm-charts | xp-management | 0.2.10 | +| https://caraml-dev.github.io/helm-charts | xp-treatment | 0.1.26 | +| https://charts.helm.sh/stable | postgresql | 7.0.2 | +| https://charts.jetstack.io | cert-manager | v1.8.2 | +| https://istio-release.storage.googleapis.com/charts | base(base) | 1.13.9 | ## Values -| Key | Type | Default | Description | -| -------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | -| base.enabled | bool | `true` | Set to false if there is an existing istio deployment | -| base.global.istioNamespace | string | `"istio-system"` | | -| base.validationURL | string | `""` | | -| caraml-authz.enabled | bool | `false` | | -| caraml-routes.cert-manager.enabled | bool | `false` | | -| caraml-routes.certManagerBase.enabled | bool | `false` | | -| caraml-routes.enabled | bool | `true` | | -| cert-manager.enabled | bool | `false` | | -| cert-manager.fullnameOverride | string | `"cert-manager"` | | -| certManagerBase.enabled | bool | `true` | | -| clusterLocalGateway.chartValues.autoscaling.enabled | bool | `false` | | -| clusterLocalGateway.chartValues.env.ISTIO_METAJSON_STATS | string | `"{\\\"sidecar.istio.io/statsInclusionSuffixes\\\": \\\"upstream_rq_1xx,upstream_rq_2xx,upstream_rq_3xx,upstream_rq_4xx,upstream_rq_5xx,upstream_rq_time,upstream_cx_tx_bytes_total,upstream_cx_rx_bytes_total,upstream_cx_total,downstream_rq_1xx,downstream_rq_2xx,downstream_rq_3xx,downstream_rq_4xx,downstream_rq_5xx,downstream_rq_time,downstream_cx_tx_bytes_total,downstream_cx_rx_bytes_total,downstream_cx_total\\\"}\n"` | | -| clusterLocalGateway.chartValues.global.enabled | bool | `true` | Controls deployment of cluster-local-gateway. Set to false if there is an existing istio deployment | -| clusterLocalGateway.chartValues.labels.app | string | `"cluster-local-gateway"` | | -| clusterLocalGateway.chartValues.labels.istio | string | `"cluster-local-gateway"` | | -| clusterLocalGateway.chartValues.name | string | `"cluster-local-gateway"` | Specify name here so each gateway installation has its own unique name | -| clusterLocalGateway.chartValues.resources.limits.cpu | string | `"1000m"` | | -| clusterLocalGateway.chartValues.resources.limits.memory | string | `"1024Mi"` | | -| clusterLocalGateway.chartValues.resources.requests.cpu | string | `"250m"` | | -| clusterLocalGateway.chartValues.resources.requests.memory | string | `"256Mi"` | | -| clusterLocalGateway.chartValues.service.ports[0].name | string | `"http2"` | | -| clusterLocalGateway.chartValues.service.ports[0].port | int | `80` | | -| clusterLocalGateway.chartValues.service.ports[0].targetPort | int | `80` | | -| clusterLocalGateway.chartValues.service.ports[1].name | string | `"https"` | | -| clusterLocalGateway.chartValues.service.ports[1].port | int | `443` | | -| clusterLocalGateway.chartValues.service.type | string | `"ClusterIP"` | | -| clusterLocalGateway.chartValues.serviceAccount.create | bool | `true` | | -| clusterLocalGateway.chartValues.serviceAccount.name | string | `"cluster-local-gateway"` | | -| clusterLocalGateway.global.enabled | bool | `true` | Controls deployment of cluster-local-gateway. Set to false if there is an existing istio deployment | -| clusterLocalGateway.helmChart.chart | string | `"gateway"` | | -| clusterLocalGateway.helmChart.createNamespace | bool | `false` | | -| clusterLocalGateway.helmChart.namespace | string | `"istio-system"` | | -| clusterLocalGateway.helmChart.release | string | `"cluster-local-gateway"` | | -| clusterLocalGateway.helmChart.repository | string | `"https://istio-release.storage.googleapis.com/charts"` | | -| clusterLocalGateway.helmChart.version | string | `"1.13.9"` | | -| clusterLocalGateway.hook.weight | int | `1` | | -| global.dbSecretKey | string | `"postgresql-password"` | | -| global.hosts.mlflow[0] | string | `"mlflow"` | | -| global.hosts.mlp[0] | string | `"console"` | | -| global.hosts.mlpdocs[0] | string | `"docs"` | | -| global.istioLookUp | object | `{"name":"istio-ingressgateway","namespace":"istio-system"}` | istioIngressIP takes precedence over domain. Used for local deployment | -| global.merlin.apiPrefix | string | `"/v1"` | | -| global.merlin.externalPort | string | `"8080"` | | -| global.merlin.mlflow.postgresqlDatabase | string | `"mlflow"` | | -| global.merlin.postgresqlDatabase | string | `"merlin"` | | -| global.merlin.serviceName | string | `"merlin"` | | -| global.merlin.uiPrefix | string | `"/merlin"` | | -| global.merlin.uiServiceName | string | `"merlin"` | | -| global.merlin.useServiceFqdn | bool | `true` | | -| global.merlin.vsPrefix | string | `"/api/merlin"` | | -| global.mlflow.externalPort | string | `"80"` | | -| global.mlflow.serviceName | string | `"merlin-mlflow"` | | -| global.mlp.apiPrefix | string | `""` | | -| global.mlp.externalPort | string | `"8080"` | | -| global.mlp.postgresqlDatabase | string | `"mlp"` | | -| global.mlp.serviceName | string | `"mlp"` | | -| global.mlp.uiPrefix | string | `"/"` | | -| global.mlp.uiServiceName | string | `"mlp"` | | -| global.mlp.useServiceFqdn | bool | `true` | | -| global.mlp.vsPrefix | string | `"/api"` | | -| global.postgresqlDatabase | string | `"caraml"` | | -| global.postgresqlUsername | string | `"caraml"` | | -| global.protocol | string | `"http"` | | -| global.turing.postgresqlDatabase | string | `"turing"` | | -| global.xp.apiPrefix | string | `"/v1"` | | -| global.xp.externalPort | string | `"8080"` | | -| global.xp.postgresqlDatabase | string | `"xp"` | | -| global.xp.serviceName | string | `"xp-management"` | | -| global.xp.uiPrefix | string | `"/xp"` | | -| global.xp.uiServiceName | string | `"xp-management"` | | -| global.xp.useServiceFqdn | bool | `true` | | -| global.xp.vsPrefix | string | `"/api/xp"` | | -| istioIngressGateway.chartValues.autoscaling.enabled | bool | `false` | | -| istioIngressGateway.chartValues.env.ISTIO_METAJSON_STATS | string | `"{\\\"sidecar.istio.io/statsInclusionSuffixes\\\": \\\"upstream_rq_1xx,upstream_rq_2xx,upstream_rq_3xx,upstream_rq_4xx,upstream_rq_5xx,upstream_rq_time,upstream_cx_tx_bytes_total,upstream_cx_rx_bytes_total,upstream_cx_total,downstream_rq_1xx,downstream_rq_2xx,downstream_rq_3xx,downstream_rq_4xx,downstream_rq_5xx,downstream_rq_time,downstream_cx_tx_bytes_total,downstream_cx_rx_bytes_total,downstream_cx_total\\\"}\n"` | | -| istioIngressGateway.chartValues.env.ISTIO_META_ROUTER_MODE | string | `"standard"` | | -| istioIngressGateway.chartValues.name | string | `"istio-ingressgateway"` | Specify name here so each gateway installation has its own unique name | -| istioIngressGateway.chartValues.resources.limits.cpu | string | `"1000m"` | | -| istioIngressGateway.chartValues.resources.limits.memory | string | `"2048Mi"` | | -| istioIngressGateway.chartValues.resources.requests.cpu | string | `"250m"` | | -| istioIngressGateway.chartValues.resources.requests.memory | string | `"256Mi"` | | -| istioIngressGateway.chartValues.serviceAccount.create | bool | `true` | | -| istioIngressGateway.chartValues.serviceAccount.name | string | `"istio-ingressgateway"` | | -| istioIngressGateway.global.enabled | bool | `true` | Controls deployment of istio-ingressgateway. Set to false if there is an existing istio deployment | -| istioIngressGateway.helmChart.chart | string | `"gateway"` | | -| istioIngressGateway.helmChart.createNamespace | bool | `false` | | -| istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | -| istioIngressGateway.helmChart.release | string | `"istio-ingress-gateway"` | | -| istioIngressGateway.helmChart.repository | string | `"https://istio-release.storage.googleapis.com/charts"` | | -| istioIngressGateway.helmChart.version | string | `"1.13.9"` | | -| istioIngressGateway.hook.weight | int | `1` | | -| istiod.chartValues.configValidation | bool | `true` | | -| istiod.chartValues.deployInReleaseNs | bool | `false` | | -| istiod.chartValues.global.configValidation | bool | `true` | | -| istiod.chartValues.global.istioNamespace | string | `"istio-system"` | | -| istiod.chartValues.meshConfig.enableTracing | bool | `false` | | -| istiod.chartValues.pilot.autoscaleEnabled | bool | `false` | | -| istiod.chartValues.pilot.cpu.targetAverageUtilization | int | `80` | | -| istiod.chartValues.pilot.resources.limits.cpu | int | `1` | | -| istiod.chartValues.pilot.resources.limits.memory | string | `"1024Mi"` | | -| istiod.chartValues.pilot.resources.requests.cpu | string | `"250m"` | | -| istiod.chartValues.pilot.resources.requests.memory | string | `"256Mi"` | | -| istiod.enabled | bool | `true` | Set to false if there is an existing istio deployment | -| istiod.helmChart.chart | string | `"istiod"` | | -| istiod.helmChart.namespace | string | `"istio-system"` | | -| istiod.helmChart.release | string | `"istiod"` | | -| istiod.helmChart.repository | string | `"https://istio-release.storage.googleapis.com/charts"` | | -| istiod.helmChart.version | string | `"1.13.9"` | | -| istiod.hook.weight | int | `-3` | | -| merlin.deployment.resources.limits.cpu | string | `"500m"` | | -| merlin.deployment.resources.limits.memory | string | `"512Mi"` | | -| merlin.deployment.resources.requests.cpu | string | `"250m"` | | -| merlin.deployment.resources.requests.memory | string | `"256Mi"` | | -| merlin.enabled | bool | `true` | To enable/disable merlin chart installation. | -| merlin.kserve.chartValues.cert-manager.enabled | bool | `true` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.base.enabled | bool | `false` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.clusterLocalGateway.global.enabled | bool | `false` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.limits.cpu | string | `"1000m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.limits.memory | string | `"512Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.requests.cpu | string | `"200m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.requests.memory | string | `"256Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.global.enabled | bool | `false` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.istiod.enabled | bool | `false` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.limits.cpu | string | `"1000m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.limits.memory | string | `"1000Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.requests.cpu | string | `"250m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.requests.memory | string | `"256Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.limits.cpu | string | `"500m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.limits.memory | string | `"256Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.requests.cpu | string | `"250m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.requests.memory | string | `"128Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.limits.cpu | string | `"1000m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.limits.memory | string | `"512Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.requests.cpu | string | `"200m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.requests.memory | string | `"256Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.limits.cpu | string | `"300m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.limits.memory | string | `"512Mi"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.requests.cpu | string | `"100m"` | | -| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.requests.memory | string | `"256Mi"` | | -| merlin.kserve.enabled | bool | `true` | | -| merlin.merlin-postgresql.enabled | bool | `false` | To enable/disable merlin specific postgres | -| merlin.mlflow-postgresql.enabled | bool | `false` | To enable/disable mlflow specific postgres | -| merlin.mlflow.resources.limits.cpu | string | `"500m"` | | -| merlin.mlflow.resources.limits.memory | string | `"512Mi"` | | -| merlin.mlflow.resources.requests.cpu | string | `"250m"` | | -| merlin.mlflow.resources.requests.memory | string | `"256Mi"` | | -| merlin.mlp.enabled | bool | `false` | | -| mlp.deployment.authorization.enabled | bool | `true` | | -| mlp.enabled | bool | `true` | To enable/disable MLP chart installation. | -| mlp.fullnameOverride | string | `"mlp"` | | -| mlp.keto.deployment.resources.limits.memory | string | `"256Mi"` | | -| mlp.keto.deployment.resources.requests.cpu | string | `"250m"` | | -| mlp.keto.deployment.resources.requests.memory | string | `"256Mi"` | | -| mlp.keto.enabled | bool | `true` | | -| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | -| mlp.postgresql.enabled | bool | `false` | To enable/disable MLP specific postgres | -| postgresql.enabled | bool | `true` | To enable/disable CaraML specific postgres | -| postgresql.initdbScripts."init.sql" | string | `"CREATE DATABASE mlp;\nCREATE DATABASE merlin;\nCREATE DATABASE mlflow;\nCREATE DATABASE authz;\nCREATE DATABASE turing;\nCREATE DATABASE xp;\n"` | | -| postgresql.persistence.size | string | `"10Gi"` | | -| postgresql.postgresqlDatabase | string | `"caraml"` | To set the database schema name created in postgres | -| postgresql.postgresqlUsername | string | `"caraml"` | To set the user name for the database instance | -| postgresql.resources | object | `{}` | Configure resource requests and limits, Ref: http://kubernetes.io/docs/user-guide/compute-resources/ | -| turing.config.AuthConfig.Enabled | bool | `false` | | -| turing.deployment.resources.limits.cpu | string | `"500m"` | | -| turing.deployment.resources.limits.memory | string | `"512Mi"` | | -| turing.deployment.resources.requests.cpu | string | `"250m"` | | -| turing.deployment.resources.requests.memory | string | `"256Mi"` | | -| turing.enabled | bool | `true` | | -| turing.merlin.enabled | bool | `false` | | -| turing.mlp.enabled | bool | `false` | | -| turing.turing-postgresql.enabled | bool | `false` | To enable/disable turing specific postgresql | -| xp-management.enabled | bool | `true` | | -| xp-management.mlp.enabled | bool | `false` | | -| xp-management.xp-management-postgresql.enabled | bool | `false` | | -| xp-treatment.enabled | bool | `true` | | -| xp-treatment.xp-management.enabled | bool | `false` | | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| base.enabled | bool | `true` | Set to false if there is an existing istio deployment | +| base.global.istioNamespace | string | `"istio-system"` | | +| base.validationURL | string | `""` | | +| caraml-authz.enabled | bool | `false` | | +| caraml-routes.cert-manager.enabled | bool | `false` | | +| caraml-routes.certManagerBase.enabled | bool | `false` | | +| caraml-routes.enabled | bool | `true` | | +| cert-manager.enabled | bool | `false` | | +| cert-manager.fullnameOverride | string | `"cert-manager"` | | +| certManagerBase.enabled | bool | `true` | | +| clusterLocalGateway.chartValues.autoscaling.enabled | bool | `false` | | +| clusterLocalGateway.chartValues.env.ISTIO_METAJSON_STATS | string | `"{\\\"sidecar.istio.io/statsInclusionSuffixes\\\": \\\"upstream_rq_1xx,upstream_rq_2xx,upstream_rq_3xx,upstream_rq_4xx,upstream_rq_5xx,upstream_rq_time,upstream_cx_tx_bytes_total,upstream_cx_rx_bytes_total,upstream_cx_total,downstream_rq_1xx,downstream_rq_2xx,downstream_rq_3xx,downstream_rq_4xx,downstream_rq_5xx,downstream_rq_time,downstream_cx_tx_bytes_total,downstream_cx_rx_bytes_total,downstream_cx_total\\\"}\n"` | | +| clusterLocalGateway.chartValues.global.enabled | bool | `true` | Controls deployment of cluster-local-gateway. Set to false if there is an existing istio deployment | +| clusterLocalGateway.chartValues.labels.app | string | `"cluster-local-gateway"` | | +| clusterLocalGateway.chartValues.labels.istio | string | `"cluster-local-gateway"` | | +| clusterLocalGateway.chartValues.name | string | `"cluster-local-gateway"` | Specify name here so each gateway installation has its own unique name | +| clusterLocalGateway.chartValues.resources.limits.cpu | string | `"1000m"` | | +| clusterLocalGateway.chartValues.resources.limits.memory | string | `"1024Mi"` | | +| clusterLocalGateway.chartValues.resources.requests.cpu | string | `"250m"` | | +| clusterLocalGateway.chartValues.resources.requests.memory | string | `"256Mi"` | | +| clusterLocalGateway.chartValues.service.ports[0].name | string | `"http2"` | | +| clusterLocalGateway.chartValues.service.ports[0].port | int | `80` | | +| clusterLocalGateway.chartValues.service.ports[0].targetPort | int | `80` | | +| clusterLocalGateway.chartValues.service.ports[1].name | string | `"https"` | | +| clusterLocalGateway.chartValues.service.ports[1].port | int | `443` | | +| clusterLocalGateway.chartValues.service.type | string | `"ClusterIP"` | | +| clusterLocalGateway.chartValues.serviceAccount.create | bool | `true` | | +| clusterLocalGateway.chartValues.serviceAccount.name | string | `"cluster-local-gateway"` | | +| clusterLocalGateway.global.enabled | bool | `true` | Controls deployment of cluster-local-gateway. Set to false if there is an existing istio deployment | +| clusterLocalGateway.helmChart.chart | string | `"gateway"` | | +| clusterLocalGateway.helmChart.createNamespace | bool | `false` | | +| clusterLocalGateway.helmChart.namespace | string | `"istio-system"` | | +| clusterLocalGateway.helmChart.release | string | `"cluster-local-gateway"` | | +| clusterLocalGateway.helmChart.repository | string | `"https://istio-release.storage.googleapis.com/charts"` | | +| clusterLocalGateway.helmChart.version | string | `"1.13.9"` | | +| clusterLocalGateway.hook.weight | int | `1` | | +| global.dbSecretKey | string | `"postgresql-password"` | | +| global.hosts.mlflow[0] | string | `"mlflow"` | | +| global.hosts.mlp[0] | string | `"console"` | | +| global.hosts.mlpdocs[0] | string | `"docs"` | | +| global.istioLookUp | object | `{"name":"istio-ingressgateway","namespace":"istio-system"}` | istioIngressIP takes precedence over domain. Used for local deployment | +| global.merlin.apiPrefix | string | `"/v1"` | | +| global.merlin.externalPort | string | `"8080"` | | +| global.merlin.mlflow.postgresqlDatabase | string | `"mlflow"` | | +| global.merlin.postgresqlDatabase | string | `"merlin"` | | +| global.merlin.serviceName | string | `"merlin"` | | +| global.merlin.uiPrefix | string | `"/merlin"` | | +| global.merlin.uiServiceName | string | `"merlin"` | | +| global.merlin.useServiceFqdn | bool | `true` | | +| global.merlin.vsPrefix | string | `"/api/merlin"` | | +| global.mlflow.externalPort | string | `"80"` | | +| global.mlflow.serviceName | string | `"merlin-mlflow"` | | +| global.mlp.apiPrefix | string | `""` | | +| global.mlp.externalPort | string | `"8080"` | | +| global.mlp.postgresqlDatabase | string | `"mlp"` | | +| global.mlp.serviceName | string | `"mlp"` | | +| global.mlp.uiPrefix | string | `"/"` | | +| global.mlp.uiServiceName | string | `"mlp"` | | +| global.mlp.useServiceFqdn | bool | `true` | | +| global.mlp.vsPrefix | string | `"/api"` | | +| global.postgresqlDatabase | string | `"caraml"` | | +| global.postgresqlUsername | string | `"caraml"` | | +| global.protocol | string | `"http"` | | +| global.turing.postgresqlDatabase | string | `"turing"` | | +| global.xp.apiPrefix | string | `"/v1"` | | +| global.xp.externalPort | string | `"8080"` | | +| global.xp.postgresqlDatabase | string | `"xp"` | | +| global.xp.serviceName | string | `"xp-management"` | | +| global.xp.uiPrefix | string | `"/xp"` | | +| global.xp.uiServiceName | string | `"xp-management"` | | +| global.xp.useServiceFqdn | bool | `true` | | +| global.xp.vsPrefix | string | `"/api/xp"` | | +| istioIngressGateway.chartValues.autoscaling.enabled | bool | `false` | | +| istioIngressGateway.chartValues.env.ISTIO_METAJSON_STATS | string | `"{\\\"sidecar.istio.io/statsInclusionSuffixes\\\": \\\"upstream_rq_1xx,upstream_rq_2xx,upstream_rq_3xx,upstream_rq_4xx,upstream_rq_5xx,upstream_rq_time,upstream_cx_tx_bytes_total,upstream_cx_rx_bytes_total,upstream_cx_total,downstream_rq_1xx,downstream_rq_2xx,downstream_rq_3xx,downstream_rq_4xx,downstream_rq_5xx,downstream_rq_time,downstream_cx_tx_bytes_total,downstream_cx_rx_bytes_total,downstream_cx_total\\\"}\n"` | | +| istioIngressGateway.chartValues.env.ISTIO_META_ROUTER_MODE | string | `"standard"` | | +| istioIngressGateway.chartValues.name | string | `"istio-ingressgateway"` | Specify name here so each gateway installation has its own unique name | +| istioIngressGateway.chartValues.resources.limits.cpu | string | `"1000m"` | | +| istioIngressGateway.chartValues.resources.limits.memory | string | `"2048Mi"` | | +| istioIngressGateway.chartValues.resources.requests.cpu | string | `"250m"` | | +| istioIngressGateway.chartValues.resources.requests.memory | string | `"256Mi"` | | +| istioIngressGateway.chartValues.serviceAccount.create | bool | `true` | | +| istioIngressGateway.chartValues.serviceAccount.name | string | `"istio-ingressgateway"` | | +| istioIngressGateway.global.enabled | bool | `true` | Controls deployment of istio-ingressgateway. Set to false if there is an existing istio deployment | +| istioIngressGateway.helmChart.chart | string | `"gateway"` | | +| istioIngressGateway.helmChart.createNamespace | bool | `false` | | +| istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | +| istioIngressGateway.helmChart.release | string | `"istio-ingress-gateway"` | | +| istioIngressGateway.helmChart.repository | string | `"https://istio-release.storage.googleapis.com/charts"` | | +| istioIngressGateway.helmChart.version | string | `"1.13.9"` | | +| istioIngressGateway.hook.weight | int | `1` | | +| istiod.chartValues.configValidation | bool | `true` | | +| istiod.chartValues.deployInReleaseNs | bool | `false` | | +| istiod.chartValues.global.configValidation | bool | `true` | | +| istiod.chartValues.global.istioNamespace | string | `"istio-system"` | | +| istiod.chartValues.meshConfig.enableTracing | bool | `false` | | +| istiod.chartValues.pilot.autoscaleEnabled | bool | `false` | | +| istiod.chartValues.pilot.cpu.targetAverageUtilization | int | `80` | | +| istiod.chartValues.pilot.resources.limits.cpu | int | `1` | | +| istiod.chartValues.pilot.resources.limits.memory | string | `"1024Mi"` | | +| istiod.chartValues.pilot.resources.requests.cpu | string | `"250m"` | | +| istiod.chartValues.pilot.resources.requests.memory | string | `"256Mi"` | | +| istiod.enabled | bool | `true` | Set to false if there is an existing istio deployment | +| istiod.helmChart.chart | string | `"istiod"` | | +| istiod.helmChart.namespace | string | `"istio-system"` | | +| istiod.helmChart.release | string | `"istiod"` | | +| istiod.helmChart.repository | string | `"https://istio-release.storage.googleapis.com/charts"` | | +| istiod.helmChart.version | string | `"1.13.9"` | | +| istiod.hook.weight | int | `-3` | | +| merlin.deployment.resources.limits.cpu | string | `"500m"` | | +| merlin.deployment.resources.limits.memory | string | `"512Mi"` | | +| merlin.deployment.resources.requests.cpu | string | `"250m"` | | +| merlin.deployment.resources.requests.memory | string | `"256Mi"` | | +| merlin.enabled | bool | `true` | To enable/disable merlin chart installation. | +| merlin.kserve.chartValues.cert-manager.enabled | bool | `true` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.base.enabled | bool | `false` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.clusterLocalGateway.global.enabled | bool | `false` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.limits.cpu | string | `"1000m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.limits.memory | string | `"512Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.requests.cpu | string | `"200m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.controller.resources.requests.memory | string | `"256Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.global.enabled | bool | `false` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.istiod.enabled | bool | `false` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.limits.cpu | string | `"1000m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.limits.memory | string | `"1000Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.requests.cpu | string | `"250m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscaler.resources.requests.memory | string | `"256Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.limits.cpu | string | `"500m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.limits.memory | string | `"256Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.requests.cpu | string | `"250m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.autoscalerHpa.resources.requests.memory | string | `"128Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.limits.cpu | string | `"1000m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.limits.memory | string | `"512Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.requests.cpu | string | `"200m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.knativeServingCore.controller.resources.requests.memory | string | `"256Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.limits.cpu | string | `"300m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.limits.memory | string | `"512Mi"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.requests.cpu | string | `"100m"` | | +| merlin.kserve.chartValues.knativeServingIstio.chartValues.webhook.resources.requests.memory | string | `"256Mi"` | | +| merlin.kserve.enabled | bool | `true` | | +| merlin.merlin-postgresql.enabled | bool | `false` | To enable/disable merlin specific postgres | +| merlin.mlflow-postgresql.enabled | bool | `false` | To enable/disable mlflow specific postgres | +| merlin.mlflow.resources.limits.cpu | string | `"500m"` | | +| merlin.mlflow.resources.limits.memory | string | `"512Mi"` | | +| merlin.mlflow.resources.requests.cpu | string | `"250m"` | | +| merlin.mlflow.resources.requests.memory | string | `"256Mi"` | | +| merlin.mlp.enabled | bool | `false` | | +| mlp.deployment.authorization.enabled | bool | `true` | | +| mlp.enabled | bool | `true` | To enable/disable MLP chart installation. | +| mlp.fullnameOverride | string | `"mlp"` | | +| mlp.keto.deployment.resources.limits.memory | string | `"256Mi"` | | +| mlp.keto.deployment.resources.requests.cpu | string | `"250m"` | | +| mlp.keto.deployment.resources.requests.memory | string | `"256Mi"` | | +| mlp.keto.enabled | bool | `true` | | +| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | +| mlp.postgresql.enabled | bool | `false` | To enable/disable MLP specific postgres | +| postgresql.enabled | bool | `true` | To enable/disable CaraML specific postgres | +| postgresql.initdbScripts."init.sql" | string | `"CREATE DATABASE mlp;\nCREATE DATABASE merlin;\nCREATE DATABASE mlflow;\nCREATE DATABASE authz;\nCREATE DATABASE turing;\nCREATE DATABASE xp;\n"` | | +| postgresql.persistence.size | string | `"10Gi"` | | +| postgresql.postgresqlDatabase | string | `"caraml"` | To set the database schema name created in postgres | +| postgresql.postgresqlUsername | string | `"caraml"` | To set the user name for the database instance | +| postgresql.resources | object | `{}` | Configure resource requests and limits, Ref: http://kubernetes.io/docs/user-guide/compute-resources/ | +| turing.config.AuthConfig.Enabled | bool | `false` | | +| turing.deployment.resources.limits.cpu | string | `"500m"` | | +| turing.deployment.resources.limits.memory | string | `"512Mi"` | | +| turing.deployment.resources.requests.cpu | string | `"250m"` | | +| turing.deployment.resources.requests.memory | string | `"256Mi"` | | +| turing.enabled | bool | `true` | | +| turing.merlin.enabled | bool | `false` | | +| turing.mlp.enabled | bool | `false` | | +| turing.turing-postgresql.enabled | bool | `false` | To enable/disable turing specific postgresql | +| xp-management.enabled | bool | `true` | | +| xp-management.mlp.enabled | bool | `false` | | +| xp-management.xp-management-postgresql.enabled | bool | `false` | | +| xp-treatment.enabled | bool | `true` | | +| xp-treatment.xp-management.enabled | bool | `false` | | ---- - -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) +---------------------------------------------- +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) \ No newline at end of file diff --git a/charts/merlin/Chart.yaml b/charts/merlin/Chart.yaml index 21232fa2..126158e3 100644 --- a/charts/merlin/Chart.yaml +++ b/charts/merlin/Chart.yaml @@ -1,36 +1,36 @@ apiVersion: v2 appVersion: v0.37.0 dependencies: -- alias: merlin-postgresql - condition: merlin-postgresql.enabled - name: postgresql - repository: https://charts.helm.sh/stable - version: 7.0.2 -- alias: mlflow-postgresql - condition: mlflow-postgresql.enabled - name: postgresql - repository: https://charts.helm.sh/stable - version: 7.0.2 -- condition: mlp.enabled - name: mlp - repository: https://caraml-dev.github.io/helm-charts - version: 0.6.4 -- alias: kserve - condition: kserve.enabled - name: generic-dep-installer - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.1 -- alias: minio - condition: minio.enabled - name: generic-dep-installer - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.1 -- name: common - repository: https://caraml-dev.github.io/helm-charts - version: 0.2.9 + - alias: merlin-postgresql + condition: merlin-postgresql.enabled + name: postgresql + repository: https://charts.helm.sh/stable + version: 7.0.2 + - alias: mlflow-postgresql + condition: mlflow-postgresql.enabled + name: postgresql + repository: https://charts.helm.sh/stable + version: 7.0.2 + - condition: mlp.enabled + name: mlp + repository: https://caraml-dev.github.io/helm-charts + version: 0.6.4 + - alias: kserve + condition: kserve.enabled + name: generic-dep-installer + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.1 + - alias: minio + condition: minio.enabled + name: generic-dep-installer + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.1 + - name: common + repository: https://caraml-dev.github.io/helm-charts + version: 0.2.9 description: Kubernetes-friendly ML model management, deployment, and serving. maintainers: -- email: caraml-dev@caraml.dev - name: caraml-dev + - email: caraml-dev@caraml.dev + name: caraml-dev name: merlin -version: 0.13.7 +version: 0.13.8 diff --git a/charts/merlin/README.md b/charts/merlin/README.md index 4c20ab6d..dfbc32f8 100644 --- a/charts/merlin/README.md +++ b/charts/merlin/README.md @@ -1,8 +1,7 @@ # merlin --- - -![Version: 0.13.7](https://img.shields.io/badge/Version-0.13.7-informational?style=flat-square) +![Version: 0.13.8](https://img.shields.io/badge/Version-0.13.8-informational?style=flat-square) ![AppVersion: v0.37.0](https://img.shields.io/badge/AppVersion-v0.37.0-informational?style=flat-square) Kubernetes-friendly ML model management, deployment, and serving. @@ -19,7 +18,7 @@ Kubernetes cluster. Setting up Kubernetes and Helm is outside the scope of this README. Please refer to the Kubernetes and Helm documentation. - **Helm 3.0+** – This chart was tested with Helm v3.9.0, but it is also expected to work with earlier Helm versions -- **Kubernetes 1.22+** – This chart was tested with Kind v1.22.7 and minikube kubernetes version 1.22.\* +- **Kubernetes 1.22+** – This chart was tested with Kind v1.22.7 and minikube kubernetes version 1.22.* - When installing on minikube, please run in a separate shell: ```sh minikube tunnel @@ -38,7 +37,6 @@ helm repo add caraml https://caraml-dev.github.io/helm-charts This command will install Merlin release named `merlin` in the `default` namespace. Default chart values will be used for the installation: - ```shell $ helm install caraml/merlin ``` @@ -49,7 +47,6 @@ Refer to [Configuration](#configuration) section for the detailed description of ### Uninstalling the chart To uninstall `merlin` release: - ```shell $ helm uninstall merlin ``` @@ -58,327 +55,325 @@ The command removes all the Kubernetes components associated with the chart and This includes the dependencies that were installed by the chart. Note that, any PVCs created by the chart will have to be deleted manually. ### Rendered field - -- The purpose of `.Values.rendered.*` is to configure parts of the helm chart that use the field \* from 1 place -- For example, `.Values.rendered.releasedVersion` is used in rendering `merlin.config` partial template and `merlin.deploymentTag` partial template -- `.Values.rendered.releasedVersion` should be a git release or tag. If the git release is `v1.0.4` then the `.Values.rendered.releasedVersion` should be `v1.0.4` (keep the v prefix) -- If `.Values.deployment.image.tag` is specified, it will overwrite the value in `.Values.releasedVersion` -- The values in `.Values.rendered` will overwrite values in `.Values.config` +* The purpose of `.Values.rendered.*` is to configure parts of the helm chart that use the field * from 1 place +* For example, `.Values.rendered.releasedVersion` is used in rendering `merlin.config` partial template and `merlin.deploymentTag` partial template +* `.Values.rendered.releasedVersion` should be a git release or tag. If the git release is `v1.0.4` then the `.Values.rendered.releasedVersion` should be `v1.0.4` (keep the v prefix) +* If `.Values.deployment.image.tag` is specified, it will overwrite the value in `.Values.releasedVersion` +* The values in `.Values.rendered` will overwrite values in `.Values.config` ## Configuration - The following table lists the configurable parameters of the Merlin chart and their default values. -| Key | Type | Default | Description | -| ------------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| clusterConfig.environmentConfigPath | string | `"environments.yaml"` | environmentConfigPath is a path to a file that contains environmentConfigs. See api/environments-dev.yaml for example contents | -| clusterConfig.useInClusterConfig | bool | `false` | Configuration to tell Merlin API how it should authenticate with deployment k8s cluster By default, Merlin API expects to use a remote k8s cluster for deployment and to do so, it requires cluster access configurations to be configured as part of values.yaml | -| config.AuthorizationConfig.AuthorizationEnabled | bool | `true` | | -| config.AuthorizationConfig.Caching.CacheCleanUpIntervalSeconds | int | `900` | Cache clean up interval, after which expired keys are removed | -| config.AuthorizationConfig.Caching.Enabled | bool | `false` | Whether local in-memory caching of authorization responses should be enabled | -| config.AuthorizationConfig.Caching.KeyExpirySeconds | int | `600` | Cache key expiry duration | -| config.AuthorizationConfig.KetoRemoteRead | string | `"http://mlp-keto-read:80"` | | -| config.AuthorizationConfig.KetoRemoteWrite | string | `"http://mlp-keto-write:80"` | | -| config.DbConfig.Database | string | `"merlin"` | | -| config.DbConfig.Host | string | `"localhost"` | | -| config.DbConfig.Password | string | `"merlin"` | | -| config.DbConfig.Port | int | `5432` | | -| config.DbConfig.User | string | `"merlin"` | | -| config.DeploymentLabelPrefix | string | `"gojek.com/"` | | -| config.Environment | string | `"dev"` | | -| config.FeatureToggleConfig.AlertConfig.AlertEnabled | bool | `false` | To enable/disable creation/modification of the alerts and dashboards for the deployed models via merlin. | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertBranch | string | `"master"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertRepository | string | `"lens/artillery/datascience"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.BaseURL | string | `"https://gitlab.com/"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardBranch | string | `"master"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardRepository | string | `"data-science/slo-specs"` | | -| config.FeatureToggleConfig.AlertConfig.WardenConfig.APIHost | string | `""` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringBaseURL | string | `""` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringEnabled | bool | `false` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringJobBaseURL | string | `""` | | -| config.LoggerDestinationURL | string | `"http://yourDestinationLogger"` | | -| config.MlpAPIConfig.APIHost | string | `"http://mlp:8080"` | | -| config.NewRelic.AppName | string | `"merlin-api-dev"` | | -| config.NewRelic.Enabled | bool | `false` | | -| config.NewRelic.IgnoreStatusCodes[0] | int | `400` | | -| config.NewRelic.IgnoreStatusCodes[1] | int | `401` | | -| config.NewRelic.IgnoreStatusCodes[2] | int | `403` | | -| config.NewRelic.IgnoreStatusCodes[3] | int | `404` | | -| config.NewRelic.IgnoreStatusCodes[4] | int | `405` | | -| config.NewRelic.IgnoreStatusCodes[5] | int | `412` | | -| config.NewRelic.License | string | `"newrelic-license-secret"` | | -| config.NumOfQueueWorkers | int | `2` | | -| config.Port | int | `8080` | | -| config.PyFuncPublisherConfig.Kafka.Acks | int | `0` | | -| config.PyFuncPublisherConfig.Kafka.AdditionalConfig | string | `"{}"` | | -| config.PyFuncPublisherConfig.Kafka.Brokers | string | `"kafka-brokers"` | | -| config.PyFuncPublisherConfig.Kafka.LingerMS | int | `100` | | -| config.PyFuncPublisherConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | -| config.PyFuncPublisherConfig.SamplingRatioRate | float | `0.01` | | -| config.PyfuncGRPCOptions | string | `"{}"` | | -| config.ReactAppConfig.CPUCost | string | `nil` | | -| config.ReactAppConfig.DocURL[0].Href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | -| config.ReactAppConfig.DocURL[0].Label | string | `"Getting Started with Merlin"` | | -| config.ReactAppConfig.DockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | -| config.ReactAppConfig.Environment | string | `"dev"` | | -| config.ReactAppConfig.FeastCoreURL | string | `"http://feast-core.mlp:8080/v1"` | | -| config.ReactAppConfig.HomePage | string | `"/merlin"` | | -| config.ReactAppConfig.MaxAllowedReplica | int | `20` | | -| config.ReactAppConfig.MemoryCost | string | `nil` | | -| config.ReactAppConfig.MerlinURL | string | `"/api/merlin/v1"` | | -| config.ReactAppConfig.MlpURL | string | `"/api"` | | -| config.ReactAppConfig.OauthClientID | string | `nil` | | -| config.ReactAppConfig.UPIDocumentation | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | -| config.Sentry.DSN | string | `""` | | -| config.Sentry.Enabled | bool | `false` | | -| config.StandardTransformerConfig.BigtableCredential | string | `nil` | | -| config.StandardTransformerConfig.DefaultFeastSource | int | `2` | | -| config.StandardTransformerConfig.DefaultServingURL | string | `"online-serving-redis.feast.dev"` | | -| config.StandardTransformerConfig.EnableAuth | bool | `false` | | -| config.StandardTransformerConfig.FeastBigtableConfig.Instance | string | `"instance"` | | -| config.StandardTransformerConfig.FeastBigtableConfig.PoolSize | int | `5` | | -| config.StandardTransformerConfig.FeastBigtableConfig.Project | string | `"gcp-project"` | | -| config.StandardTransformerConfig.FeastBigtableConfig.ServingURL | string | `"online-serving-bigtable.feast.dev"` | | -| config.StandardTransformerConfig.FeastCoreAuthAudience | string | `"core.feast.dev"` | | -| config.StandardTransformerConfig.FeastCoreURL | string | `"core.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Enabled | bool | `false` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Time | string | `"60s"` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Timeout | string | `"5s"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Host | string | `"online-serving-redis.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Icon | string | `"redis"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Label | string | `"Online Serving with Redis"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].SourceType | string | `"REDIS"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Host | string | `"online-serving-bigtable.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Icon | string | `"bigtable"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Label | string | `"Online Serving with BigTable"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].SourceType | string | `"BIGTABLE"` | | -| config.StandardTransformerConfig.ImageName | string | `"ghcr.io/caraml-dev/merlin-transformer:1.0.0"` | | -| config.StandardTransformerConfig.Jaeger.CollectorURL | string | `"http://jaeger-tracing-collector.infrastructure:14268/api/traces"` | | -| config.StandardTransformerConfig.Jaeger.Disabled | bool | `false` | | -| config.StandardTransformerConfig.Jaeger.SamplerParam | int | `1` | | -| config.StandardTransformerConfig.Kafka.Acks | int | `0` | | -| config.StandardTransformerConfig.Kafka.AdditionalConfig | string | `"{}"` | | -| config.StandardTransformerConfig.Kafka.Brokers | string | `"kafka-brokers"` | | -| config.StandardTransformerConfig.Kafka.LingerMS | int | `100` | | -| config.StandardTransformerConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Enabled | bool | `false` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Time | string | `"60s"` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Timeout | string | `"5s"` | | -| config.StandardTransformerConfig.ModelServerConnCount | int | `10` | | -| config.StandardTransformerConfig.SimulationFeast.FeastBigtableURL | string | `"online-serving-bt.feast.dev"` | | -| config.StandardTransformerConfig.SimulationFeast.FeastRedisURL | string | `"online-serving-redis.feast.dev"` | | -| deployment.annotations | object | `{}` | | -| deployment.extraArgs | list | `[]` | List of string containing additional Merlin API server arguments. For example, multiple "-config" can be specified to use multiple config files | -| deployment.extraContainers | list | `[]` | List of sidecar containers to attach to the Pod. For example, you can attach sidecar container that forward logs or dynamically update some configuration files. | -| deployment.extraEnvs | list | `[]` | List of extra environment variables to add to Merlin API server container | -| deployment.extraInitContainers | list | `[]` | List of extra initContainers to add to the Pod. For example, you need to run some init scripts to fetch credentials from a remote server | -| deployment.extraVolumeMounts | list | `[]` | Extra volume mounts to attach to Merlin API server container. For example to mount the extra volume containing secrets | -| deployment.extraVolumes | list | `[]` | Extra volumes to attach to the Pod. For example, you can mount additional secrets to these volumes | -| deployment.image.pullPolicy | string | `"IfNotPresent"` | | -| deployment.image.registry | string | `"ghcr.io"` | | -| deployment.image.repository | string | `"caraml-dev/merlin"` | | -| deployment.image.tag | string | `""` | | -| deployment.labels | object | `{}` | | -| deployment.podLabels | object | `{}` | | -| deployment.replicaCount | string | `"2"` | | -| deployment.resources.limits.cpu | string | `"1"` | | -| deployment.resources.limits.memory | string | `"1Gi"` | | -| deployment.resources.requests.cpu | string | `"500m"` | | -| deployment.resources.requests.memory | string | `"1Gi"` | | -| deployment.tolerations | list | `[]` | | -| environmentConfigs[0].cluster | string | `"test"` | | -| environmentConfigs[0].default_deployment_config.cpu_request | string | `"500m"` | | -| environmentConfigs[0].default_deployment_config.max_replica | int | `1` | | -| environmentConfigs[0].default_deployment_config.memory_request | string | `"500Mi"` | | -| environmentConfigs[0].default_deployment_config.min_replica | int | `0` | | -| environmentConfigs[0].default_prediction_job_config.driver_cpu_request | string | `"2"` | | -| environmentConfigs[0].default_prediction_job_config.driver_memory_request | string | `"2Gi"` | | -| environmentConfigs[0].default_prediction_job_config.executor_cpu_request | string | `"2"` | | -| environmentConfigs[0].default_prediction_job_config.executor_memory_request | string | `"2Gi"` | | -| environmentConfigs[0].default_prediction_job_config.executor_replica | int | `3` | | -| environmentConfigs[0].default_transformer_config.cpu_request | string | `"500m"` | | -| environmentConfigs[0].default_transformer_config.max_replica | int | `1` | | -| environmentConfigs[0].default_transformer_config.memory_request | string | `"500Mi"` | | -| environmentConfigs[0].default_transformer_config.min_replica | int | `0` | | -| environmentConfigs[0].deployment_timeout | string | `"10m"` | | -| environmentConfigs[0].gcp_project | string | `"gcp-project"` | | -| environmentConfigs[0].is_default | bool | `true` | | -| environmentConfigs[0].is_default_prediction_job | bool | `true` | | -| environmentConfigs[0].is_prediction_job_enabled | bool | `true` | | -| environmentConfigs[0].k8s_config | object | `{}` | | -| environmentConfigs[0].max_cpu | string | `"8"` | | -| environmentConfigs[0].max_memory | string | `"8Gi"` | | -| environmentConfigs[0].name | string | `"id-dev"` | | -| environmentConfigs[0].namespace_timeout | string | `"2m"` | | -| environmentConfigs[0].queue_resource_percentage | string | `"20"` | | -| environmentConfigs[0].region | string | `"id"` | | -| global.protocol | string | `"http"` | | -| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | -| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | -| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | -| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0"` | | -| imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | -| imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | -| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | -| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | -| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | -| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | -| imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | -| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | -| imageBuilder.builderConfig.MaximumRetry | int | `3` | | -| imageBuilder.builderConfig.NodeSelectors | object | `{}` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.37.0"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | -| imageBuilder.builderConfig.Retention | string | `"48h"` | | -| imageBuilder.builderConfig.SafeToEvict | bool | `false` | | -| imageBuilder.builderConfig.Tolerations | list | `[]` | | -| imageBuilder.clusterName | string | `"test"` | | -| imageBuilder.contextRef | string | `""` | | -| imageBuilder.k8sConfig | object | `{}` | | -| imageBuilder.serviceAccount.annotations | object | `{}` | | -| imageBuilder.serviceAccount.create | bool | `true` | | -| imageBuilder.serviceAccount.labels | object | `{}` | | -| imageBuilder.serviceAccount.name | string | `"kaniko"` | | -| ingress.enabled | bool | `false` | | -| kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | -| kserve.enabled | bool | `true` | | -| kserve.helmChart.chart | string | `"kserve"` | | -| kserve.helmChart.createNamespace | bool | `true` | | -| kserve.helmChart.namespace | string | `"kserve"` | | -| kserve.helmChart.release | string | `"kserve"` | | -| kserve.helmChart.repository | string | `"https://caraml-dev.github.io/helm-charts"` | | -| kserve.helmChart.version | string | `"0.8.22"` | | -| kserve.hook.weight | string | `"-2"` | | -| merlin-postgresql.enabled | bool | `true` | | -| merlin-postgresql.persistence.size | string | `"10Gi"` | | -| merlin-postgresql.postgresqlDatabase | string | `"merlin"` | | -| merlin-postgresql.postgresqlUsername | string | `"merlin"` | | -| merlin-postgresql.resources.requests.cpu | string | `"100m"` | | -| merlin-postgresql.resources.requests.memory | string | `"512Mi"` | | -| merlinExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | -| merlinExternalPostgresql.connMaxIdleTime | string | `"0s"` | Connection pooling settings | -| merlinExternalPostgresql.connMaxLifetime | string | `"0s"` | | -| merlinExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | -| merlinExternalPostgresql.database | string | `"merlin"` | External postgres database schema | -| merlinExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | -| merlinExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | -| merlinExternalPostgresql.maxIdleConns | int | `0` | | -| merlinExternalPostgresql.maxOpenConns | int | `0` | | -| merlinExternalPostgresql.password | string | `"password"` | | -| merlinExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | -| merlinExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | -| merlinExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | -| merlinExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | -| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | -| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | -| merlinExternalPostgresql.username | string | `"merlin"` | External postgres database user | -| minio.chartValues.defaultBucket.enabled | bool | `true` | | -| minio.chartValues.defaultBucket.name | string | `"mlflow"` | | -| minio.chartValues.ingress.annotations."kubernetes.io/ingress.class" | string | `"istio"` | | -| minio.chartValues.ingress.enabled | bool | `false` | | -| minio.chartValues.ingress.path | string | `"/*"` | | -| minio.chartValues.livenessProbe.initialDelaySeconds | int | `30` | | -| minio.chartValues.persistence.enabled | bool | `false` | | -| minio.chartValues.replicas | int | `1` | | -| minio.chartValues.resources.requests.cpu | string | `"25m"` | | -| minio.chartValues.resources.requests.memory | string | `"64Mi"` | | -| minio.enabled | bool | `true` | | -| minio.helmChart.chart | string | `"minio"` | | -| minio.helmChart.createNamespace | bool | `true` | | -| minio.helmChart.namespace | string | `"minio"` | | -| minio.helmChart.release | string | `"minio"` | | -| minio.helmChart.repository | string | `"https://charts.min.io/"` | "https://helm.min.io/" is no longer valid. TODO: Check if the chart coming from below is correct for this usecase, version also changed to latest in the below charts url. | -| minio.helmChart.version | string | `"5.0.14"` | | -| minio.hook.weight | string | `"-2"` | | -| mlflow-postgresql.enabled | bool | `true` | | -| mlflow-postgresql.persistence.enabled | bool | `true` | | -| mlflow-postgresql.persistence.size | string | `"10Gi"` | | -| mlflow-postgresql.postgresqlDatabase | string | `"mlflow"` | | -| mlflow-postgresql.postgresqlUsername | string | `"mlflow"` | | -| mlflow-postgresql.replicaCount | int | `1` | | -| mlflow-postgresql.resources.requests.cpu | string | `"500m"` | | -| mlflow-postgresql.resources.requests.memory | string | `"512Mi"` | | -| mlflow.artifactRoot | string | `"/data/artifacts"` | | -| mlflow.artifactServiceType | string | `"nop"` | | -| mlflow.deploymentLabels | object | `{}` | | -| mlflow.extraEnvs | object | `{}` | | -| mlflow.host | string | `"0.0.0.0"` | | -| mlflow.image.pullPolicy | string | `"Always"` | | -| mlflow.image.registry | string | `"ghcr.io"` | | -| mlflow.image.repository | string | `"gojek/mlflow"` | | -| mlflow.image.tag | string | `"1.3.0"` | | -| mlflow.ingress.class | string | `"nginx"` | | -| mlflow.ingress.enabled | bool | `false` | | -| mlflow.livenessProbe.initialDelaySeconds | int | `30` | | -| mlflow.livenessProbe.periodSeconds | int | `10` | | -| mlflow.livenessProbe.successThreshold | int | `1` | | -| mlflow.livenessProbe.timeoutSeconds | int | `30` | | -| mlflow.name | string | `"mlflow"` | | -| mlflow.podLabels | object | `{}` | | -| mlflow.readinessProbe.initialDelaySeconds | int | `30` | | -| mlflow.readinessProbe.periodSeconds | int | `10` | | -| mlflow.readinessProbe.successThreshold | int | `1` | | -| mlflow.readinessProbe.timeoutSeconds | int | `30` | | -| mlflow.replicaCount | int | `1` | | -| mlflow.resources.limits.memory | string | `"2048Mi"` | | -| mlflow.resources.requests.cpu | string | `"500m"` | | -| mlflow.resources.requests.memory | string | `"512Mi"` | | -| mlflow.rollingUpdate.maxSurge | int | `1` | | -| mlflow.rollingUpdate.maxUnavailable | int | `0` | | -| mlflow.service.externalPort | int | `80` | | -| mlflow.service.internalPort | int | `5000` | | -| mlflow.service.type | string | `"ClusterIP"` | | -| mlflow.serviceAccount.annotations | object | `{}` | | -| mlflow.serviceAccount.create | bool | `true` | | -| mlflow.serviceAccount.name | string | `"mlflow"` | | -| mlflow.statefulset.updateStrategy | string | `"RollingUpdate"` | | -| mlflow.tolerations | list | `[]` | | -| mlflow.trackingURL | string | `"http://www.example.com"` | | -| mlflowExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | -| mlflowExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | -| mlflowExternalPostgresql.database | string | `"mlflow"` | External postgres database schema | -| mlflowExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | -| mlflowExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | -| mlflowExternalPostgresql.password | string | `"password"` | | -| mlflowExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | -| mlflowExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | -| mlflowExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | -| mlflowExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | -| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | -| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | -| mlflowExternalPostgresql.username | string | `"mlflow"` | External postgres database user | -| mlp.enabled | bool | `true` | | -| mlp.environmentConfigSecret.name | string | `""` | | -| mlp.fullnameOverride | string | `"mlp"` | | -| mlp.keto.enabled | bool | `true` | | -| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | -| rendered.overrides | object | `{}` | | -| rendered.releasedVersion | string | `"v0.35.0"` | | -| service.externalPort | int | `8080` | | -| service.internalPort | int | `8080` | | -| serviceAccount.annotations | object | `{}` | | -| serviceAccount.create | bool | `true` | | -| serviceAccount.name | string | `"merlin"` | | -| swagger.apiHost | string | `"merlin.dev"` | | -| swagger.basePath | string | `"/api/merlin/v1"` | | -| swagger.enabled | bool | `true` | | -| swagger.image.tag | string | `"v3.23.5"` | | -| swagger.service.externalPort | int | `8080` | | -| swagger.service.internalPort | int | `8081` | | -| ui.apiHost | string | `"/api/merlin/v1"` | | -| ui.dockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | -| ui.docsURL[0].href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | -| ui.docsURL[0].label | string | `"Getting Started with Merlin"` | | -| ui.homepage | string | `"/merlin"` | | -| ui.maxAllowedReplica | int | `20` | | -| ui.mlp.apiHost | string | `"/api"` | | -| ui.oauthClientID | string | `""` | | -| ui.upiDocURL | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| clusterConfig.environmentConfigPath | string | `"environments.yaml"` | environmentConfigPath is a path to a file that contains environmentConfigs. See api/environments-dev.yaml for example contents | +| clusterConfig.useInClusterConfig | bool | `false` | Configuration to tell Merlin API how it should authenticate with deployment k8s cluster By default, Merlin API expects to use a remote k8s cluster for deployment and to do so, it requires cluster access configurations to be configured as part of values.yaml | +| config.AuthorizationConfig.AuthorizationEnabled | bool | `true` | | +| config.AuthorizationConfig.Caching.CacheCleanUpIntervalSeconds | int | `900` | Cache clean up interval, after which expired keys are removed | +| config.AuthorizationConfig.Caching.Enabled | bool | `false` | Whether local in-memory caching of authorization responses should be enabled | +| config.AuthorizationConfig.Caching.KeyExpirySeconds | int | `600` | Cache key expiry duration | +| config.AuthorizationConfig.KetoRemoteRead | string | `"http://mlp-keto-read:80"` | | +| config.AuthorizationConfig.KetoRemoteWrite | string | `"http://mlp-keto-write:80"` | | +| config.DbConfig.Database | string | `"merlin"` | | +| config.DbConfig.Host | string | `"localhost"` | | +| config.DbConfig.Password | string | `"merlin"` | | +| config.DbConfig.Port | int | `5432` | | +| config.DbConfig.User | string | `"merlin"` | | +| config.DeploymentLabelPrefix | string | `"gojek.com/"` | | +| config.Environment | string | `"dev"` | | +| config.FeatureToggleConfig.AlertConfig.AlertEnabled | bool | `false` | To enable/disable creation/modification of the alerts and dashboards for the deployed models via merlin. | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertBranch | string | `"master"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertRepository | string | `"lens/artillery/datascience"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.BaseURL | string | `"https://gitlab.com/"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardBranch | string | `"master"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardRepository | string | `"data-science/slo-specs"` | | +| config.FeatureToggleConfig.AlertConfig.WardenConfig.APIHost | string | `""` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringBaseURL | string | `""` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringEnabled | bool | `false` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringJobBaseURL | string | `""` | | +| config.LoggerDestinationURL | string | `"http://yourDestinationLogger"` | | +| config.MlpAPIConfig.APIHost | string | `"http://mlp:8080"` | | +| config.NewRelic.AppName | string | `"merlin-api-dev"` | | +| config.NewRelic.Enabled | bool | `false` | | +| config.NewRelic.IgnoreStatusCodes[0] | int | `400` | | +| config.NewRelic.IgnoreStatusCodes[1] | int | `401` | | +| config.NewRelic.IgnoreStatusCodes[2] | int | `403` | | +| config.NewRelic.IgnoreStatusCodes[3] | int | `404` | | +| config.NewRelic.IgnoreStatusCodes[4] | int | `405` | | +| config.NewRelic.IgnoreStatusCodes[5] | int | `412` | | +| config.NewRelic.License | string | `"newrelic-license-secret"` | | +| config.NumOfQueueWorkers | int | `2` | | +| config.Port | int | `8080` | | +| config.PyFuncPublisherConfig.Kafka.Acks | int | `0` | | +| config.PyFuncPublisherConfig.Kafka.AdditionalConfig | string | `"{}"` | | +| config.PyFuncPublisherConfig.Kafka.Brokers | string | `"kafka-brokers"` | | +| config.PyFuncPublisherConfig.Kafka.LingerMS | int | `100` | | +| config.PyFuncPublisherConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | +| config.PyFuncPublisherConfig.SamplingRatioRate | float | `0.01` | | +| config.PyfuncGRPCOptions | string | `"{}"` | | +| config.ReactAppConfig.CPUCost | string | `nil` | | +| config.ReactAppConfig.DocURL[0].Href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | +| config.ReactAppConfig.DocURL[0].Label | string | `"Getting Started with Merlin"` | | +| config.ReactAppConfig.DockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | +| config.ReactAppConfig.Environment | string | `"dev"` | | +| config.ReactAppConfig.FeastCoreURL | string | `"http://feast-core.mlp:8080/v1"` | | +| config.ReactAppConfig.HomePage | string | `"/merlin"` | | +| config.ReactAppConfig.MaxAllowedReplica | int | `20` | | +| config.ReactAppConfig.MemoryCost | string | `nil` | | +| config.ReactAppConfig.MerlinURL | string | `"/api/merlin/v1"` | | +| config.ReactAppConfig.MlpURL | string | `"/api"` | | +| config.ReactAppConfig.OauthClientID | string | `nil` | | +| config.ReactAppConfig.UPIDocumentation | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | +| config.Sentry.DSN | string | `""` | | +| config.Sentry.Enabled | bool | `false` | | +| config.StandardTransformerConfig.BigtableCredential | string | `nil` | | +| config.StandardTransformerConfig.DefaultFeastSource | int | `2` | | +| config.StandardTransformerConfig.DefaultServingURL | string | `"online-serving-redis.feast.dev"` | | +| config.StandardTransformerConfig.EnableAuth | bool | `false` | | +| config.StandardTransformerConfig.FeastBigtableConfig.Instance | string | `"instance"` | | +| config.StandardTransformerConfig.FeastBigtableConfig.PoolSize | int | `5` | | +| config.StandardTransformerConfig.FeastBigtableConfig.Project | string | `"gcp-project"` | | +| config.StandardTransformerConfig.FeastBigtableConfig.ServingURL | string | `"online-serving-bigtable.feast.dev"` | | +| config.StandardTransformerConfig.FeastCoreAuthAudience | string | `"core.feast.dev"` | | +| config.StandardTransformerConfig.FeastCoreURL | string | `"core.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Enabled | bool | `false` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Time | string | `"60s"` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Timeout | string | `"5s"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Host | string | `"online-serving-redis.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Icon | string | `"redis"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Label | string | `"Online Serving with Redis"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].SourceType | string | `"REDIS"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Host | string | `"online-serving-bigtable.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Icon | string | `"bigtable"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Label | string | `"Online Serving with BigTable"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].SourceType | string | `"BIGTABLE"` | | +| config.StandardTransformerConfig.ImageName | string | `"ghcr.io/caraml-dev/merlin-transformer:1.0.0"` | | +| config.StandardTransformerConfig.Jaeger.CollectorURL | string | `"http://jaeger-tracing-collector.infrastructure:14268/api/traces"` | | +| config.StandardTransformerConfig.Jaeger.Disabled | bool | `false` | | +| config.StandardTransformerConfig.Jaeger.SamplerParam | int | `1` | | +| config.StandardTransformerConfig.Kafka.Acks | int | `0` | | +| config.StandardTransformerConfig.Kafka.AdditionalConfig | string | `"{}"` | | +| config.StandardTransformerConfig.Kafka.Brokers | string | `"kafka-brokers"` | | +| config.StandardTransformerConfig.Kafka.LingerMS | int | `100` | | +| config.StandardTransformerConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Enabled | bool | `false` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Time | string | `"60s"` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Timeout | string | `"5s"` | | +| config.StandardTransformerConfig.ModelServerConnCount | int | `10` | | +| config.StandardTransformerConfig.SimulationFeast.FeastBigtableURL | string | `"online-serving-bt.feast.dev"` | | +| config.StandardTransformerConfig.SimulationFeast.FeastRedisURL | string | `"online-serving-redis.feast.dev"` | | +| deployment.annotations | object | `{}` | | +| deployment.extraArgs | list | `[]` | List of string containing additional Merlin API server arguments. For example, multiple "-config" can be specified to use multiple config files | +| deployment.extraContainers | list | `[]` | List of sidecar containers to attach to the Pod. For example, you can attach sidecar container that forward logs or dynamically update some configuration files. | +| deployment.extraEnvs | list | `[]` | List of extra environment variables to add to Merlin API server container | +| deployment.extraInitContainers | list | `[]` | List of extra initContainers to add to the Pod. For example, you need to run some init scripts to fetch credentials from a remote server | +| deployment.extraVolumeMounts | list | `[]` | Extra volume mounts to attach to Merlin API server container. For example to mount the extra volume containing secrets | +| deployment.extraVolumes | list | `[]` | Extra volumes to attach to the Pod. For example, you can mount additional secrets to these volumes | +| deployment.image.pullPolicy | string | `"IfNotPresent"` | | +| deployment.image.registry | string | `"ghcr.io"` | | +| deployment.image.repository | string | `"caraml-dev/merlin"` | | +| deployment.image.tag | string | `""` | | +| deployment.labels | object | `{}` | | +| deployment.podLabels | object | `{}` | | +| deployment.replicaCount | string | `"2"` | | +| deployment.resources.limits.cpu | string | `"1"` | | +| deployment.resources.limits.memory | string | `"1Gi"` | | +| deployment.resources.requests.cpu | string | `"500m"` | | +| deployment.resources.requests.memory | string | `"1Gi"` | | +| deployment.tolerations | list | `[]` | | +| environmentConfigs[0].cluster | string | `"test"` | | +| environmentConfigs[0].default_deployment_config.cpu_request | string | `"500m"` | | +| environmentConfigs[0].default_deployment_config.max_replica | int | `1` | | +| environmentConfigs[0].default_deployment_config.memory_request | string | `"500Mi"` | | +| environmentConfigs[0].default_deployment_config.min_replica | int | `0` | | +| environmentConfigs[0].default_prediction_job_config.driver_cpu_request | string | `"2"` | | +| environmentConfigs[0].default_prediction_job_config.driver_memory_request | string | `"2Gi"` | | +| environmentConfigs[0].default_prediction_job_config.executor_cpu_request | string | `"2"` | | +| environmentConfigs[0].default_prediction_job_config.executor_memory_request | string | `"2Gi"` | | +| environmentConfigs[0].default_prediction_job_config.executor_replica | int | `3` | | +| environmentConfigs[0].default_transformer_config.cpu_request | string | `"500m"` | | +| environmentConfigs[0].default_transformer_config.max_replica | int | `1` | | +| environmentConfigs[0].default_transformer_config.memory_request | string | `"500Mi"` | | +| environmentConfigs[0].default_transformer_config.min_replica | int | `0` | | +| environmentConfigs[0].deployment_timeout | string | `"10m"` | | +| environmentConfigs[0].gcp_project | string | `"gcp-project"` | | +| environmentConfigs[0].is_default | bool | `true` | | +| environmentConfigs[0].is_default_prediction_job | bool | `true` | | +| environmentConfigs[0].is_prediction_job_enabled | bool | `true` | | +| environmentConfigs[0].k8s_config | object | `{}` | | +| environmentConfigs[0].max_cpu | string | `"8"` | | +| environmentConfigs[0].max_memory | string | `"8Gi"` | | +| environmentConfigs[0].name | string | `"id-dev"` | | +| environmentConfigs[0].namespace_timeout | string | `"2m"` | | +| environmentConfigs[0].queue_resource_percentage | string | `"20"` | | +| environmentConfigs[0].region | string | `"id"` | | +| global.protocol | string | `"http"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | +| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | +| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0"` | | +| imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | +| imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | +| imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | +| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | +| imageBuilder.builderConfig.MaximumRetry | int | `3` | | +| imageBuilder.builderConfig.NodeSelectors | object | `{}` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.37.0"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | +| imageBuilder.builderConfig.Retention | string | `"48h"` | | +| imageBuilder.builderConfig.SafeToEvict | bool | `false` | | +| imageBuilder.builderConfig.Tolerations | list | `[]` | | +| imageBuilder.clusterName | string | `"test"` | | +| imageBuilder.contextRef | string | `""` | | +| imageBuilder.k8sConfig | object | `{}` | | +| imageBuilder.serviceAccount.annotations | object | `{}` | | +| imageBuilder.serviceAccount.create | bool | `true` | | +| imageBuilder.serviceAccount.labels | object | `{}` | | +| imageBuilder.serviceAccount.name | string | `"kaniko"` | | +| ingress.enabled | bool | `false` | | +| kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | +| kserve.enabled | bool | `true` | | +| kserve.helmChart.chart | string | `"kserve"` | | +| kserve.helmChart.createNamespace | bool | `true` | | +| kserve.helmChart.namespace | string | `"kserve"` | | +| kserve.helmChart.release | string | `"kserve"` | | +| kserve.helmChart.repository | string | `"https://caraml-dev.github.io/helm-charts"` | | +| kserve.helmChart.version | string | `"0.8.22"` | | +| kserve.hook.weight | string | `"-2"` | | +| merlin-postgresql.enabled | bool | `true` | | +| merlin-postgresql.persistence.size | string | `"10Gi"` | | +| merlin-postgresql.postgresqlDatabase | string | `"merlin"` | | +| merlin-postgresql.postgresqlUsername | string | `"merlin"` | | +| merlin-postgresql.resources.requests.cpu | string | `"100m"` | | +| merlin-postgresql.resources.requests.memory | string | `"512Mi"` | | +| merlinExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | +| merlinExternalPostgresql.connMaxIdleTime | string | `"0s"` | Connection pooling settings | +| merlinExternalPostgresql.connMaxLifetime | string | `"0s"` | | +| merlinExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | +| merlinExternalPostgresql.database | string | `"merlin"` | External postgres database schema | +| merlinExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | +| merlinExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | +| merlinExternalPostgresql.maxIdleConns | int | `0` | | +| merlinExternalPostgresql.maxOpenConns | int | `0` | | +| merlinExternalPostgresql.password | string | `"password"` | | +| merlinExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | +| merlinExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | +| merlinExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | +| merlinExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | +| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | +| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | +| merlinExternalPostgresql.username | string | `"merlin"` | External postgres database user | +| minio.chartValues.defaultBucket.enabled | bool | `true` | | +| minio.chartValues.defaultBucket.name | string | `"mlflow"` | | +| minio.chartValues.ingress.annotations."kubernetes.io/ingress.class" | string | `"istio"` | | +| minio.chartValues.ingress.enabled | bool | `false` | | +| minio.chartValues.ingress.path | string | `"/*"` | | +| minio.chartValues.livenessProbe.initialDelaySeconds | int | `30` | | +| minio.chartValues.persistence.enabled | bool | `false` | | +| minio.chartValues.replicas | int | `1` | | +| minio.chartValues.resources.requests.cpu | string | `"25m"` | | +| minio.chartValues.resources.requests.memory | string | `"64Mi"` | | +| minio.enabled | bool | `true` | | +| minio.helmChart.chart | string | `"minio"` | | +| minio.helmChart.createNamespace | bool | `true` | | +| minio.helmChart.namespace | string | `"minio"` | | +| minio.helmChart.release | string | `"minio"` | | +| minio.helmChart.repository | string | `"https://charts.min.io/"` | "https://helm.min.io/" is no longer valid. TODO: Check if the chart coming from below is correct for this usecase, version also changed to latest in the below charts url. | +| minio.helmChart.version | string | `"5.0.14"` | | +| minio.hook.weight | string | `"-2"` | | +| mlflow-postgresql.enabled | bool | `true` | | +| mlflow-postgresql.persistence.enabled | bool | `true` | | +| mlflow-postgresql.persistence.size | string | `"10Gi"` | | +| mlflow-postgresql.postgresqlDatabase | string | `"mlflow"` | | +| mlflow-postgresql.postgresqlUsername | string | `"mlflow"` | | +| mlflow-postgresql.replicaCount | int | `1` | | +| mlflow-postgresql.resources.requests.cpu | string | `"500m"` | | +| mlflow-postgresql.resources.requests.memory | string | `"512Mi"` | | +| mlflow.artifactRoot | string | `"/data/artifacts"` | | +| mlflow.artifactServiceType | string | `"nop"` | | +| mlflow.deploymentLabels | object | `{}` | | +| mlflow.extraEnvs | object | `{}` | | +| mlflow.host | string | `"0.0.0.0"` | | +| mlflow.image.pullPolicy | string | `"Always"` | | +| mlflow.image.registry | string | `"ghcr.io"` | | +| mlflow.image.repository | string | `"gojek/mlflow"` | | +| mlflow.image.tag | string | `"1.3.0"` | | +| mlflow.ingress.class | string | `"nginx"` | | +| mlflow.ingress.enabled | bool | `false` | | +| mlflow.livenessProbe.initialDelaySeconds | int | `30` | | +| mlflow.livenessProbe.periodSeconds | int | `10` | | +| mlflow.livenessProbe.successThreshold | int | `1` | | +| mlflow.livenessProbe.timeoutSeconds | int | `30` | | +| mlflow.name | string | `"mlflow"` | | +| mlflow.podLabels | object | `{}` | | +| mlflow.readinessProbe.initialDelaySeconds | int | `30` | | +| mlflow.readinessProbe.periodSeconds | int | `10` | | +| mlflow.readinessProbe.successThreshold | int | `1` | | +| mlflow.readinessProbe.timeoutSeconds | int | `30` | | +| mlflow.replicaCount | int | `1` | | +| mlflow.resources.limits.memory | string | `"2048Mi"` | | +| mlflow.resources.requests.cpu | string | `"500m"` | | +| mlflow.resources.requests.memory | string | `"512Mi"` | | +| mlflow.rollingUpdate.maxSurge | int | `1` | | +| mlflow.rollingUpdate.maxUnavailable | int | `0` | | +| mlflow.service.externalPort | int | `80` | | +| mlflow.service.internalPort | int | `5000` | | +| mlflow.service.type | string | `"ClusterIP"` | | +| mlflow.serviceAccount.annotations | object | `{}` | | +| mlflow.serviceAccount.create | bool | `true` | | +| mlflow.serviceAccount.name | string | `"mlflow"` | | +| mlflow.statefulset.updateStrategy | string | `"RollingUpdate"` | | +| mlflow.tolerations | list | `[]` | | +| mlflow.trackingURL | string | `"http://www.example.com"` | | +| mlflowExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | +| mlflowExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | +| mlflowExternalPostgresql.database | string | `"mlflow"` | External postgres database schema | +| mlflowExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | +| mlflowExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | +| mlflowExternalPostgresql.password | string | `"password"` | | +| mlflowExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | +| mlflowExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | +| mlflowExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | +| mlflowExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | +| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | +| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | +| mlflowExternalPostgresql.username | string | `"mlflow"` | External postgres database user | +| mlp.enabled | bool | `true` | | +| mlp.environmentConfigSecret.name | string | `""` | | +| mlp.fullnameOverride | string | `"mlp"` | | +| mlp.keto.enabled | bool | `true` | | +| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | +| rendered.overrides | object | `{}` | | +| rendered.releasedVersion | string | `"v0.35.0"` | | +| service.externalPort | int | `8080` | | +| service.internalPort | int | `8080` | | +| serviceAccount.annotations | object | `{}` | | +| serviceAccount.create | bool | `true` | | +| serviceAccount.name | string | `"merlin"` | | +| swagger.apiHost | string | `"merlin.dev"` | | +| swagger.basePath | string | `"/api/merlin/v1"` | | +| swagger.enabled | bool | `true` | | +| swagger.image.tag | string | `"v3.23.5"` | | +| swagger.service.externalPort | int | `8080` | | +| swagger.service.internalPort | int | `8081` | | +| ui.apiHost | string | `"/api/merlin/v1"` | | +| ui.dockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | +| ui.docsURL[0].href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | +| ui.docsURL[0].label | string | `"Getting Started with Merlin"` | | +| ui.homepage | string | `"/merlin"` | | +| ui.maxAllowedReplica | int | `20` | | +| ui.mlp.apiHost | string | `"/api"` | | +| ui.oauthClientID | string | `""` | | +| ui.upiDocURL | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | From 8717542251ee92b123e0de69cb806a42471be78a Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 15:01:59 +0700 Subject: [PATCH 04/13] Fix lint --- charts/merlin/values.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/charts/merlin/values.yaml b/charts/merlin/values.yaml index 280a8fcc..9d935db0 100644 --- a/charts/merlin/values.yaml +++ b/charts/merlin/values.yaml @@ -158,10 +158,10 @@ config: MaxAllowedReplica: 20 MerlinURL: /api/merlin/v1 MlpURL: /api - OauthClientID: # to be set via CICD pipeline + OauthClientID: # to be set via CICD pipeline UPIDocumentation: "https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md" - CPUCost: # Unused - MemoryCost: # Unused + CPUCost: # Unused + MemoryCost: # Unused StandardTransformerConfig: ImageName: ghcr.io/caraml-dev/merlin-transformer:1.0.0 SimulationFeast: From c213f153a3c444f4cf36d23d2ac1c052bb912b1b Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 15:06:38 +0700 Subject: [PATCH 05/13] Bump caraml chart version --- charts/caraml/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/caraml/Chart.yaml b/charts/caraml/Chart.yaml index 5df45803..c6a73a20 100644 --- a/charts/caraml/Chart.yaml +++ b/charts/caraml/Chart.yaml @@ -72,4 +72,4 @@ maintainers: name: caraml-dev name: caraml type: application -version: 0.8.20 \ No newline at end of file +version: 0.8.21 \ No newline at end of file From c32cc577116e4027cb617302fce3ab6d25812feb Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 15:09:27 +0700 Subject: [PATCH 06/13] Fix caraml Chart.yaml lint: no new line at the end of file --- charts/caraml/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/caraml/Chart.yaml b/charts/caraml/Chart.yaml index c6a73a20..48529964 100644 --- a/charts/caraml/Chart.yaml +++ b/charts/caraml/Chart.yaml @@ -72,4 +72,4 @@ maintainers: name: caraml-dev name: caraml type: application -version: 0.8.21 \ No newline at end of file +version: 0.8.21 From 56bc5cd69566d16e994a9c1377f18c3cb89cb896 Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 15:19:09 +0700 Subject: [PATCH 07/13] Fix caraml README --- charts/caraml/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/caraml/README.md b/charts/caraml/README.md index 5fcb5f97..8e78684c 100644 --- a/charts/caraml/README.md +++ b/charts/caraml/README.md @@ -1,6 +1,6 @@ # caraml -![Version: 0.8.20](https://img.shields.io/badge/Version-0.8.20-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) +![Version: 0.8.21](https://img.shields.io/badge/Version-0.8.21-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.0.0](https://img.shields.io/badge/AppVersion-1.0.0-informational?style=flat-square) A Helm chart for deploying CaraML components @@ -212,4 +212,4 @@ A Helm chart for deploying CaraML components | xp-treatment.xp-management.enabled | bool | `false` | | ---------------------------------------------- -Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) \ No newline at end of file +Autogenerated from chart metadata using [helm-docs v1.11.0](https://github.com/norwoodj/helm-docs/releases/v1.11.0) From c297b785ac0c20eb75c734ee6e4723e0dca133c6 Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 15:39:12 +0700 Subject: [PATCH 08/13] Fix merlin unitttest --- .../tests/merlin_config_secret_test.yaml | 52 +++++-------------- 1 file changed, 13 insertions(+), 39 deletions(-) diff --git a/charts/merlin/tests/merlin_config_secret_test.yaml b/charts/merlin/tests/merlin_config_secret_test.yaml index 28040f21..f3e58037 100644 --- a/charts/merlin/tests/merlin_config_secret_test.yaml +++ b/charts/merlin/tests/merlin_config_secret_test.yaml @@ -124,22 +124,10 @@ tests: pattern: my-release-merlin-config$ - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py38:1.0.0-test-release" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:1.0.0-test-release" - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py39:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py310:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py38:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py39:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py310:1.0.0-test-release" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base:1.0.0-test-release" - matchRegex: path: stringData.[config.yaml] pattern: "ImageName: ghcr.io/caraml-dev/merlin-transformer:1.0.0-test-release" @@ -164,11 +152,10 @@ tests: releasedVersion: v1.0.0-test-release overrides: ImageBuilderConfig: - BaseImages: - 3.10.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py310:0.0.0-some-other-value - DockerfilePath: "python/pyfunc-server/docker/Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/pull/465" + BaseImage: + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.0.0-some-other-value + DockerfilePath: "python/pyfunc-server/docker/Dockerfile" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/pull/465" asserts: - isKind: of: Secret @@ -177,22 +164,10 @@ tests: pattern: my-release-merlin-config$ - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py38:1.0.0-test-release" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.0.0-some-other-value" - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py39:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py310:0.0.0-some-other-value" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py38:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py39:1.0.0-test-release" - - matchRegex: - path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base-py310:1.0.0-test-release" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base:1.0.0-test-release" - matchRegex: path: stringData.[config.yaml] pattern: "ImageName: ghcr.io/caraml-dev/merlin-transformer:1.0.0-test-release" @@ -208,11 +183,10 @@ tests: tag: "test-tag" config: ImageBuilderConfig: - BaseImages: - 3.10.*: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py310:0.0.0-set-from-config - DockerfilePath: "python/pyfunc-server/docker/Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/pull/123" + BaseImage: + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.0.0-set-from-config + DockerfilePath: "python/pyfunc-server/docker/Dockerfile" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/pull/123" asserts: - isKind: of: Secret @@ -221,7 +195,7 @@ tests: pattern: my-release-merlin-config$ - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base-py310:0.0.0-set-from-config" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.0.0-set-from-config" - matchRegex: path: stringData.[config.yaml] pattern: "BuildContextURI: git://github.com/caraml-dev/merlin.git#refs/pull/123" From 18f98ca00f6182a8869f9046cfd12d66482dec7d Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 15:46:15 +0700 Subject: [PATCH 09/13] Fix merlin unitttest --- charts/merlin/tests/merlin_config_secret_test.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/merlin/tests/merlin_config_secret_test.yaml b/charts/merlin/tests/merlin_config_secret_test.yaml index f3e58037..30d46d7c 100644 --- a/charts/merlin/tests/merlin_config_secret_test.yaml +++ b/charts/merlin/tests/merlin_config_secret_test.yaml @@ -195,7 +195,7 @@ tests: pattern: my-release-merlin-config$ - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.0.0-set-from-config" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0" - matchRegex: path: stringData.[config.yaml] - pattern: "BuildContextURI: git://github.com/caraml-dev/merlin.git#refs/pull/123" + pattern: "BuildContextURI: git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0" From 6155ecafd8518a289746f74055b8adfa79595fe4 Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 16:38:09 +0700 Subject: [PATCH 10/13] Bump merlin version --- charts/merlin/Chart.yaml | 2 +- charts/merlin/README.md | 645 +++++++++--------- .../tests/merlin_config_secret_test.yaml | 4 +- charts/merlin/values.yaml | 16 +- 4 files changed, 336 insertions(+), 331 deletions(-) diff --git a/charts/merlin/Chart.yaml b/charts/merlin/Chart.yaml index 126158e3..dd196735 100644 --- a/charts/merlin/Chart.yaml +++ b/charts/merlin/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -appVersion: v0.37.0 +appVersion: v0.38.0-rc1 dependencies: - alias: merlin-postgresql condition: merlin-postgresql.enabled diff --git a/charts/merlin/README.md b/charts/merlin/README.md index dfbc32f8..8c9c75f0 100644 --- a/charts/merlin/README.md +++ b/charts/merlin/README.md @@ -1,8 +1,9 @@ # merlin --- + ![Version: 0.13.8](https://img.shields.io/badge/Version-0.13.8-informational?style=flat-square) -![AppVersion: v0.37.0](https://img.shields.io/badge/AppVersion-v0.37.0-informational?style=flat-square) +![AppVersion: v0.38.0-rc1](https://img.shields.io/badge/AppVersion-v0.38.0-rc1-informational?style=flat-square) Kubernetes-friendly ML model management, deployment, and serving. @@ -18,7 +19,7 @@ Kubernetes cluster. Setting up Kubernetes and Helm is outside the scope of this README. Please refer to the Kubernetes and Helm documentation. - **Helm 3.0+** – This chart was tested with Helm v3.9.0, but it is also expected to work with earlier Helm versions -- **Kubernetes 1.22+** – This chart was tested with Kind v1.22.7 and minikube kubernetes version 1.22.* +- **Kubernetes 1.22+** – This chart was tested with Kind v1.22.7 and minikube kubernetes version 1.22.\* - When installing on minikube, please run in a separate shell: ```sh minikube tunnel @@ -37,6 +38,7 @@ helm repo add caraml https://caraml-dev.github.io/helm-charts This command will install Merlin release named `merlin` in the `default` namespace. Default chart values will be used for the installation: + ```shell $ helm install caraml/merlin ``` @@ -47,6 +49,7 @@ Refer to [Configuration](#configuration) section for the detailed description of ### Uninstalling the chart To uninstall `merlin` release: + ```shell $ helm uninstall merlin ``` @@ -55,325 +58,327 @@ The command removes all the Kubernetes components associated with the chart and This includes the dependencies that were installed by the chart. Note that, any PVCs created by the chart will have to be deleted manually. ### Rendered field -* The purpose of `.Values.rendered.*` is to configure parts of the helm chart that use the field * from 1 place -* For example, `.Values.rendered.releasedVersion` is used in rendering `merlin.config` partial template and `merlin.deploymentTag` partial template -* `.Values.rendered.releasedVersion` should be a git release or tag. If the git release is `v1.0.4` then the `.Values.rendered.releasedVersion` should be `v1.0.4` (keep the v prefix) -* If `.Values.deployment.image.tag` is specified, it will overwrite the value in `.Values.releasedVersion` -* The values in `.Values.rendered` will overwrite values in `.Values.config` + +- The purpose of `.Values.rendered.*` is to configure parts of the helm chart that use the field \* from 1 place +- For example, `.Values.rendered.releasedVersion` is used in rendering `merlin.config` partial template and `merlin.deploymentTag` partial template +- `.Values.rendered.releasedVersion` should be a git release or tag. If the git release is `v1.0.4` then the `.Values.rendered.releasedVersion` should be `v1.0.4` (keep the v prefix) +- If `.Values.deployment.image.tag` is specified, it will overwrite the value in `.Values.releasedVersion` +- The values in `.Values.rendered` will overwrite values in `.Values.config` ## Configuration + The following table lists the configurable parameters of the Merlin chart and their default values. -| Key | Type | Default | Description | -|-----|------|---------|-------------| -| clusterConfig.environmentConfigPath | string | `"environments.yaml"` | environmentConfigPath is a path to a file that contains environmentConfigs. See api/environments-dev.yaml for example contents | -| clusterConfig.useInClusterConfig | bool | `false` | Configuration to tell Merlin API how it should authenticate with deployment k8s cluster By default, Merlin API expects to use a remote k8s cluster for deployment and to do so, it requires cluster access configurations to be configured as part of values.yaml | -| config.AuthorizationConfig.AuthorizationEnabled | bool | `true` | | -| config.AuthorizationConfig.Caching.CacheCleanUpIntervalSeconds | int | `900` | Cache clean up interval, after which expired keys are removed | -| config.AuthorizationConfig.Caching.Enabled | bool | `false` | Whether local in-memory caching of authorization responses should be enabled | -| config.AuthorizationConfig.Caching.KeyExpirySeconds | int | `600` | Cache key expiry duration | -| config.AuthorizationConfig.KetoRemoteRead | string | `"http://mlp-keto-read:80"` | | -| config.AuthorizationConfig.KetoRemoteWrite | string | `"http://mlp-keto-write:80"` | | -| config.DbConfig.Database | string | `"merlin"` | | -| config.DbConfig.Host | string | `"localhost"` | | -| config.DbConfig.Password | string | `"merlin"` | | -| config.DbConfig.Port | int | `5432` | | -| config.DbConfig.User | string | `"merlin"` | | -| config.DeploymentLabelPrefix | string | `"gojek.com/"` | | -| config.Environment | string | `"dev"` | | -| config.FeatureToggleConfig.AlertConfig.AlertEnabled | bool | `false` | To enable/disable creation/modification of the alerts and dashboards for the deployed models via merlin. | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertBranch | string | `"master"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertRepository | string | `"lens/artillery/datascience"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.BaseURL | string | `"https://gitlab.com/"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardBranch | string | `"master"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardRepository | string | `"data-science/slo-specs"` | | -| config.FeatureToggleConfig.AlertConfig.WardenConfig.APIHost | string | `""` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringBaseURL | string | `""` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringEnabled | bool | `false` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringJobBaseURL | string | `""` | | -| config.LoggerDestinationURL | string | `"http://yourDestinationLogger"` | | -| config.MlpAPIConfig.APIHost | string | `"http://mlp:8080"` | | -| config.NewRelic.AppName | string | `"merlin-api-dev"` | | -| config.NewRelic.Enabled | bool | `false` | | -| config.NewRelic.IgnoreStatusCodes[0] | int | `400` | | -| config.NewRelic.IgnoreStatusCodes[1] | int | `401` | | -| config.NewRelic.IgnoreStatusCodes[2] | int | `403` | | -| config.NewRelic.IgnoreStatusCodes[3] | int | `404` | | -| config.NewRelic.IgnoreStatusCodes[4] | int | `405` | | -| config.NewRelic.IgnoreStatusCodes[5] | int | `412` | | -| config.NewRelic.License | string | `"newrelic-license-secret"` | | -| config.NumOfQueueWorkers | int | `2` | | -| config.Port | int | `8080` | | -| config.PyFuncPublisherConfig.Kafka.Acks | int | `0` | | -| config.PyFuncPublisherConfig.Kafka.AdditionalConfig | string | `"{}"` | | -| config.PyFuncPublisherConfig.Kafka.Brokers | string | `"kafka-brokers"` | | -| config.PyFuncPublisherConfig.Kafka.LingerMS | int | `100` | | -| config.PyFuncPublisherConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | -| config.PyFuncPublisherConfig.SamplingRatioRate | float | `0.01` | | -| config.PyfuncGRPCOptions | string | `"{}"` | | -| config.ReactAppConfig.CPUCost | string | `nil` | | -| config.ReactAppConfig.DocURL[0].Href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | -| config.ReactAppConfig.DocURL[0].Label | string | `"Getting Started with Merlin"` | | -| config.ReactAppConfig.DockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | -| config.ReactAppConfig.Environment | string | `"dev"` | | -| config.ReactAppConfig.FeastCoreURL | string | `"http://feast-core.mlp:8080/v1"` | | -| config.ReactAppConfig.HomePage | string | `"/merlin"` | | -| config.ReactAppConfig.MaxAllowedReplica | int | `20` | | -| config.ReactAppConfig.MemoryCost | string | `nil` | | -| config.ReactAppConfig.MerlinURL | string | `"/api/merlin/v1"` | | -| config.ReactAppConfig.MlpURL | string | `"/api"` | | -| config.ReactAppConfig.OauthClientID | string | `nil` | | -| config.ReactAppConfig.UPIDocumentation | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | -| config.Sentry.DSN | string | `""` | | -| config.Sentry.Enabled | bool | `false` | | -| config.StandardTransformerConfig.BigtableCredential | string | `nil` | | -| config.StandardTransformerConfig.DefaultFeastSource | int | `2` | | -| config.StandardTransformerConfig.DefaultServingURL | string | `"online-serving-redis.feast.dev"` | | -| config.StandardTransformerConfig.EnableAuth | bool | `false` | | -| config.StandardTransformerConfig.FeastBigtableConfig.Instance | string | `"instance"` | | -| config.StandardTransformerConfig.FeastBigtableConfig.PoolSize | int | `5` | | -| config.StandardTransformerConfig.FeastBigtableConfig.Project | string | `"gcp-project"` | | -| config.StandardTransformerConfig.FeastBigtableConfig.ServingURL | string | `"online-serving-bigtable.feast.dev"` | | -| config.StandardTransformerConfig.FeastCoreAuthAudience | string | `"core.feast.dev"` | | -| config.StandardTransformerConfig.FeastCoreURL | string | `"core.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Enabled | bool | `false` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Time | string | `"60s"` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Timeout | string | `"5s"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Host | string | `"online-serving-redis.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Icon | string | `"redis"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Label | string | `"Online Serving with Redis"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].SourceType | string | `"REDIS"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Host | string | `"online-serving-bigtable.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Icon | string | `"bigtable"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Label | string | `"Online Serving with BigTable"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].SourceType | string | `"BIGTABLE"` | | -| config.StandardTransformerConfig.ImageName | string | `"ghcr.io/caraml-dev/merlin-transformer:1.0.0"` | | -| config.StandardTransformerConfig.Jaeger.CollectorURL | string | `"http://jaeger-tracing-collector.infrastructure:14268/api/traces"` | | -| config.StandardTransformerConfig.Jaeger.Disabled | bool | `false` | | -| config.StandardTransformerConfig.Jaeger.SamplerParam | int | `1` | | -| config.StandardTransformerConfig.Kafka.Acks | int | `0` | | -| config.StandardTransformerConfig.Kafka.AdditionalConfig | string | `"{}"` | | -| config.StandardTransformerConfig.Kafka.Brokers | string | `"kafka-brokers"` | | -| config.StandardTransformerConfig.Kafka.LingerMS | int | `100` | | -| config.StandardTransformerConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Enabled | bool | `false` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Time | string | `"60s"` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Timeout | string | `"5s"` | | -| config.StandardTransformerConfig.ModelServerConnCount | int | `10` | | -| config.StandardTransformerConfig.SimulationFeast.FeastBigtableURL | string | `"online-serving-bt.feast.dev"` | | -| config.StandardTransformerConfig.SimulationFeast.FeastRedisURL | string | `"online-serving-redis.feast.dev"` | | -| deployment.annotations | object | `{}` | | -| deployment.extraArgs | list | `[]` | List of string containing additional Merlin API server arguments. For example, multiple "-config" can be specified to use multiple config files | -| deployment.extraContainers | list | `[]` | List of sidecar containers to attach to the Pod. For example, you can attach sidecar container that forward logs or dynamically update some configuration files. | -| deployment.extraEnvs | list | `[]` | List of extra environment variables to add to Merlin API server container | -| deployment.extraInitContainers | list | `[]` | List of extra initContainers to add to the Pod. For example, you need to run some init scripts to fetch credentials from a remote server | -| deployment.extraVolumeMounts | list | `[]` | Extra volume mounts to attach to Merlin API server container. For example to mount the extra volume containing secrets | -| deployment.extraVolumes | list | `[]` | Extra volumes to attach to the Pod. For example, you can mount additional secrets to these volumes | -| deployment.image.pullPolicy | string | `"IfNotPresent"` | | -| deployment.image.registry | string | `"ghcr.io"` | | -| deployment.image.repository | string | `"caraml-dev/merlin"` | | -| deployment.image.tag | string | `""` | | -| deployment.labels | object | `{}` | | -| deployment.podLabels | object | `{}` | | -| deployment.replicaCount | string | `"2"` | | -| deployment.resources.limits.cpu | string | `"1"` | | -| deployment.resources.limits.memory | string | `"1Gi"` | | -| deployment.resources.requests.cpu | string | `"500m"` | | -| deployment.resources.requests.memory | string | `"1Gi"` | | -| deployment.tolerations | list | `[]` | | -| environmentConfigs[0].cluster | string | `"test"` | | -| environmentConfigs[0].default_deployment_config.cpu_request | string | `"500m"` | | -| environmentConfigs[0].default_deployment_config.max_replica | int | `1` | | -| environmentConfigs[0].default_deployment_config.memory_request | string | `"500Mi"` | | -| environmentConfigs[0].default_deployment_config.min_replica | int | `0` | | -| environmentConfigs[0].default_prediction_job_config.driver_cpu_request | string | `"2"` | | -| environmentConfigs[0].default_prediction_job_config.driver_memory_request | string | `"2Gi"` | | -| environmentConfigs[0].default_prediction_job_config.executor_cpu_request | string | `"2"` | | -| environmentConfigs[0].default_prediction_job_config.executor_memory_request | string | `"2Gi"` | | -| environmentConfigs[0].default_prediction_job_config.executor_replica | int | `3` | | -| environmentConfigs[0].default_transformer_config.cpu_request | string | `"500m"` | | -| environmentConfigs[0].default_transformer_config.max_replica | int | `1` | | -| environmentConfigs[0].default_transformer_config.memory_request | string | `"500Mi"` | | -| environmentConfigs[0].default_transformer_config.min_replica | int | `0` | | -| environmentConfigs[0].deployment_timeout | string | `"10m"` | | -| environmentConfigs[0].gcp_project | string | `"gcp-project"` | | -| environmentConfigs[0].is_default | bool | `true` | | -| environmentConfigs[0].is_default_prediction_job | bool | `true` | | -| environmentConfigs[0].is_prediction_job_enabled | bool | `true` | | -| environmentConfigs[0].k8s_config | object | `{}` | | -| environmentConfigs[0].max_cpu | string | `"8"` | | -| environmentConfigs[0].max_memory | string | `"8Gi"` | | -| environmentConfigs[0].name | string | `"id-dev"` | | -| environmentConfigs[0].namespace_timeout | string | `"2m"` | | -| environmentConfigs[0].queue_resource_percentage | string | `"20"` | | -| environmentConfigs[0].region | string | `"id"` | | -| global.protocol | string | `"http"` | | -| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | -| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | -| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | -| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0"` | | -| imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | -| imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | -| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | -| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | -| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | -| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | -| imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | -| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | -| imageBuilder.builderConfig.MaximumRetry | int | `3` | | -| imageBuilder.builderConfig.NodeSelectors | object | `{}` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.37.0"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | -| imageBuilder.builderConfig.Retention | string | `"48h"` | | -| imageBuilder.builderConfig.SafeToEvict | bool | `false` | | -| imageBuilder.builderConfig.Tolerations | list | `[]` | | -| imageBuilder.clusterName | string | `"test"` | | -| imageBuilder.contextRef | string | `""` | | -| imageBuilder.k8sConfig | object | `{}` | | -| imageBuilder.serviceAccount.annotations | object | `{}` | | -| imageBuilder.serviceAccount.create | bool | `true` | | -| imageBuilder.serviceAccount.labels | object | `{}` | | -| imageBuilder.serviceAccount.name | string | `"kaniko"` | | -| ingress.enabled | bool | `false` | | -| kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | -| kserve.enabled | bool | `true` | | -| kserve.helmChart.chart | string | `"kserve"` | | -| kserve.helmChart.createNamespace | bool | `true` | | -| kserve.helmChart.namespace | string | `"kserve"` | | -| kserve.helmChart.release | string | `"kserve"` | | -| kserve.helmChart.repository | string | `"https://caraml-dev.github.io/helm-charts"` | | -| kserve.helmChart.version | string | `"0.8.22"` | | -| kserve.hook.weight | string | `"-2"` | | -| merlin-postgresql.enabled | bool | `true` | | -| merlin-postgresql.persistence.size | string | `"10Gi"` | | -| merlin-postgresql.postgresqlDatabase | string | `"merlin"` | | -| merlin-postgresql.postgresqlUsername | string | `"merlin"` | | -| merlin-postgresql.resources.requests.cpu | string | `"100m"` | | -| merlin-postgresql.resources.requests.memory | string | `"512Mi"` | | -| merlinExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | -| merlinExternalPostgresql.connMaxIdleTime | string | `"0s"` | Connection pooling settings | -| merlinExternalPostgresql.connMaxLifetime | string | `"0s"` | | -| merlinExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | -| merlinExternalPostgresql.database | string | `"merlin"` | External postgres database schema | -| merlinExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | -| merlinExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | -| merlinExternalPostgresql.maxIdleConns | int | `0` | | -| merlinExternalPostgresql.maxOpenConns | int | `0` | | -| merlinExternalPostgresql.password | string | `"password"` | | -| merlinExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | -| merlinExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | -| merlinExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | -| merlinExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | -| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | -| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | -| merlinExternalPostgresql.username | string | `"merlin"` | External postgres database user | -| minio.chartValues.defaultBucket.enabled | bool | `true` | | -| minio.chartValues.defaultBucket.name | string | `"mlflow"` | | -| minio.chartValues.ingress.annotations."kubernetes.io/ingress.class" | string | `"istio"` | | -| minio.chartValues.ingress.enabled | bool | `false` | | -| minio.chartValues.ingress.path | string | `"/*"` | | -| minio.chartValues.livenessProbe.initialDelaySeconds | int | `30` | | -| minio.chartValues.persistence.enabled | bool | `false` | | -| minio.chartValues.replicas | int | `1` | | -| minio.chartValues.resources.requests.cpu | string | `"25m"` | | -| minio.chartValues.resources.requests.memory | string | `"64Mi"` | | -| minio.enabled | bool | `true` | | -| minio.helmChart.chart | string | `"minio"` | | -| minio.helmChart.createNamespace | bool | `true` | | -| minio.helmChart.namespace | string | `"minio"` | | -| minio.helmChart.release | string | `"minio"` | | -| minio.helmChart.repository | string | `"https://charts.min.io/"` | "https://helm.min.io/" is no longer valid. TODO: Check if the chart coming from below is correct for this usecase, version also changed to latest in the below charts url. | -| minio.helmChart.version | string | `"5.0.14"` | | -| minio.hook.weight | string | `"-2"` | | -| mlflow-postgresql.enabled | bool | `true` | | -| mlflow-postgresql.persistence.enabled | bool | `true` | | -| mlflow-postgresql.persistence.size | string | `"10Gi"` | | -| mlflow-postgresql.postgresqlDatabase | string | `"mlflow"` | | -| mlflow-postgresql.postgresqlUsername | string | `"mlflow"` | | -| mlflow-postgresql.replicaCount | int | `1` | | -| mlflow-postgresql.resources.requests.cpu | string | `"500m"` | | -| mlflow-postgresql.resources.requests.memory | string | `"512Mi"` | | -| mlflow.artifactRoot | string | `"/data/artifacts"` | | -| mlflow.artifactServiceType | string | `"nop"` | | -| mlflow.deploymentLabels | object | `{}` | | -| mlflow.extraEnvs | object | `{}` | | -| mlflow.host | string | `"0.0.0.0"` | | -| mlflow.image.pullPolicy | string | `"Always"` | | -| mlflow.image.registry | string | `"ghcr.io"` | | -| mlflow.image.repository | string | `"gojek/mlflow"` | | -| mlflow.image.tag | string | `"1.3.0"` | | -| mlflow.ingress.class | string | `"nginx"` | | -| mlflow.ingress.enabled | bool | `false` | | -| mlflow.livenessProbe.initialDelaySeconds | int | `30` | | -| mlflow.livenessProbe.periodSeconds | int | `10` | | -| mlflow.livenessProbe.successThreshold | int | `1` | | -| mlflow.livenessProbe.timeoutSeconds | int | `30` | | -| mlflow.name | string | `"mlflow"` | | -| mlflow.podLabels | object | `{}` | | -| mlflow.readinessProbe.initialDelaySeconds | int | `30` | | -| mlflow.readinessProbe.periodSeconds | int | `10` | | -| mlflow.readinessProbe.successThreshold | int | `1` | | -| mlflow.readinessProbe.timeoutSeconds | int | `30` | | -| mlflow.replicaCount | int | `1` | | -| mlflow.resources.limits.memory | string | `"2048Mi"` | | -| mlflow.resources.requests.cpu | string | `"500m"` | | -| mlflow.resources.requests.memory | string | `"512Mi"` | | -| mlflow.rollingUpdate.maxSurge | int | `1` | | -| mlflow.rollingUpdate.maxUnavailable | int | `0` | | -| mlflow.service.externalPort | int | `80` | | -| mlflow.service.internalPort | int | `5000` | | -| mlflow.service.type | string | `"ClusterIP"` | | -| mlflow.serviceAccount.annotations | object | `{}` | | -| mlflow.serviceAccount.create | bool | `true` | | -| mlflow.serviceAccount.name | string | `"mlflow"` | | -| mlflow.statefulset.updateStrategy | string | `"RollingUpdate"` | | -| mlflow.tolerations | list | `[]` | | -| mlflow.trackingURL | string | `"http://www.example.com"` | | -| mlflowExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | -| mlflowExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | -| mlflowExternalPostgresql.database | string | `"mlflow"` | External postgres database schema | -| mlflowExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | -| mlflowExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | -| mlflowExternalPostgresql.password | string | `"password"` | | -| mlflowExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | -| mlflowExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | -| mlflowExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | -| mlflowExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | -| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | -| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | -| mlflowExternalPostgresql.username | string | `"mlflow"` | External postgres database user | -| mlp.enabled | bool | `true` | | -| mlp.environmentConfigSecret.name | string | `""` | | -| mlp.fullnameOverride | string | `"mlp"` | | -| mlp.keto.enabled | bool | `true` | | -| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | -| rendered.overrides | object | `{}` | | -| rendered.releasedVersion | string | `"v0.35.0"` | | -| service.externalPort | int | `8080` | | -| service.internalPort | int | `8080` | | -| serviceAccount.annotations | object | `{}` | | -| serviceAccount.create | bool | `true` | | -| serviceAccount.name | string | `"merlin"` | | -| swagger.apiHost | string | `"merlin.dev"` | | -| swagger.basePath | string | `"/api/merlin/v1"` | | -| swagger.enabled | bool | `true` | | -| swagger.image.tag | string | `"v3.23.5"` | | -| swagger.service.externalPort | int | `8080` | | -| swagger.service.internalPort | int | `8081` | | -| ui.apiHost | string | `"/api/merlin/v1"` | | -| ui.dockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | -| ui.docsURL[0].href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | -| ui.docsURL[0].label | string | `"Getting Started with Merlin"` | | -| ui.homepage | string | `"/merlin"` | | -| ui.maxAllowedReplica | int | `20` | | -| ui.mlp.apiHost | string | `"/api"` | | -| ui.oauthClientID | string | `""` | | -| ui.upiDocURL | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | +| Key | Type | Default | Description | +| ------------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| clusterConfig.environmentConfigPath | string | `"environments.yaml"` | environmentConfigPath is a path to a file that contains environmentConfigs. See api/environments-dev.yaml for example contents | +| clusterConfig.useInClusterConfig | bool | `false` | Configuration to tell Merlin API how it should authenticate with deployment k8s cluster By default, Merlin API expects to use a remote k8s cluster for deployment and to do so, it requires cluster access configurations to be configured as part of values.yaml | +| config.AuthorizationConfig.AuthorizationEnabled | bool | `true` | | +| config.AuthorizationConfig.Caching.CacheCleanUpIntervalSeconds | int | `900` | Cache clean up interval, after which expired keys are removed | +| config.AuthorizationConfig.Caching.Enabled | bool | `false` | Whether local in-memory caching of authorization responses should be enabled | +| config.AuthorizationConfig.Caching.KeyExpirySeconds | int | `600` | Cache key expiry duration | +| config.AuthorizationConfig.KetoRemoteRead | string | `"http://mlp-keto-read:80"` | | +| config.AuthorizationConfig.KetoRemoteWrite | string | `"http://mlp-keto-write:80"` | | +| config.DbConfig.Database | string | `"merlin"` | | +| config.DbConfig.Host | string | `"localhost"` | | +| config.DbConfig.Password | string | `"merlin"` | | +| config.DbConfig.Port | int | `5432` | | +| config.DbConfig.User | string | `"merlin"` | | +| config.DeploymentLabelPrefix | string | `"gojek.com/"` | | +| config.Environment | string | `"dev"` | | +| config.FeatureToggleConfig.AlertConfig.AlertEnabled | bool | `false` | To enable/disable creation/modification of the alerts and dashboards for the deployed models via merlin. | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertBranch | string | `"master"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertRepository | string | `"lens/artillery/datascience"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.BaseURL | string | `"https://gitlab.com/"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardBranch | string | `"master"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardRepository | string | `"data-science/slo-specs"` | | +| config.FeatureToggleConfig.AlertConfig.WardenConfig.APIHost | string | `""` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringBaseURL | string | `""` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringEnabled | bool | `false` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringJobBaseURL | string | `""` | | +| config.LoggerDestinationURL | string | `"http://yourDestinationLogger"` | | +| config.MlpAPIConfig.APIHost | string | `"http://mlp:8080"` | | +| config.NewRelic.AppName | string | `"merlin-api-dev"` | | +| config.NewRelic.Enabled | bool | `false` | | +| config.NewRelic.IgnoreStatusCodes[0] | int | `400` | | +| config.NewRelic.IgnoreStatusCodes[1] | int | `401` | | +| config.NewRelic.IgnoreStatusCodes[2] | int | `403` | | +| config.NewRelic.IgnoreStatusCodes[3] | int | `404` | | +| config.NewRelic.IgnoreStatusCodes[4] | int | `405` | | +| config.NewRelic.IgnoreStatusCodes[5] | int | `412` | | +| config.NewRelic.License | string | `"newrelic-license-secret"` | | +| config.NumOfQueueWorkers | int | `2` | | +| config.Port | int | `8080` | | +| config.PyFuncPublisherConfig.Kafka.Acks | int | `0` | | +| config.PyFuncPublisherConfig.Kafka.AdditionalConfig | string | `"{}"` | | +| config.PyFuncPublisherConfig.Kafka.Brokers | string | `"kafka-brokers"` | | +| config.PyFuncPublisherConfig.Kafka.LingerMS | int | `100` | | +| config.PyFuncPublisherConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | +| config.PyFuncPublisherConfig.SamplingRatioRate | float | `0.01` | | +| config.PyfuncGRPCOptions | string | `"{}"` | | +| config.ReactAppConfig.CPUCost | string | `nil` | | +| config.ReactAppConfig.DocURL[0].Href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | +| config.ReactAppConfig.DocURL[0].Label | string | `"Getting Started with Merlin"` | | +| config.ReactAppConfig.DockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | +| config.ReactAppConfig.Environment | string | `"dev"` | | +| config.ReactAppConfig.FeastCoreURL | string | `"http://feast-core.mlp:8080/v1"` | | +| config.ReactAppConfig.HomePage | string | `"/merlin"` | | +| config.ReactAppConfig.MaxAllowedReplica | int | `20` | | +| config.ReactAppConfig.MemoryCost | string | `nil` | | +| config.ReactAppConfig.MerlinURL | string | `"/api/merlin/v1"` | | +| config.ReactAppConfig.MlpURL | string | `"/api"` | | +| config.ReactAppConfig.OauthClientID | string | `nil` | | +| config.ReactAppConfig.UPIDocumentation | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | +| config.Sentry.DSN | string | `""` | | +| config.Sentry.Enabled | bool | `false` | | +| config.StandardTransformerConfig.BigtableCredential | string | `nil` | | +| config.StandardTransformerConfig.DefaultFeastSource | int | `2` | | +| config.StandardTransformerConfig.DefaultServingURL | string | `"online-serving-redis.feast.dev"` | | +| config.StandardTransformerConfig.EnableAuth | bool | `false` | | +| config.StandardTransformerConfig.FeastBigtableConfig.Instance | string | `"instance"` | | +| config.StandardTransformerConfig.FeastBigtableConfig.PoolSize | int | `5` | | +| config.StandardTransformerConfig.FeastBigtableConfig.Project | string | `"gcp-project"` | | +| config.StandardTransformerConfig.FeastBigtableConfig.ServingURL | string | `"online-serving-bigtable.feast.dev"` | | +| config.StandardTransformerConfig.FeastCoreAuthAudience | string | `"core.feast.dev"` | | +| config.StandardTransformerConfig.FeastCoreURL | string | `"core.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Enabled | bool | `false` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Time | string | `"60s"` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Timeout | string | `"5s"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Host | string | `"online-serving-redis.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Icon | string | `"redis"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Label | string | `"Online Serving with Redis"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].SourceType | string | `"REDIS"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Host | string | `"online-serving-bigtable.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Icon | string | `"bigtable"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Label | string | `"Online Serving with BigTable"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].SourceType | string | `"BIGTABLE"` | | +| config.StandardTransformerConfig.ImageName | string | `"ghcr.io/caraml-dev/merlin-transformer:1.0.0"` | | +| config.StandardTransformerConfig.Jaeger.CollectorURL | string | `"http://jaeger-tracing-collector.infrastructure:14268/api/traces"` | | +| config.StandardTransformerConfig.Jaeger.Disabled | bool | `false` | | +| config.StandardTransformerConfig.Jaeger.SamplerParam | int | `1` | | +| config.StandardTransformerConfig.Kafka.Acks | int | `0` | | +| config.StandardTransformerConfig.Kafka.AdditionalConfig | string | `"{}"` | | +| config.StandardTransformerConfig.Kafka.Brokers | string | `"kafka-brokers"` | | +| config.StandardTransformerConfig.Kafka.LingerMS | int | `100` | | +| config.StandardTransformerConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Enabled | bool | `false` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Time | string | `"60s"` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Timeout | string | `"5s"` | | +| config.StandardTransformerConfig.ModelServerConnCount | int | `10` | | +| config.StandardTransformerConfig.SimulationFeast.FeastBigtableURL | string | `"online-serving-bt.feast.dev"` | | +| config.StandardTransformerConfig.SimulationFeast.FeastRedisURL | string | `"online-serving-redis.feast.dev"` | | +| deployment.annotations | object | `{}` | | +| deployment.extraArgs | list | `[]` | List of string containing additional Merlin API server arguments. For example, multiple "-config" can be specified to use multiple config files | +| deployment.extraContainers | list | `[]` | List of sidecar containers to attach to the Pod. For example, you can attach sidecar container that forward logs or dynamically update some configuration files. | +| deployment.extraEnvs | list | `[]` | List of extra environment variables to add to Merlin API server container | +| deployment.extraInitContainers | list | `[]` | List of extra initContainers to add to the Pod. For example, you need to run some init scripts to fetch credentials from a remote server | +| deployment.extraVolumeMounts | list | `[]` | Extra volume mounts to attach to Merlin API server container. For example to mount the extra volume containing secrets | +| deployment.extraVolumes | list | `[]` | Extra volumes to attach to the Pod. For example, you can mount additional secrets to these volumes | +| deployment.image.pullPolicy | string | `"IfNotPresent"` | | +| deployment.image.registry | string | `"ghcr.io"` | | +| deployment.image.repository | string | `"caraml-dev/merlin"` | | +| deployment.image.tag | string | `""` | | +| deployment.labels | object | `{}` | | +| deployment.podLabels | object | `{}` | | +| deployment.replicaCount | string | `"2"` | | +| deployment.resources.limits.cpu | string | `"1"` | | +| deployment.resources.limits.memory | string | `"1Gi"` | | +| deployment.resources.requests.cpu | string | `"500m"` | | +| deployment.resources.requests.memory | string | `"1Gi"` | | +| deployment.tolerations | list | `[]` | | +| environmentConfigs[0].cluster | string | `"test"` | | +| environmentConfigs[0].default_deployment_config.cpu_request | string | `"500m"` | | +| environmentConfigs[0].default_deployment_config.max_replica | int | `1` | | +| environmentConfigs[0].default_deployment_config.memory_request | string | `"500Mi"` | | +| environmentConfigs[0].default_deployment_config.min_replica | int | `0` | | +| environmentConfigs[0].default_prediction_job_config.driver_cpu_request | string | `"2"` | | +| environmentConfigs[0].default_prediction_job_config.driver_memory_request | string | `"2Gi"` | | +| environmentConfigs[0].default_prediction_job_config.executor_cpu_request | string | `"2"` | | +| environmentConfigs[0].default_prediction_job_config.executor_memory_request | string | `"2Gi"` | | +| environmentConfigs[0].default_prediction_job_config.executor_replica | int | `3` | | +| environmentConfigs[0].default_transformer_config.cpu_request | string | `"500m"` | | +| environmentConfigs[0].default_transformer_config.max_replica | int | `1` | | +| environmentConfigs[0].default_transformer_config.memory_request | string | `"500Mi"` | | +| environmentConfigs[0].default_transformer_config.min_replica | int | `0` | | +| environmentConfigs[0].deployment_timeout | string | `"10m"` | | +| environmentConfigs[0].gcp_project | string | `"gcp-project"` | | +| environmentConfigs[0].is_default | bool | `true` | | +| environmentConfigs[0].is_default_prediction_job | bool | `true` | | +| environmentConfigs[0].is_prediction_job_enabled | bool | `true` | | +| environmentConfigs[0].k8s_config | object | `{}` | | +| environmentConfigs[0].max_cpu | string | `"8"` | | +| environmentConfigs[0].max_memory | string | `"8Gi"` | | +| environmentConfigs[0].name | string | `"id-dev"` | | +| environmentConfigs[0].namespace_timeout | string | `"2m"` | | +| environmentConfigs[0].queue_resource_percentage | string | `"20"` | | +| environmentConfigs[0].region | string | `"id"` | | +| global.protocol | string | `"http"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | +| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | +| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.38.0-rc1"` | | +| imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | +| imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | +| imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | +| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | +| imageBuilder.builderConfig.MaximumRetry | int | `3` | | +| imageBuilder.builderConfig.NodeSelectors | object | `{}` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.38.0-rc1"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | +| imageBuilder.builderConfig.Retention | string | `"48h"` | | +| imageBuilder.builderConfig.SafeToEvict | bool | `false` | | +| imageBuilder.builderConfig.Tolerations | list | `[]` | | +| imageBuilder.clusterName | string | `"test"` | | +| imageBuilder.contextRef | string | `""` | | +| imageBuilder.k8sConfig | object | `{}` | | +| imageBuilder.serviceAccount.annotations | object | `{}` | | +| imageBuilder.serviceAccount.create | bool | `true` | | +| imageBuilder.serviceAccount.labels | object | `{}` | | +| imageBuilder.serviceAccount.name | string | `"kaniko"` | | +| ingress.enabled | bool | `false` | | +| kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | +| kserve.enabled | bool | `true` | | +| kserve.helmChart.chart | string | `"kserve"` | | +| kserve.helmChart.createNamespace | bool | `true` | | +| kserve.helmChart.namespace | string | `"kserve"` | | +| kserve.helmChart.release | string | `"kserve"` | | +| kserve.helmChart.repository | string | `"https://caraml-dev.github.io/helm-charts"` | | +| kserve.helmChart.version | string | `"0.8.22"` | | +| kserve.hook.weight | string | `"-2"` | | +| merlin-postgresql.enabled | bool | `true` | | +| merlin-postgresql.persistence.size | string | `"10Gi"` | | +| merlin-postgresql.postgresqlDatabase | string | `"merlin"` | | +| merlin-postgresql.postgresqlUsername | string | `"merlin"` | | +| merlin-postgresql.resources.requests.cpu | string | `"100m"` | | +| merlin-postgresql.resources.requests.memory | string | `"512Mi"` | | +| merlinExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | +| merlinExternalPostgresql.connMaxIdleTime | string | `"0s"` | Connection pooling settings | +| merlinExternalPostgresql.connMaxLifetime | string | `"0s"` | | +| merlinExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | +| merlinExternalPostgresql.database | string | `"merlin"` | External postgres database schema | +| merlinExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | +| merlinExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | +| merlinExternalPostgresql.maxIdleConns | int | `0` | | +| merlinExternalPostgresql.maxOpenConns | int | `0` | | +| merlinExternalPostgresql.password | string | `"password"` | | +| merlinExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | +| merlinExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | +| merlinExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | +| merlinExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | +| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | +| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | +| merlinExternalPostgresql.username | string | `"merlin"` | External postgres database user | +| minio.chartValues.defaultBucket.enabled | bool | `true` | | +| minio.chartValues.defaultBucket.name | string | `"mlflow"` | | +| minio.chartValues.ingress.annotations."kubernetes.io/ingress.class" | string | `"istio"` | | +| minio.chartValues.ingress.enabled | bool | `false` | | +| minio.chartValues.ingress.path | string | `"/*"` | | +| minio.chartValues.livenessProbe.initialDelaySeconds | int | `30` | | +| minio.chartValues.persistence.enabled | bool | `false` | | +| minio.chartValues.replicas | int | `1` | | +| minio.chartValues.resources.requests.cpu | string | `"25m"` | | +| minio.chartValues.resources.requests.memory | string | `"64Mi"` | | +| minio.enabled | bool | `true` | | +| minio.helmChart.chart | string | `"minio"` | | +| minio.helmChart.createNamespace | bool | `true` | | +| minio.helmChart.namespace | string | `"minio"` | | +| minio.helmChart.release | string | `"minio"` | | +| minio.helmChart.repository | string | `"https://charts.min.io/"` | "https://helm.min.io/" is no longer valid. TODO: Check if the chart coming from below is correct for this usecase, version also changed to latest in the below charts url. | +| minio.helmChart.version | string | `"5.0.14"` | | +| minio.hook.weight | string | `"-2"` | | +| mlflow-postgresql.enabled | bool | `true` | | +| mlflow-postgresql.persistence.enabled | bool | `true` | | +| mlflow-postgresql.persistence.size | string | `"10Gi"` | | +| mlflow-postgresql.postgresqlDatabase | string | `"mlflow"` | | +| mlflow-postgresql.postgresqlUsername | string | `"mlflow"` | | +| mlflow-postgresql.replicaCount | int | `1` | | +| mlflow-postgresql.resources.requests.cpu | string | `"500m"` | | +| mlflow-postgresql.resources.requests.memory | string | `"512Mi"` | | +| mlflow.artifactRoot | string | `"/data/artifacts"` | | +| mlflow.artifactServiceType | string | `"nop"` | | +| mlflow.deploymentLabels | object | `{}` | | +| mlflow.extraEnvs | object | `{}` | | +| mlflow.host | string | `"0.0.0.0"` | | +| mlflow.image.pullPolicy | string | `"Always"` | | +| mlflow.image.registry | string | `"ghcr.io"` | | +| mlflow.image.repository | string | `"gojek/mlflow"` | | +| mlflow.image.tag | string | `"1.3.0"` | | +| mlflow.ingress.class | string | `"nginx"` | | +| mlflow.ingress.enabled | bool | `false` | | +| mlflow.livenessProbe.initialDelaySeconds | int | `30` | | +| mlflow.livenessProbe.periodSeconds | int | `10` | | +| mlflow.livenessProbe.successThreshold | int | `1` | | +| mlflow.livenessProbe.timeoutSeconds | int | `30` | | +| mlflow.name | string | `"mlflow"` | | +| mlflow.podLabels | object | `{}` | | +| mlflow.readinessProbe.initialDelaySeconds | int | `30` | | +| mlflow.readinessProbe.periodSeconds | int | `10` | | +| mlflow.readinessProbe.successThreshold | int | `1` | | +| mlflow.readinessProbe.timeoutSeconds | int | `30` | | +| mlflow.replicaCount | int | `1` | | +| mlflow.resources.limits.memory | string | `"2048Mi"` | | +| mlflow.resources.requests.cpu | string | `"500m"` | | +| mlflow.resources.requests.memory | string | `"512Mi"` | | +| mlflow.rollingUpdate.maxSurge | int | `1` | | +| mlflow.rollingUpdate.maxUnavailable | int | `0` | | +| mlflow.service.externalPort | int | `80` | | +| mlflow.service.internalPort | int | `5000` | | +| mlflow.service.type | string | `"ClusterIP"` | | +| mlflow.serviceAccount.annotations | object | `{}` | | +| mlflow.serviceAccount.create | bool | `true` | | +| mlflow.serviceAccount.name | string | `"mlflow"` | | +| mlflow.statefulset.updateStrategy | string | `"RollingUpdate"` | | +| mlflow.tolerations | list | `[]` | | +| mlflow.trackingURL | string | `"http://www.example.com"` | | +| mlflowExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | +| mlflowExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | +| mlflowExternalPostgresql.database | string | `"mlflow"` | External postgres database schema | +| mlflowExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | +| mlflowExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | +| mlflowExternalPostgresql.password | string | `"password"` | | +| mlflowExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | +| mlflowExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | +| mlflowExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | +| mlflowExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | +| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | +| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | +| mlflowExternalPostgresql.username | string | `"mlflow"` | External postgres database user | +| mlp.enabled | bool | `true` | | +| mlp.environmentConfigSecret.name | string | `""` | | +| mlp.fullnameOverride | string | `"mlp"` | | +| mlp.keto.enabled | bool | `true` | | +| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | +| rendered.overrides | object | `{}` | | +| rendered.releasedVersion | string | `"v0.35.0"` | | +| service.externalPort | int | `8080` | | +| service.internalPort | int | `8080` | | +| serviceAccount.annotations | object | `{}` | | +| serviceAccount.create | bool | `true` | | +| serviceAccount.name | string | `"merlin"` | | +| swagger.apiHost | string | `"merlin.dev"` | | +| swagger.basePath | string | `"/api/merlin/v1"` | | +| swagger.enabled | bool | `true` | | +| swagger.image.tag | string | `"v3.23.5"` | | +| swagger.service.externalPort | int | `8080` | | +| swagger.service.internalPort | int | `8081` | | +| ui.apiHost | string | `"/api/merlin/v1"` | | +| ui.dockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | +| ui.docsURL[0].href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | +| ui.docsURL[0].label | string | `"Getting Started with Merlin"` | | +| ui.homepage | string | `"/merlin"` | | +| ui.maxAllowedReplica | int | `20` | | +| ui.mlp.apiHost | string | `"/api"` | | +| ui.oauthClientID | string | `""` | | +| ui.upiDocURL | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | diff --git a/charts/merlin/tests/merlin_config_secret_test.yaml b/charts/merlin/tests/merlin_config_secret_test.yaml index 30d46d7c..8cf61322 100644 --- a/charts/merlin/tests/merlin_config_secret_test.yaml +++ b/charts/merlin/tests/merlin_config_secret_test.yaml @@ -195,7 +195,7 @@ tests: pattern: my-release-merlin-config$ - matchRegex: path: stringData.[config.yaml] - pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0" + pattern: "ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.38.0-rc1" - matchRegex: path: stringData.[config.yaml] - pattern: "BuildContextURI: git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0" + pattern: "BuildContextURI: git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1" diff --git a/charts/merlin/values.yaml b/charts/merlin/values.yaml index 9d935db0..0cf06a63 100644 --- a/charts/merlin/values.yaml +++ b/charts/merlin/values.yaml @@ -6,7 +6,7 @@ global: # .config when generating templates rendered: # releasedVersion refers to the git release or tag - releasedVersion: v0.35.0 + releasedVersion: v0.38.0-rc1 overrides: {} # set deployment.image.tag to non-nil to overwrite @@ -158,10 +158,10 @@ config: MaxAllowedReplica: 20 MerlinURL: /api/merlin/v1 MlpURL: /api - OauthClientID: # to be set via CICD pipeline + OauthClientID: # to be set via CICD pipeline UPIDocumentation: "https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md" - CPUCost: # Unused - MemoryCost: # Unused + CPUCost: # Unused + MemoryCost: # Unused StandardTransformerConfig: ImageName: ghcr.io/caraml-dev/merlin-transformer:1.0.0 SimulationFeast: @@ -267,14 +267,14 @@ imageBuilder: # provideClusterInfo: true builderConfig: BaseImage: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.37.0 + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.38.0-rc1 DockerfilePath: "pyfunc-server/docker/Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1" BuildContextSubPath: "python" PredictionJobBaseImages: - ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.37.0 + ImageName: ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.38.0-rc1 DockerfilePath: "batch-predictor/docker/app.Dockerfile" - BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/tags/v0.37.0" + BuildContextURI: "git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1" BuildContextSubPath: "python" MainAppPath: "/home/spark/merlin-spark-app/main.py" BuildNamespace: "mlp" From cb18a63a6838e84fadb6a5cc1ced90941f4e9803 Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 17:12:06 +0700 Subject: [PATCH 11/13] Fix lint --- charts/merlin/values.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/charts/merlin/values.yaml b/charts/merlin/values.yaml index 0cf06a63..e25f1d53 100644 --- a/charts/merlin/values.yaml +++ b/charts/merlin/values.yaml @@ -158,10 +158,10 @@ config: MaxAllowedReplica: 20 MerlinURL: /api/merlin/v1 MlpURL: /api - OauthClientID: # to be set via CICD pipeline + OauthClientID: # to be set via CICD pipeline UPIDocumentation: "https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md" - CPUCost: # Unused - MemoryCost: # Unused + CPUCost: # Unused + MemoryCost: # Unused StandardTransformerConfig: ImageName: ghcr.io/caraml-dev/merlin-transformer:1.0.0 SimulationFeast: From d20e0f94b85c13cab0b85e0b91a6abd522ab0847 Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 17:17:07 +0700 Subject: [PATCH 12/13] Update README.md --- charts/merlin/README.md | 645 ++++++++++++++++++++-------------------- 1 file changed, 320 insertions(+), 325 deletions(-) diff --git a/charts/merlin/README.md b/charts/merlin/README.md index 8c9c75f0..9b75ce24 100644 --- a/charts/merlin/README.md +++ b/charts/merlin/README.md @@ -1,9 +1,8 @@ # merlin --- - ![Version: 0.13.8](https://img.shields.io/badge/Version-0.13.8-informational?style=flat-square) -![AppVersion: v0.38.0-rc1](https://img.shields.io/badge/AppVersion-v0.38.0-rc1-informational?style=flat-square) +![AppVersion: v0.38.0-rc1](https://img.shields.io/badge/AppVersion-v0.38.0--rc1-informational?style=flat-square) Kubernetes-friendly ML model management, deployment, and serving. @@ -19,7 +18,7 @@ Kubernetes cluster. Setting up Kubernetes and Helm is outside the scope of this README. Please refer to the Kubernetes and Helm documentation. - **Helm 3.0+** – This chart was tested with Helm v3.9.0, but it is also expected to work with earlier Helm versions -- **Kubernetes 1.22+** – This chart was tested with Kind v1.22.7 and minikube kubernetes version 1.22.\* +- **Kubernetes 1.22+** – This chart was tested with Kind v1.22.7 and minikube kubernetes version 1.22.* - When installing on minikube, please run in a separate shell: ```sh minikube tunnel @@ -38,7 +37,6 @@ helm repo add caraml https://caraml-dev.github.io/helm-charts This command will install Merlin release named `merlin` in the `default` namespace. Default chart values will be used for the installation: - ```shell $ helm install caraml/merlin ``` @@ -49,7 +47,6 @@ Refer to [Configuration](#configuration) section for the detailed description of ### Uninstalling the chart To uninstall `merlin` release: - ```shell $ helm uninstall merlin ``` @@ -58,327 +55,325 @@ The command removes all the Kubernetes components associated with the chart and This includes the dependencies that were installed by the chart. Note that, any PVCs created by the chart will have to be deleted manually. ### Rendered field - -- The purpose of `.Values.rendered.*` is to configure parts of the helm chart that use the field \* from 1 place -- For example, `.Values.rendered.releasedVersion` is used in rendering `merlin.config` partial template and `merlin.deploymentTag` partial template -- `.Values.rendered.releasedVersion` should be a git release or tag. If the git release is `v1.0.4` then the `.Values.rendered.releasedVersion` should be `v1.0.4` (keep the v prefix) -- If `.Values.deployment.image.tag` is specified, it will overwrite the value in `.Values.releasedVersion` -- The values in `.Values.rendered` will overwrite values in `.Values.config` +* The purpose of `.Values.rendered.*` is to configure parts of the helm chart that use the field * from 1 place +* For example, `.Values.rendered.releasedVersion` is used in rendering `merlin.config` partial template and `merlin.deploymentTag` partial template +* `.Values.rendered.releasedVersion` should be a git release or tag. If the git release is `v1.0.4` then the `.Values.rendered.releasedVersion` should be `v1.0.4` (keep the v prefix) +* If `.Values.deployment.image.tag` is specified, it will overwrite the value in `.Values.releasedVersion` +* The values in `.Values.rendered` will overwrite values in `.Values.config` ## Configuration - The following table lists the configurable parameters of the Merlin chart and their default values. -| Key | Type | Default | Description | -| ------------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| clusterConfig.environmentConfigPath | string | `"environments.yaml"` | environmentConfigPath is a path to a file that contains environmentConfigs. See api/environments-dev.yaml for example contents | -| clusterConfig.useInClusterConfig | bool | `false` | Configuration to tell Merlin API how it should authenticate with deployment k8s cluster By default, Merlin API expects to use a remote k8s cluster for deployment and to do so, it requires cluster access configurations to be configured as part of values.yaml | -| config.AuthorizationConfig.AuthorizationEnabled | bool | `true` | | -| config.AuthorizationConfig.Caching.CacheCleanUpIntervalSeconds | int | `900` | Cache clean up interval, after which expired keys are removed | -| config.AuthorizationConfig.Caching.Enabled | bool | `false` | Whether local in-memory caching of authorization responses should be enabled | -| config.AuthorizationConfig.Caching.KeyExpirySeconds | int | `600` | Cache key expiry duration | -| config.AuthorizationConfig.KetoRemoteRead | string | `"http://mlp-keto-read:80"` | | -| config.AuthorizationConfig.KetoRemoteWrite | string | `"http://mlp-keto-write:80"` | | -| config.DbConfig.Database | string | `"merlin"` | | -| config.DbConfig.Host | string | `"localhost"` | | -| config.DbConfig.Password | string | `"merlin"` | | -| config.DbConfig.Port | int | `5432` | | -| config.DbConfig.User | string | `"merlin"` | | -| config.DeploymentLabelPrefix | string | `"gojek.com/"` | | -| config.Environment | string | `"dev"` | | -| config.FeatureToggleConfig.AlertConfig.AlertEnabled | bool | `false` | To enable/disable creation/modification of the alerts and dashboards for the deployed models via merlin. | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertBranch | string | `"master"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertRepository | string | `"lens/artillery/datascience"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.BaseURL | string | `"https://gitlab.com/"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardBranch | string | `"master"` | | -| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardRepository | string | `"data-science/slo-specs"` | | -| config.FeatureToggleConfig.AlertConfig.WardenConfig.APIHost | string | `""` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringBaseURL | string | `""` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringEnabled | bool | `false` | | -| config.FeatureToggleConfig.MonitoringConfig.MonitoringJobBaseURL | string | `""` | | -| config.LoggerDestinationURL | string | `"http://yourDestinationLogger"` | | -| config.MlpAPIConfig.APIHost | string | `"http://mlp:8080"` | | -| config.NewRelic.AppName | string | `"merlin-api-dev"` | | -| config.NewRelic.Enabled | bool | `false` | | -| config.NewRelic.IgnoreStatusCodes[0] | int | `400` | | -| config.NewRelic.IgnoreStatusCodes[1] | int | `401` | | -| config.NewRelic.IgnoreStatusCodes[2] | int | `403` | | -| config.NewRelic.IgnoreStatusCodes[3] | int | `404` | | -| config.NewRelic.IgnoreStatusCodes[4] | int | `405` | | -| config.NewRelic.IgnoreStatusCodes[5] | int | `412` | | -| config.NewRelic.License | string | `"newrelic-license-secret"` | | -| config.NumOfQueueWorkers | int | `2` | | -| config.Port | int | `8080` | | -| config.PyFuncPublisherConfig.Kafka.Acks | int | `0` | | -| config.PyFuncPublisherConfig.Kafka.AdditionalConfig | string | `"{}"` | | -| config.PyFuncPublisherConfig.Kafka.Brokers | string | `"kafka-brokers"` | | -| config.PyFuncPublisherConfig.Kafka.LingerMS | int | `100` | | -| config.PyFuncPublisherConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | -| config.PyFuncPublisherConfig.SamplingRatioRate | float | `0.01` | | -| config.PyfuncGRPCOptions | string | `"{}"` | | -| config.ReactAppConfig.CPUCost | string | `nil` | | -| config.ReactAppConfig.DocURL[0].Href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | -| config.ReactAppConfig.DocURL[0].Label | string | `"Getting Started with Merlin"` | | -| config.ReactAppConfig.DockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | -| config.ReactAppConfig.Environment | string | `"dev"` | | -| config.ReactAppConfig.FeastCoreURL | string | `"http://feast-core.mlp:8080/v1"` | | -| config.ReactAppConfig.HomePage | string | `"/merlin"` | | -| config.ReactAppConfig.MaxAllowedReplica | int | `20` | | -| config.ReactAppConfig.MemoryCost | string | `nil` | | -| config.ReactAppConfig.MerlinURL | string | `"/api/merlin/v1"` | | -| config.ReactAppConfig.MlpURL | string | `"/api"` | | -| config.ReactAppConfig.OauthClientID | string | `nil` | | -| config.ReactAppConfig.UPIDocumentation | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | -| config.Sentry.DSN | string | `""` | | -| config.Sentry.Enabled | bool | `false` | | -| config.StandardTransformerConfig.BigtableCredential | string | `nil` | | -| config.StandardTransformerConfig.DefaultFeastSource | int | `2` | | -| config.StandardTransformerConfig.DefaultServingURL | string | `"online-serving-redis.feast.dev"` | | -| config.StandardTransformerConfig.EnableAuth | bool | `false` | | -| config.StandardTransformerConfig.FeastBigtableConfig.Instance | string | `"instance"` | | -| config.StandardTransformerConfig.FeastBigtableConfig.PoolSize | int | `5` | | -| config.StandardTransformerConfig.FeastBigtableConfig.Project | string | `"gcp-project"` | | -| config.StandardTransformerConfig.FeastBigtableConfig.ServingURL | string | `"online-serving-bigtable.feast.dev"` | | -| config.StandardTransformerConfig.FeastCoreAuthAudience | string | `"core.feast.dev"` | | -| config.StandardTransformerConfig.FeastCoreURL | string | `"core.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Enabled | bool | `false` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Time | string | `"60s"` | | -| config.StandardTransformerConfig.FeastServingKeepAlive.Timeout | string | `"5s"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Host | string | `"online-serving-redis.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Icon | string | `"redis"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].Label | string | `"Online Serving with Redis"` | | -| config.StandardTransformerConfig.FeastServingURLs[0].SourceType | string | `"REDIS"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Host | string | `"online-serving-bigtable.feast.dev"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Icon | string | `"bigtable"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].Label | string | `"Online Serving with BigTable"` | | -| config.StandardTransformerConfig.FeastServingURLs[1].SourceType | string | `"BIGTABLE"` | | -| config.StandardTransformerConfig.ImageName | string | `"ghcr.io/caraml-dev/merlin-transformer:1.0.0"` | | -| config.StandardTransformerConfig.Jaeger.CollectorURL | string | `"http://jaeger-tracing-collector.infrastructure:14268/api/traces"` | | -| config.StandardTransformerConfig.Jaeger.Disabled | bool | `false` | | -| config.StandardTransformerConfig.Jaeger.SamplerParam | int | `1` | | -| config.StandardTransformerConfig.Kafka.Acks | int | `0` | | -| config.StandardTransformerConfig.Kafka.AdditionalConfig | string | `"{}"` | | -| config.StandardTransformerConfig.Kafka.Brokers | string | `"kafka-brokers"` | | -| config.StandardTransformerConfig.Kafka.LingerMS | int | `100` | | -| config.StandardTransformerConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Enabled | bool | `false` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Time | string | `"60s"` | | -| config.StandardTransformerConfig.ModelClientKeepAlive.Timeout | string | `"5s"` | | -| config.StandardTransformerConfig.ModelServerConnCount | int | `10` | | -| config.StandardTransformerConfig.SimulationFeast.FeastBigtableURL | string | `"online-serving-bt.feast.dev"` | | -| config.StandardTransformerConfig.SimulationFeast.FeastRedisURL | string | `"online-serving-redis.feast.dev"` | | -| deployment.annotations | object | `{}` | | -| deployment.extraArgs | list | `[]` | List of string containing additional Merlin API server arguments. For example, multiple "-config" can be specified to use multiple config files | -| deployment.extraContainers | list | `[]` | List of sidecar containers to attach to the Pod. For example, you can attach sidecar container that forward logs or dynamically update some configuration files. | -| deployment.extraEnvs | list | `[]` | List of extra environment variables to add to Merlin API server container | -| deployment.extraInitContainers | list | `[]` | List of extra initContainers to add to the Pod. For example, you need to run some init scripts to fetch credentials from a remote server | -| deployment.extraVolumeMounts | list | `[]` | Extra volume mounts to attach to Merlin API server container. For example to mount the extra volume containing secrets | -| deployment.extraVolumes | list | `[]` | Extra volumes to attach to the Pod. For example, you can mount additional secrets to these volumes | -| deployment.image.pullPolicy | string | `"IfNotPresent"` | | -| deployment.image.registry | string | `"ghcr.io"` | | -| deployment.image.repository | string | `"caraml-dev/merlin"` | | -| deployment.image.tag | string | `""` | | -| deployment.labels | object | `{}` | | -| deployment.podLabels | object | `{}` | | -| deployment.replicaCount | string | `"2"` | | -| deployment.resources.limits.cpu | string | `"1"` | | -| deployment.resources.limits.memory | string | `"1Gi"` | | -| deployment.resources.requests.cpu | string | `"500m"` | | -| deployment.resources.requests.memory | string | `"1Gi"` | | -| deployment.tolerations | list | `[]` | | -| environmentConfigs[0].cluster | string | `"test"` | | -| environmentConfigs[0].default_deployment_config.cpu_request | string | `"500m"` | | -| environmentConfigs[0].default_deployment_config.max_replica | int | `1` | | -| environmentConfigs[0].default_deployment_config.memory_request | string | `"500Mi"` | | -| environmentConfigs[0].default_deployment_config.min_replica | int | `0` | | -| environmentConfigs[0].default_prediction_job_config.driver_cpu_request | string | `"2"` | | -| environmentConfigs[0].default_prediction_job_config.driver_memory_request | string | `"2Gi"` | | -| environmentConfigs[0].default_prediction_job_config.executor_cpu_request | string | `"2"` | | -| environmentConfigs[0].default_prediction_job_config.executor_memory_request | string | `"2Gi"` | | -| environmentConfigs[0].default_prediction_job_config.executor_replica | int | `3` | | -| environmentConfigs[0].default_transformer_config.cpu_request | string | `"500m"` | | -| environmentConfigs[0].default_transformer_config.max_replica | int | `1` | | -| environmentConfigs[0].default_transformer_config.memory_request | string | `"500Mi"` | | -| environmentConfigs[0].default_transformer_config.min_replica | int | `0` | | -| environmentConfigs[0].deployment_timeout | string | `"10m"` | | -| environmentConfigs[0].gcp_project | string | `"gcp-project"` | | -| environmentConfigs[0].is_default | bool | `true` | | -| environmentConfigs[0].is_default_prediction_job | bool | `true` | | -| environmentConfigs[0].is_prediction_job_enabled | bool | `true` | | -| environmentConfigs[0].k8s_config | object | `{}` | | -| environmentConfigs[0].max_cpu | string | `"8"` | | -| environmentConfigs[0].max_memory | string | `"8Gi"` | | -| environmentConfigs[0].name | string | `"id-dev"` | | -| environmentConfigs[0].namespace_timeout | string | `"2m"` | | -| environmentConfigs[0].queue_resource_percentage | string | `"20"` | | -| environmentConfigs[0].region | string | `"id"` | | -| global.protocol | string | `"http"` | | -| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | -| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | -| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | -| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.38.0-rc1"` | | -| imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | -| imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | -| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | -| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | -| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | -| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | -| imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | -| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | -| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | -| imageBuilder.builderConfig.MaximumRetry | int | `3` | | -| imageBuilder.builderConfig.NodeSelectors | object | `{}` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.38.0-rc1"` | | -| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | -| imageBuilder.builderConfig.Retention | string | `"48h"` | | -| imageBuilder.builderConfig.SafeToEvict | bool | `false` | | -| imageBuilder.builderConfig.Tolerations | list | `[]` | | -| imageBuilder.clusterName | string | `"test"` | | -| imageBuilder.contextRef | string | `""` | | -| imageBuilder.k8sConfig | object | `{}` | | -| imageBuilder.serviceAccount.annotations | object | `{}` | | -| imageBuilder.serviceAccount.create | bool | `true` | | -| imageBuilder.serviceAccount.labels | object | `{}` | | -| imageBuilder.serviceAccount.name | string | `"kaniko"` | | -| ingress.enabled | bool | `false` | | -| kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | -| kserve.enabled | bool | `true` | | -| kserve.helmChart.chart | string | `"kserve"` | | -| kserve.helmChart.createNamespace | bool | `true` | | -| kserve.helmChart.namespace | string | `"kserve"` | | -| kserve.helmChart.release | string | `"kserve"` | | -| kserve.helmChart.repository | string | `"https://caraml-dev.github.io/helm-charts"` | | -| kserve.helmChart.version | string | `"0.8.22"` | | -| kserve.hook.weight | string | `"-2"` | | -| merlin-postgresql.enabled | bool | `true` | | -| merlin-postgresql.persistence.size | string | `"10Gi"` | | -| merlin-postgresql.postgresqlDatabase | string | `"merlin"` | | -| merlin-postgresql.postgresqlUsername | string | `"merlin"` | | -| merlin-postgresql.resources.requests.cpu | string | `"100m"` | | -| merlin-postgresql.resources.requests.memory | string | `"512Mi"` | | -| merlinExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | -| merlinExternalPostgresql.connMaxIdleTime | string | `"0s"` | Connection pooling settings | -| merlinExternalPostgresql.connMaxLifetime | string | `"0s"` | | -| merlinExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | -| merlinExternalPostgresql.database | string | `"merlin"` | External postgres database schema | -| merlinExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | -| merlinExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | -| merlinExternalPostgresql.maxIdleConns | int | `0` | | -| merlinExternalPostgresql.maxOpenConns | int | `0` | | -| merlinExternalPostgresql.password | string | `"password"` | | -| merlinExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | -| merlinExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | -| merlinExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | -| merlinExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | -| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | -| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | -| merlinExternalPostgresql.username | string | `"merlin"` | External postgres database user | -| minio.chartValues.defaultBucket.enabled | bool | `true` | | -| minio.chartValues.defaultBucket.name | string | `"mlflow"` | | -| minio.chartValues.ingress.annotations."kubernetes.io/ingress.class" | string | `"istio"` | | -| minio.chartValues.ingress.enabled | bool | `false` | | -| minio.chartValues.ingress.path | string | `"/*"` | | -| minio.chartValues.livenessProbe.initialDelaySeconds | int | `30` | | -| minio.chartValues.persistence.enabled | bool | `false` | | -| minio.chartValues.replicas | int | `1` | | -| minio.chartValues.resources.requests.cpu | string | `"25m"` | | -| minio.chartValues.resources.requests.memory | string | `"64Mi"` | | -| minio.enabled | bool | `true` | | -| minio.helmChart.chart | string | `"minio"` | | -| minio.helmChart.createNamespace | bool | `true` | | -| minio.helmChart.namespace | string | `"minio"` | | -| minio.helmChart.release | string | `"minio"` | | -| minio.helmChart.repository | string | `"https://charts.min.io/"` | "https://helm.min.io/" is no longer valid. TODO: Check if the chart coming from below is correct for this usecase, version also changed to latest in the below charts url. | -| minio.helmChart.version | string | `"5.0.14"` | | -| minio.hook.weight | string | `"-2"` | | -| mlflow-postgresql.enabled | bool | `true` | | -| mlflow-postgresql.persistence.enabled | bool | `true` | | -| mlflow-postgresql.persistence.size | string | `"10Gi"` | | -| mlflow-postgresql.postgresqlDatabase | string | `"mlflow"` | | -| mlflow-postgresql.postgresqlUsername | string | `"mlflow"` | | -| mlflow-postgresql.replicaCount | int | `1` | | -| mlflow-postgresql.resources.requests.cpu | string | `"500m"` | | -| mlflow-postgresql.resources.requests.memory | string | `"512Mi"` | | -| mlflow.artifactRoot | string | `"/data/artifacts"` | | -| mlflow.artifactServiceType | string | `"nop"` | | -| mlflow.deploymentLabels | object | `{}` | | -| mlflow.extraEnvs | object | `{}` | | -| mlflow.host | string | `"0.0.0.0"` | | -| mlflow.image.pullPolicy | string | `"Always"` | | -| mlflow.image.registry | string | `"ghcr.io"` | | -| mlflow.image.repository | string | `"gojek/mlflow"` | | -| mlflow.image.tag | string | `"1.3.0"` | | -| mlflow.ingress.class | string | `"nginx"` | | -| mlflow.ingress.enabled | bool | `false` | | -| mlflow.livenessProbe.initialDelaySeconds | int | `30` | | -| mlflow.livenessProbe.periodSeconds | int | `10` | | -| mlflow.livenessProbe.successThreshold | int | `1` | | -| mlflow.livenessProbe.timeoutSeconds | int | `30` | | -| mlflow.name | string | `"mlflow"` | | -| mlflow.podLabels | object | `{}` | | -| mlflow.readinessProbe.initialDelaySeconds | int | `30` | | -| mlflow.readinessProbe.periodSeconds | int | `10` | | -| mlflow.readinessProbe.successThreshold | int | `1` | | -| mlflow.readinessProbe.timeoutSeconds | int | `30` | | -| mlflow.replicaCount | int | `1` | | -| mlflow.resources.limits.memory | string | `"2048Mi"` | | -| mlflow.resources.requests.cpu | string | `"500m"` | | -| mlflow.resources.requests.memory | string | `"512Mi"` | | -| mlflow.rollingUpdate.maxSurge | int | `1` | | -| mlflow.rollingUpdate.maxUnavailable | int | `0` | | -| mlflow.service.externalPort | int | `80` | | -| mlflow.service.internalPort | int | `5000` | | -| mlflow.service.type | string | `"ClusterIP"` | | -| mlflow.serviceAccount.annotations | object | `{}` | | -| mlflow.serviceAccount.create | bool | `true` | | -| mlflow.serviceAccount.name | string | `"mlflow"` | | -| mlflow.statefulset.updateStrategy | string | `"RollingUpdate"` | | -| mlflow.tolerations | list | `[]` | | -| mlflow.trackingURL | string | `"http://www.example.com"` | | -| mlflowExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | -| mlflowExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | -| mlflowExternalPostgresql.database | string | `"mlflow"` | External postgres database schema | -| mlflowExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | -| mlflowExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | -| mlflowExternalPostgresql.password | string | `"password"` | | -| mlflowExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | -| mlflowExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | -| mlflowExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | -| mlflowExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | -| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | -| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | -| mlflowExternalPostgresql.username | string | `"mlflow"` | External postgres database user | -| mlp.enabled | bool | `true` | | -| mlp.environmentConfigSecret.name | string | `""` | | -| mlp.fullnameOverride | string | `"mlp"` | | -| mlp.keto.enabled | bool | `true` | | -| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | -| rendered.overrides | object | `{}` | | -| rendered.releasedVersion | string | `"v0.35.0"` | | -| service.externalPort | int | `8080` | | -| service.internalPort | int | `8080` | | -| serviceAccount.annotations | object | `{}` | | -| serviceAccount.create | bool | `true` | | -| serviceAccount.name | string | `"merlin"` | | -| swagger.apiHost | string | `"merlin.dev"` | | -| swagger.basePath | string | `"/api/merlin/v1"` | | -| swagger.enabled | bool | `true` | | -| swagger.image.tag | string | `"v3.23.5"` | | -| swagger.service.externalPort | int | `8080` | | -| swagger.service.internalPort | int | `8081` | | -| ui.apiHost | string | `"/api/merlin/v1"` | | -| ui.dockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | -| ui.docsURL[0].href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | -| ui.docsURL[0].label | string | `"Getting Started with Merlin"` | | -| ui.homepage | string | `"/merlin"` | | -| ui.maxAllowedReplica | int | `20` | | -| ui.mlp.apiHost | string | `"/api"` | | -| ui.oauthClientID | string | `""` | | -| ui.upiDocURL | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| clusterConfig.environmentConfigPath | string | `"environments.yaml"` | environmentConfigPath is a path to a file that contains environmentConfigs. See api/environments-dev.yaml for example contents | +| clusterConfig.useInClusterConfig | bool | `false` | Configuration to tell Merlin API how it should authenticate with deployment k8s cluster By default, Merlin API expects to use a remote k8s cluster for deployment and to do so, it requires cluster access configurations to be configured as part of values.yaml | +| config.AuthorizationConfig.AuthorizationEnabled | bool | `true` | | +| config.AuthorizationConfig.Caching.CacheCleanUpIntervalSeconds | int | `900` | Cache clean up interval, after which expired keys are removed | +| config.AuthorizationConfig.Caching.Enabled | bool | `false` | Whether local in-memory caching of authorization responses should be enabled | +| config.AuthorizationConfig.Caching.KeyExpirySeconds | int | `600` | Cache key expiry duration | +| config.AuthorizationConfig.KetoRemoteRead | string | `"http://mlp-keto-read:80"` | | +| config.AuthorizationConfig.KetoRemoteWrite | string | `"http://mlp-keto-write:80"` | | +| config.DbConfig.Database | string | `"merlin"` | | +| config.DbConfig.Host | string | `"localhost"` | | +| config.DbConfig.Password | string | `"merlin"` | | +| config.DbConfig.Port | int | `5432` | | +| config.DbConfig.User | string | `"merlin"` | | +| config.DeploymentLabelPrefix | string | `"gojek.com/"` | | +| config.Environment | string | `"dev"` | | +| config.FeatureToggleConfig.AlertConfig.AlertEnabled | bool | `false` | To enable/disable creation/modification of the alerts and dashboards for the deployed models via merlin. | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertBranch | string | `"master"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.AlertRepository | string | `"lens/artillery/datascience"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.BaseURL | string | `"https://gitlab.com/"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardBranch | string | `"master"` | | +| config.FeatureToggleConfig.AlertConfig.GitlabConfig.DashboardRepository | string | `"data-science/slo-specs"` | | +| config.FeatureToggleConfig.AlertConfig.WardenConfig.APIHost | string | `""` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringBaseURL | string | `""` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringEnabled | bool | `false` | | +| config.FeatureToggleConfig.MonitoringConfig.MonitoringJobBaseURL | string | `""` | | +| config.LoggerDestinationURL | string | `"http://yourDestinationLogger"` | | +| config.MlpAPIConfig.APIHost | string | `"http://mlp:8080"` | | +| config.NewRelic.AppName | string | `"merlin-api-dev"` | | +| config.NewRelic.Enabled | bool | `false` | | +| config.NewRelic.IgnoreStatusCodes[0] | int | `400` | | +| config.NewRelic.IgnoreStatusCodes[1] | int | `401` | | +| config.NewRelic.IgnoreStatusCodes[2] | int | `403` | | +| config.NewRelic.IgnoreStatusCodes[3] | int | `404` | | +| config.NewRelic.IgnoreStatusCodes[4] | int | `405` | | +| config.NewRelic.IgnoreStatusCodes[5] | int | `412` | | +| config.NewRelic.License | string | `"newrelic-license-secret"` | | +| config.NumOfQueueWorkers | int | `2` | | +| config.Port | int | `8080` | | +| config.PyFuncPublisherConfig.Kafka.Acks | int | `0` | | +| config.PyFuncPublisherConfig.Kafka.AdditionalConfig | string | `"{}"` | | +| config.PyFuncPublisherConfig.Kafka.Brokers | string | `"kafka-brokers"` | | +| config.PyFuncPublisherConfig.Kafka.LingerMS | int | `100` | | +| config.PyFuncPublisherConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | +| config.PyFuncPublisherConfig.SamplingRatioRate | float | `0.01` | | +| config.PyfuncGRPCOptions | string | `"{}"` | | +| config.ReactAppConfig.CPUCost | string | `nil` | | +| config.ReactAppConfig.DocURL[0].Href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | +| config.ReactAppConfig.DocURL[0].Label | string | `"Getting Started with Merlin"` | | +| config.ReactAppConfig.DockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | +| config.ReactAppConfig.Environment | string | `"dev"` | | +| config.ReactAppConfig.FeastCoreURL | string | `"http://feast-core.mlp:8080/v1"` | | +| config.ReactAppConfig.HomePage | string | `"/merlin"` | | +| config.ReactAppConfig.MaxAllowedReplica | int | `20` | | +| config.ReactAppConfig.MemoryCost | string | `nil` | | +| config.ReactAppConfig.MerlinURL | string | `"/api/merlin/v1"` | | +| config.ReactAppConfig.MlpURL | string | `"/api"` | | +| config.ReactAppConfig.OauthClientID | string | `nil` | | +| config.ReactAppConfig.UPIDocumentation | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | +| config.Sentry.DSN | string | `""` | | +| config.Sentry.Enabled | bool | `false` | | +| config.StandardTransformerConfig.BigtableCredential | string | `nil` | | +| config.StandardTransformerConfig.DefaultFeastSource | int | `2` | | +| config.StandardTransformerConfig.DefaultServingURL | string | `"online-serving-redis.feast.dev"` | | +| config.StandardTransformerConfig.EnableAuth | bool | `false` | | +| config.StandardTransformerConfig.FeastBigtableConfig.Instance | string | `"instance"` | | +| config.StandardTransformerConfig.FeastBigtableConfig.PoolSize | int | `5` | | +| config.StandardTransformerConfig.FeastBigtableConfig.Project | string | `"gcp-project"` | | +| config.StandardTransformerConfig.FeastBigtableConfig.ServingURL | string | `"online-serving-bigtable.feast.dev"` | | +| config.StandardTransformerConfig.FeastCoreAuthAudience | string | `"core.feast.dev"` | | +| config.StandardTransformerConfig.FeastCoreURL | string | `"core.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Enabled | bool | `false` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Time | string | `"60s"` | | +| config.StandardTransformerConfig.FeastServingKeepAlive.Timeout | string | `"5s"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Host | string | `"online-serving-redis.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Icon | string | `"redis"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].Label | string | `"Online Serving with Redis"` | | +| config.StandardTransformerConfig.FeastServingURLs[0].SourceType | string | `"REDIS"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Host | string | `"online-serving-bigtable.feast.dev"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Icon | string | `"bigtable"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].Label | string | `"Online Serving with BigTable"` | | +| config.StandardTransformerConfig.FeastServingURLs[1].SourceType | string | `"BIGTABLE"` | | +| config.StandardTransformerConfig.ImageName | string | `"ghcr.io/caraml-dev/merlin-transformer:1.0.0"` | | +| config.StandardTransformerConfig.Jaeger.CollectorURL | string | `"http://jaeger-tracing-collector.infrastructure:14268/api/traces"` | | +| config.StandardTransformerConfig.Jaeger.Disabled | bool | `false` | | +| config.StandardTransformerConfig.Jaeger.SamplerParam | int | `1` | | +| config.StandardTransformerConfig.Kafka.Acks | int | `0` | | +| config.StandardTransformerConfig.Kafka.AdditionalConfig | string | `"{}"` | | +| config.StandardTransformerConfig.Kafka.Brokers | string | `"kafka-brokers"` | | +| config.StandardTransformerConfig.Kafka.LingerMS | int | `100` | | +| config.StandardTransformerConfig.Kafka.MaxMessageSizeBytes | string | `"1048588"` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Enabled | bool | `false` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Time | string | `"60s"` | | +| config.StandardTransformerConfig.ModelClientKeepAlive.Timeout | string | `"5s"` | | +| config.StandardTransformerConfig.ModelServerConnCount | int | `10` | | +| config.StandardTransformerConfig.SimulationFeast.FeastBigtableURL | string | `"online-serving-bt.feast.dev"` | | +| config.StandardTransformerConfig.SimulationFeast.FeastRedisURL | string | `"online-serving-redis.feast.dev"` | | +| deployment.annotations | object | `{}` | | +| deployment.extraArgs | list | `[]` | List of string containing additional Merlin API server arguments. For example, multiple "-config" can be specified to use multiple config files | +| deployment.extraContainers | list | `[]` | List of sidecar containers to attach to the Pod. For example, you can attach sidecar container that forward logs or dynamically update some configuration files. | +| deployment.extraEnvs | list | `[]` | List of extra environment variables to add to Merlin API server container | +| deployment.extraInitContainers | list | `[]` | List of extra initContainers to add to the Pod. For example, you need to run some init scripts to fetch credentials from a remote server | +| deployment.extraVolumeMounts | list | `[]` | Extra volume mounts to attach to Merlin API server container. For example to mount the extra volume containing secrets | +| deployment.extraVolumes | list | `[]` | Extra volumes to attach to the Pod. For example, you can mount additional secrets to these volumes | +| deployment.image.pullPolicy | string | `"IfNotPresent"` | | +| deployment.image.registry | string | `"ghcr.io"` | | +| deployment.image.repository | string | `"caraml-dev/merlin"` | | +| deployment.image.tag | string | `""` | | +| deployment.labels | object | `{}` | | +| deployment.podLabels | object | `{}` | | +| deployment.replicaCount | string | `"2"` | | +| deployment.resources.limits.cpu | string | `"1"` | | +| deployment.resources.limits.memory | string | `"1Gi"` | | +| deployment.resources.requests.cpu | string | `"500m"` | | +| deployment.resources.requests.memory | string | `"1Gi"` | | +| deployment.tolerations | list | `[]` | | +| environmentConfigs[0].cluster | string | `"test"` | | +| environmentConfigs[0].default_deployment_config.cpu_request | string | `"500m"` | | +| environmentConfigs[0].default_deployment_config.max_replica | int | `1` | | +| environmentConfigs[0].default_deployment_config.memory_request | string | `"500Mi"` | | +| environmentConfigs[0].default_deployment_config.min_replica | int | `0` | | +| environmentConfigs[0].default_prediction_job_config.driver_cpu_request | string | `"2"` | | +| environmentConfigs[0].default_prediction_job_config.driver_memory_request | string | `"2Gi"` | | +| environmentConfigs[0].default_prediction_job_config.executor_cpu_request | string | `"2"` | | +| environmentConfigs[0].default_prediction_job_config.executor_memory_request | string | `"2Gi"` | | +| environmentConfigs[0].default_prediction_job_config.executor_replica | int | `3` | | +| environmentConfigs[0].default_transformer_config.cpu_request | string | `"500m"` | | +| environmentConfigs[0].default_transformer_config.max_replica | int | `1` | | +| environmentConfigs[0].default_transformer_config.memory_request | string | `"500Mi"` | | +| environmentConfigs[0].default_transformer_config.min_replica | int | `0` | | +| environmentConfigs[0].deployment_timeout | string | `"10m"` | | +| environmentConfigs[0].gcp_project | string | `"gcp-project"` | | +| environmentConfigs[0].is_default | bool | `true` | | +| environmentConfigs[0].is_default_prediction_job | bool | `true` | | +| environmentConfigs[0].is_prediction_job_enabled | bool | `true` | | +| environmentConfigs[0].k8s_config | object | `{}` | | +| environmentConfigs[0].max_cpu | string | `"8"` | | +| environmentConfigs[0].max_memory | string | `"8Gi"` | | +| environmentConfigs[0].name | string | `"id-dev"` | | +| environmentConfigs[0].namespace_timeout | string | `"2m"` | | +| environmentConfigs[0].queue_resource_percentage | string | `"20"` | | +| environmentConfigs[0].region | string | `"id"` | | +| global.protocol | string | `"http"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | +| imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | +| imageBuilder.builderConfig.BaseImage.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.38.0-rc1"` | | +| imageBuilder.builderConfig.BuildNamespace | string | `"mlp"` | | +| imageBuilder.builderConfig.BuildTimeout | string | `"30m"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Limits.Memory | string | `"1Gi"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.CPU | string | `"1"` | | +| imageBuilder.builderConfig.DefaultResources.Requests.Memory | string | `"512Mi"` | | +| imageBuilder.builderConfig.DockerRegistry | string | `"dockerRegistry"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[0] | string | `"--cache=true"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[1] | string | `"--compressed-caching=false"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[2] | string | `"--snapshot-mode=redo"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[3] | string | `"--use-new-run"` | | +| imageBuilder.builderConfig.KanikoAdditionalArgs[4] | string | `"--log-timestamp"` | | +| imageBuilder.builderConfig.KanikoImage | string | `"gcr.io/kaniko-project/executor:v1.18.0"` | | +| imageBuilder.builderConfig.MaximumRetry | int | `3` | | +| imageBuilder.builderConfig.NodeSelectors | object | `{}` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextSubPath | string | `"python"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.DockerfilePath | string | `"batch-predictor/docker/app.Dockerfile"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.ImageName | string | `"ghcr.io/caraml-dev/merlin/merlin-pyspark-base:0.38.0-rc1"` | | +| imageBuilder.builderConfig.PredictionJobBaseImages.MainAppPath | string | `"/home/spark/merlin-spark-app/main.py"` | | +| imageBuilder.builderConfig.Retention | string | `"48h"` | | +| imageBuilder.builderConfig.SafeToEvict | bool | `false` | | +| imageBuilder.builderConfig.Tolerations | list | `[]` | | +| imageBuilder.clusterName | string | `"test"` | | +| imageBuilder.contextRef | string | `""` | | +| imageBuilder.k8sConfig | object | `{}` | | +| imageBuilder.serviceAccount.annotations | object | `{}` | | +| imageBuilder.serviceAccount.create | bool | `true` | | +| imageBuilder.serviceAccount.labels | object | `{}` | | +| imageBuilder.serviceAccount.name | string | `"kaniko"` | | +| ingress.enabled | bool | `false` | | +| kserve.chartValues.knativeServingIstio.chartValues.istioIngressGateway.helmChart.namespace | string | `"istio-system"` | | +| kserve.enabled | bool | `true` | | +| kserve.helmChart.chart | string | `"kserve"` | | +| kserve.helmChart.createNamespace | bool | `true` | | +| kserve.helmChart.namespace | string | `"kserve"` | | +| kserve.helmChart.release | string | `"kserve"` | | +| kserve.helmChart.repository | string | `"https://caraml-dev.github.io/helm-charts"` | | +| kserve.helmChart.version | string | `"0.8.22"` | | +| kserve.hook.weight | string | `"-2"` | | +| merlin-postgresql.enabled | bool | `true` | | +| merlin-postgresql.persistence.size | string | `"10Gi"` | | +| merlin-postgresql.postgresqlDatabase | string | `"merlin"` | | +| merlin-postgresql.postgresqlUsername | string | `"merlin"` | | +| merlin-postgresql.resources.requests.cpu | string | `"100m"` | | +| merlin-postgresql.resources.requests.memory | string | `"512Mi"` | | +| merlinExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | +| merlinExternalPostgresql.connMaxIdleTime | string | `"0s"` | Connection pooling settings | +| merlinExternalPostgresql.connMaxLifetime | string | `"0s"` | | +| merlinExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | +| merlinExternalPostgresql.database | string | `"merlin"` | External postgres database schema | +| merlinExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | +| merlinExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | +| merlinExternalPostgresql.maxIdleConns | int | `0` | | +| merlinExternalPostgresql.maxOpenConns | int | `0` | | +| merlinExternalPostgresql.password | string | `"password"` | | +| merlinExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | +| merlinExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | +| merlinExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | +| merlinExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | +| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:merlin-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | +| merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.merlinExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | +| merlinExternalPostgresql.username | string | `"merlin"` | External postgres database user | +| minio.chartValues.defaultBucket.enabled | bool | `true` | | +| minio.chartValues.defaultBucket.name | string | `"mlflow"` | | +| minio.chartValues.ingress.annotations."kubernetes.io/ingress.class" | string | `"istio"` | | +| minio.chartValues.ingress.enabled | bool | `false` | | +| minio.chartValues.ingress.path | string | `"/*"` | | +| minio.chartValues.livenessProbe.initialDelaySeconds | int | `30` | | +| minio.chartValues.persistence.enabled | bool | `false` | | +| minio.chartValues.replicas | int | `1` | | +| minio.chartValues.resources.requests.cpu | string | `"25m"` | | +| minio.chartValues.resources.requests.memory | string | `"64Mi"` | | +| minio.enabled | bool | `true` | | +| minio.helmChart.chart | string | `"minio"` | | +| minio.helmChart.createNamespace | bool | `true` | | +| minio.helmChart.namespace | string | `"minio"` | | +| minio.helmChart.release | string | `"minio"` | | +| minio.helmChart.repository | string | `"https://charts.min.io/"` | "https://helm.min.io/" is no longer valid. TODO: Check if the chart coming from below is correct for this usecase, version also changed to latest in the below charts url. | +| minio.helmChart.version | string | `"5.0.14"` | | +| minio.hook.weight | string | `"-2"` | | +| mlflow-postgresql.enabled | bool | `true` | | +| mlflow-postgresql.persistence.enabled | bool | `true` | | +| mlflow-postgresql.persistence.size | string | `"10Gi"` | | +| mlflow-postgresql.postgresqlDatabase | string | `"mlflow"` | | +| mlflow-postgresql.postgresqlUsername | string | `"mlflow"` | | +| mlflow-postgresql.replicaCount | int | `1` | | +| mlflow-postgresql.resources.requests.cpu | string | `"500m"` | | +| mlflow-postgresql.resources.requests.memory | string | `"512Mi"` | | +| mlflow.artifactRoot | string | `"/data/artifacts"` | | +| mlflow.artifactServiceType | string | `"nop"` | | +| mlflow.deploymentLabels | object | `{}` | | +| mlflow.extraEnvs | object | `{}` | | +| mlflow.host | string | `"0.0.0.0"` | | +| mlflow.image.pullPolicy | string | `"Always"` | | +| mlflow.image.registry | string | `"ghcr.io"` | | +| mlflow.image.repository | string | `"gojek/mlflow"` | | +| mlflow.image.tag | string | `"1.3.0"` | | +| mlflow.ingress.class | string | `"nginx"` | | +| mlflow.ingress.enabled | bool | `false` | | +| mlflow.livenessProbe.initialDelaySeconds | int | `30` | | +| mlflow.livenessProbe.periodSeconds | int | `10` | | +| mlflow.livenessProbe.successThreshold | int | `1` | | +| mlflow.livenessProbe.timeoutSeconds | int | `30` | | +| mlflow.name | string | `"mlflow"` | | +| mlflow.podLabels | object | `{}` | | +| mlflow.readinessProbe.initialDelaySeconds | int | `30` | | +| mlflow.readinessProbe.periodSeconds | int | `10` | | +| mlflow.readinessProbe.successThreshold | int | `1` | | +| mlflow.readinessProbe.timeoutSeconds | int | `30` | | +| mlflow.replicaCount | int | `1` | | +| mlflow.resources.limits.memory | string | `"2048Mi"` | | +| mlflow.resources.requests.cpu | string | `"500m"` | | +| mlflow.resources.requests.memory | string | `"512Mi"` | | +| mlflow.rollingUpdate.maxSurge | int | `1` | | +| mlflow.rollingUpdate.maxUnavailable | int | `0` | | +| mlflow.service.externalPort | int | `80` | | +| mlflow.service.internalPort | int | `5000` | | +| mlflow.service.type | string | `"ClusterIP"` | | +| mlflow.serviceAccount.annotations | object | `{}` | | +| mlflow.serviceAccount.create | bool | `true` | | +| mlflow.serviceAccount.name | string | `"mlflow"` | | +| mlflow.statefulset.updateStrategy | string | `"RollingUpdate"` | | +| mlflow.tolerations | list | `[]` | | +| mlflow.trackingURL | string | `"http://www.example.com"` | | +| mlflowExternalPostgresql.address | string | `"127.0.0.1"` | Host address for the External postgres | +| mlflowExternalPostgresql.createSecret | bool | `false` | Enable this if you need the chart to create a secret when you provide the password above. | +| mlflowExternalPostgresql.database | string | `"mlflow"` | External postgres database schema | +| mlflowExternalPostgresql.enableProxySidecar | bool | `false` | Enable if you want to configure a sidecar for creating a proxy for your db connections. | +| mlflowExternalPostgresql.enabled | bool | `false` | If you would like to use an external postgres database, enable it here using this | +| mlflowExternalPostgresql.password | string | `"password"` | | +| mlflowExternalPostgresql.proxyType | string | `"cloudSqlProxy"` | Type of sidecar to be created, mentioned type needs to have the spec below. | +| mlflowExternalPostgresql.secretKey | string | `""` | If a secret is created by external systems (eg. Vault)., mention the key under which password is stored in secret (eg. postgresql-password) | +| mlflowExternalPostgresql.secretName | string | `""` | If a secret is created by external systems (eg. Vault)., mention the secret name here | +| mlflowExternalPostgresql.sidecarSpec | object | `{"cloudSqlProxy":{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}}` | container spec for the sidecar | +| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy | object | `{"dbConnectionName":"asia-east-1:mlflow-db","dbPort":5432,"image":{"tag":"1.33.2"},"resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"spec":[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]}` | container spec for the Google CloudSQL auth proxy sidecar, ref: https://cloud.google.com/sql/docs/postgres/connect-kubernetes-engine | +| mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.spec | list | `[{"command":["/cloud_sql_proxy","-ip_address_types=PRIVATE","-log_debug_stdout","-instances={{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbConnectionName }}=tcp:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.dbPort }}"],"image":"gcr.io/cloudsql-docker/gce-proxy:{{ .Values.mlflowExternalPostgresql.sidecarSpec.cloudSqlProxy.image.tag }}","name":"cloud-sql-proxy","resources":{"limits":{"cpu":"1000m","memory":"1G"},"requests":{"cpu":"200m","memory":"512Mi"}},"securityContext":{"runAsNonRoot":true}}]` | Container spec for the sidecar | +| mlflowExternalPostgresql.username | string | `"mlflow"` | External postgres database user | +| mlp.enabled | bool | `true` | | +| mlp.environmentConfigSecret.name | string | `""` | | +| mlp.fullnameOverride | string | `"mlp"` | | +| mlp.keto.enabled | bool | `true` | | +| mlp.keto.fullnameOverride | string | `"mlp-keto"` | | +| rendered.overrides | object | `{}` | | +| rendered.releasedVersion | string | `"v0.38.0-rc1"` | | +| service.externalPort | int | `8080` | | +| service.internalPort | int | `8080` | | +| serviceAccount.annotations | object | `{}` | | +| serviceAccount.create | bool | `true` | | +| serviceAccount.name | string | `"merlin"` | | +| swagger.apiHost | string | `"merlin.dev"` | | +| swagger.basePath | string | `"/api/merlin/v1"` | | +| swagger.enabled | bool | `true` | | +| swagger.image.tag | string | `"v3.23.5"` | | +| swagger.service.externalPort | int | `8080` | | +| swagger.service.internalPort | int | `8081` | | +| ui.apiHost | string | `"/api/merlin/v1"` | | +| ui.dockerRegistries | string | `"ghcr.io/gojek,ghcr.io/your-company"` | Comma-separated value of Docker registries that can be chosen in deployment page | +| ui.docsURL[0].href | string | `"https://github.com/gojek/merlin/blob/main/docs/getting-started/README.md"` | | +| ui.docsURL[0].label | string | `"Getting Started with Merlin"` | | +| ui.homepage | string | `"/merlin"` | | +| ui.maxAllowedReplica | int | `20` | | +| ui.mlp.apiHost | string | `"/api"` | | +| ui.oauthClientID | string | `""` | | +| ui.upiDocURL | string | `"https://github.com/caraml-dev/universal-prediction-interface/blob/main/docs/api_markdown/caraml/upi/v1/index.md"` | | From 1be209387be6f6dd5b0a2532562a1bc670d0d70d Mon Sep 17 00:00:00 2001 From: Arief Rahmansyah Date: Mon, 11 Dec 2023 17:41:24 +0700 Subject: [PATCH 13/13] Add ArtifactServiceType --- charts/merlin/README.md | 1 + charts/merlin/values.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/charts/merlin/README.md b/charts/merlin/README.md index 9b75ce24..a11e4aac 100644 --- a/charts/merlin/README.md +++ b/charts/merlin/README.md @@ -208,6 +208,7 @@ The following table lists the configurable parameters of the Merlin chart and th | environmentConfigs[0].queue_resource_percentage | string | `"20"` | | | environmentConfigs[0].region | string | `"id"` | | | global.protocol | string | `"http"` | | +| imageBuilder.builderConfig.ArtifactServiceType | string | `"nop"` | | | imageBuilder.builderConfig.BaseImage.BuildContextSubPath | string | `"python"` | | | imageBuilder.builderConfig.BaseImage.BuildContextURI | string | `"git://github.com/caraml-dev/merlin.git#refs/tags/v0.38.0-rc1"` | | | imageBuilder.builderConfig.BaseImage.DockerfilePath | string | `"pyfunc-server/docker/Dockerfile"` | | diff --git a/charts/merlin/values.yaml b/charts/merlin/values.yaml index e25f1d53..9ba4cf5d 100644 --- a/charts/merlin/values.yaml +++ b/charts/merlin/values.yaml @@ -266,6 +266,7 @@ imageBuilder: # interactiveMode: IfAvailable # provideClusterInfo: true builderConfig: + ArtifactServiceType: nop BaseImage: ImageName: ghcr.io/caraml-dev/merlin/merlin-pyfunc-base:0.38.0-rc1 DockerfilePath: "pyfunc-server/docker/Dockerfile"