Skip to main content

Installation via Helm

One way to install Prophecy is to use Helm. Installation requirements and Helm chart values are outlined in this page.

For an example step-by-step installation, visit Installation on AWS.

Kubernetes cluster requirements

  • Kubernetes Version: 1.21 or later.
  • Namespace: Dedicated namespace for Prophecy installation.
  • Permissions: Ability to install custom resources (CRDs) or deploy an additional provided Helm chart.
  • Cluster Configuration: Supports multi-AZ or single-AZ mode.
  • Block Storage: Required; in multi-AZ mode, set volume binding mode to waitforfirstconsumer.
  • Persistent Storage: Dynamic provisioning (e.g., gp2) required.

Helm requirements

  • Helm: Must be installed to deploy Prophecy.
  • Custom Domain Hosting: Requires SSL certificates and DNS configuration; include during Helm installation.
  • Private Container Registry: Pull images from gcr.io/prophecy-share and push to your private registry. Set global.repository during Helm installation.

Minimum resource requirements

ComponentsDescription# Cores# RAM# Block Storage
Prophecy core servicesMain services (front-end, code editor, metadata, lineage, etc.)40 Cores78GB160GB
PlatformBackups, monitoring, logging services (optional)4 Cores8GB200GB

Install Prophecy

The helm install command installs Prophecy via the provided Helm chart.

  1. To retrieve the Prophecy Helm chart, run the command:

    helm repo add prophecy https://prophecy-chart.s3.us-west-2.amazonaws.com
  2. If you want to install Prophecy using all of the provided values, the simplest command to run is:

    helm -n <namespace> install prophecy prophecy/prophecy-installer --version <prophecy-chart-version> --set global.customer.name=<customer-name> --set global.prophecy.rootUrl=<IDE-URL>

Read through the rest of this page to understand how to customize the installation command.

Helm chart values

Prophecy is installed via Helm chart called the Prophecy-installer. The following are the commonly used values which can be configured for this helm chart. The Helm chart values can be broadly classified into 5 different sections:

  • Athena: Configurations related to the management plane.
  • Global: Configurations for all common values between components like Athena, Postgres, and Platform.
  • Postgres: Configurations related to Postgres or at the database level.
  • Platform: Configurations regarding various platform components like elastic search, Prometheus, Grafana, etc.
  • Version: The Prophecy version you want to deploy.
Complete table of Helm values

Parameters marked with an asterisk(*) are mandatory.

ParameterTypeDescriptionDefault value
ATHENA
athena.config-
athena.config.fromFileboolSet this to false if you want to pass different environment and Prophecy application level configurations values inline here. If you keep it to true, the values are taken from the ../configs directory of the helm charttrue
athena.config.athenaEnvsmap[string]stringProvide the values you wish to override in athena ENV variables. Passed in the format of KEY: "value". Value is type sensitive. This field is only respected when fromFile is set to false../configs/athena-env-cluster.yaml
athena.config.envsmap[string]stringProvide the values you wish to override in Prophecy application ENV variables. Passed in the format of KEY: "value". Value is type sensitive. This field is only respected when fromFile is set to false../configs/env-cluster.yaml
athena.config.prophecyClusterprophecyCluster (custom)Provide the values you wish to override in Prophecy cluster spec. This field is only respected when fromFile is set to false../configs/prophecy-cluster.yaml
athena.enableSandboxingboolSet this to true to enable sandboxing feature.false
athena.enableSignupboolSet this to true if you want to allow signups using a verified email-id.false
athena.enableSlimImagesboolSet this to true to deploy Prophecy slim images (images without Spark).false
athena.isDarkClusterboolSet this to true if the cluster doesn't have internet access.false
athena.resources-
athena.resources.requests-
athena.resources.requests.cpustringGuaranteed value of CPU required to deploy Athena200m
athena.resources.requests.memorystringGuaranteed value of memory required to deploy Athena512Mi
athena.resources.limits-
athena.resources.limits.cpustringMaximum usage of CPU for Athena200m
athena.resources.limits.memorystringMaximum usage of memory for Athena512Mi
athena.trustCAboolset this variable if you want metagraph and execution to trust local self signed certificates.true
GLOBAL
global.blockStorage-Kubernetes PVC block storage options for for Athena, Postgres and Platform components. Prophecy services takes storage values from Prophecy cluster in configs dir.
global.blockStorage.storageClassNamestringKubernetes storage class (SC) name to be used by PVCsdefault
global.blockStorage.pvcAnnotationsmap[string]stringAny additional kubernetes annotations to be set on the PVCs""
global.customer-
global.customer.name*stringName of the customer to uniquely identify""
global.customer.cluster*stringName of the cluster to uniquely identify the cluster for a customerprophecy
global.disableIngressCreationboolSet this to true, if the customer wishes to manually manage their ingress entriesfalse
global.imagePullPolicystringImage pull policy for all the containers deployedAlways
global.ingressController-
global.ingressController.typestringType of ingress controller being used. Currently we support nginx and istionginx
global.ingressController.classstringName of the controller class which is to be used for ingress resourcesprophecy-nginx
global.istio-
global.istio.enabledboolSet this to true to allow usage of istio as an ingress controller/gateway. We don't support sidecars yet. Istio isn't installed or managed by Prophecy.false
global.istio.gateway-
global.istio.gateway.namestringName of the Istio gatewayistio-gateways/istio-gateway
global.istio.gateway.createboolSet this to true, when you wish to create the Istio gatewayfalse
global.prophecy-
global.prophecy.domainValuestringdomain value used for cookies. Used to configure multiple URLs.""
global.prophecy.envSecret-Is configured when Prophecy credentials are fetched as a kubernetes secret
global.prophecy.envSecret.createboolSet to true if the secret is to be created. With false the secret is expected to be created by the customer.false
global.prophecy.envSecret.datamap[string]stringProvide the values you wish to override in Prophecy secret ENV variables. Passed in the format of METADATA_DB_PASSWORD: dummyPassword123.
global.prophecy.envSecret.namestringName of the Kubernetes secret to be used.env-secrets
global.prophecy.imagePullSecretstringName of the Kubernetes secret which contains the image pull credentials to the container registry.""
global.prophecy.rootUrl*stringRoot URL where the Prophecy deployment will be hosted. You may provider a list of comma separated urls if you wish to work with multiple urls. Note that the first url in the provided list will be considered as the primary url.""
global.prophecy.wildcardCert-
global.prophecy.wildcardCert.namestringThe number of secrets passed should either be one or equal to the number of rootUrls provided which should be generated for each of these URLs in respective order.""
global.prophecy.wildcardCert.useExternalboolSetting this to true will require the customer to provide a secret name here.false
global.repositorystringContainer registry prefix to be used.gcr.io/prophecy-share
global.tls-
global.tls.enabledboolSpecifies if TLS is to be enabledtrue
global.tls.certOnLBboolSpecifies whether TLS termination is to be done at the loadbalancerfalse
POSTGRES
postgres.isExternalPostgresboolSetting this to true, will allow Prophecy services to use a externally managed Postgres instance and will not use a Prophecy managed instance.false
postgres.hoststringSpecifies the host name for the postgres service. If isExternalPostgres, pass the DNS host name (Not IP) for the external postgres here.postgres
postgres.portintSpecifies the port used to communicate with postgres.5432
postgres.resources-
postgres.resources.requests-
postgres.resources.requests.cpustringGuaranteed value of CPU required to deploy Postgres1
postgres.resources.requests.memorystringGuaranteed value of memory required to deploy Postgres2000Mi
postgres.resources.limits-
postgres.resources.limits.cpustringMaximum usage of CPU for Postgres2
postgres.resources.limits.memorystringMaximum usage of memory for Postgres4000Mi
postgres.secretNamestringSpecifies the postgres AWS secret manager name from where postgres credentials are to be fetched from.
postgres.secretLocationstringSpecifies the postgres AWS secret manager region from where postgres credentials are to be fetched from.
postgres.volume-
postgres.volume.requestsstringSpecifies the volume size of the PVC used by postgres25Gi
PLATFORM
platform.enabledboolSpecifies if one/more of the platform components are to be enabledtrue
platform.elasticsearch.enabledboolSpecifies if elasticsearch is to be enabled and deployed for supporting Prophecy search featuretrue
platform.ingressNginx.enabledboolSpecifies if nginx controller is to be deployed for ingress routingtrue
platform.namespacestringSpecifies the namespace used to deploy the platform componentsprophecy
platform.tracing.enabledboolSpecifies if Jaeger based tracing is to be enabled and deployedtrue
VERSION
versionstringSpecifies the Prophecy version to be deployed""

Common configurations

Here are some configurations that are commonly changed from the default.

Nginx ingress controller

By default, Prophecy will install its own managed Nginx ingress controller during the Helm installation. If you want to use your own Nginx ingress controller already installed on your Kubernetes cluster, you can do so if it supports external service exposure via a LoadBalancer. You'll have to set global.disableIngressCreation to true, and set global.ingressController.class to the appropriate name.

Private container registry

During the Helm installation, docker images are pulled from Prophecy's public Google Container Registry gcr.io/prophecy-share. If you want to use your own private container registry, you can specify it by setting the global.repository value during installation. Make sure to push all the images to your private registry first.

Custom domain names

If you are using Prophecy's domain, you don't have to worry about hostname resolution. However, if you want to use your own domain, you need to create SSL certificates, set up the correct DNS configurations, and include that information during the Helm installation.

Additional example Helm install commands

  • Using your own SSL certificates without internet connectivity:

    helm -n <namespace> install prophecy prophecy/prophecy-installer --version <prophecy-chart-version> --set global.customer.name=<customer name> --set global.prophecy.rootUrl=<Base URL> --set global.prophecy.wildcardCert.useExternal=true --set global.prophecy.wildcardCert.name=<wildcard cert secret name> --set athena.controlcenter.disabled=true --set global.repository=<Image repository> --set global.prophecy.imagePullSecret=<Image pull secret name> --set athena.isDarkCluster=true
  • Using an external SQL database:

    helm -n <namespace> upgrade -i prophecy-installer prophecy/prophecy-installer --version 3.3.1-1 --set version=3.3.1.1 --set global.customer.cluster={cluster-name} --set global.prophecy.rootUrl={cluster-name}-{customer-name}.dev.cloud.prophecy.io --set global.customer.name={customer-name} --set postgres.isExternalPostgres=true --set postgres.host={googlesql-dns-name} --set postgres.user={google-sql-user-name} --set postgres.password={google-sql-user-password} --debug