You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by xi...@apache.org on 2020/05/10 08:58:17 UTC

[incubator-pinot] branch presto-helm created (now e903a6c)

This is an automated email from the ASF dual-hosted git repository.

xiangfu pushed a change to branch presto-helm
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git.


      at e903a6c  Adding Pinot Presto Helm

This branch includes the following new commits:

     new e903a6c  Adding Pinot Presto Helm

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org


[incubator-pinot] 01/01: Adding Pinot Presto Helm

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

xiangfu pushed a commit to branch presto-helm
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git

commit e903a6cc8b94a65504a1c68564fb032bbeaf9e18
Author: Xiang Fu <fx...@gmail.com>
AuthorDate: Sun May 10 01:57:55 2020 -0700

    Adding Pinot Presto Helm
---
 kubernetes/helm/index.yaml                         |  42 +--
 kubernetes/helm/pinot-0.2.0.tgz                    | Bin 102559 -> 23433 bytes
 kubernetes/helm/{ => pinot}/Chart.yaml             |   0
 kubernetes/helm/pinot/README.md                    | 402 +++++++++++++++++++++
 .../helm/{ => pinot}/charts/zookeeper-2.1.3.tgz    | Bin
 .../helm/{ => pinot}/pinot-github-events-setup.yml |   0
 .../helm/{ => pinot}/pinot-realtime-quickstart.yml |   0
 kubernetes/helm/{ => pinot}/query-pinot-data.sh    |   0
 kubernetes/helm/{ => pinot}/requirements.lock      |   0
 kubernetes/helm/{ => pinot}/requirements.yaml      |   0
 kubernetes/helm/{ => pinot}/templates/_helpers.tpl |   0
 .../{ => pinot}/templates/broker/configmap.yaml    |   0
 .../templates/broker/service-external.yaml         |   0
 .../templates/broker/service-headless.yaml         |   0
 .../helm/{ => pinot}/templates/broker/service.yaml |   0
 .../{ => pinot}/templates/broker/statefulset.yml   |   0
 .../templates/controller/configmap.yaml            |   0
 .../templates/controller/service-external.yaml     |   0
 .../templates/controller/service-headless.yaml     |   0
 .../{ => pinot}/templates/controller/service.yaml  |   0
 .../templates/controller/statefulset.yaml          |   0
 .../{ => pinot}/templates/server/configmap.yaml    |   0
 .../templates/server/service-headless.yaml         |   0
 .../helm/{ => pinot}/templates/server/service.yaml |   0
 .../{ => pinot}/templates/server/statefulset.yml   |   0
 kubernetes/helm/{ => pinot}/values.yaml            |   0
 kubernetes/helm/presto-0.2.0.tgz                   | Bin 0 -> 8288 bytes
 kubernetes/helm/presto-cli.sh                      |  28 --
 kubernetes/helm/{ => presto}/Chart.yaml            |  11 +-
 kubernetes/helm/presto/README.md                   | 232 ++++++++++++
 kubernetes/helm/{ => presto}/launch-presto-ui.sh   |   0
 kubernetes/helm/{ => presto}/pinot-presto-cli.sh   |   0
 kubernetes/helm/presto/presto-cli.sh               |   8 +
 .../helm/{ => presto}/presto-coordinator.yaml      |   0
 kubernetes/helm/{ => presto}/presto-worker.yaml    |   0
 kubernetes/helm/presto/templates/_helpers.tpl      |  91 +++++
 .../presto/templates/coordinator/configmap.yaml    |  60 +++
 .../templates/coordinator}/service-external.yaml   |  20 +-
 .../templates/coordinator}/service-headless.yaml   |  14 +-
 .../templates/coordinator}/service.yaml            |  14 +-
 .../presto/templates/coordinator/statefulset.yml   | 121 +++++++
 .../templates/worker}/configmap.yaml               |  30 +-
 .../templates/worker}/service-headless.yaml        |  14 +-
 .../templates/worker}/service.yaml                 |  14 +-
 .../helm/presto/templates/worker/statefulset.yml   | 121 +++++++
 kubernetes/helm/presto/values.yaml                 | 160 ++++++++
 46 files changed, 1280 insertions(+), 102 deletions(-)

diff --git a/kubernetes/helm/index.yaml b/kubernetes/helm/index.yaml
index 5ef2a22..7bf1571 100644
--- a/kubernetes/helm/index.yaml
+++ b/kubernetes/helm/index.yaml
@@ -3,7 +3,7 @@ entries:
   pinot:
   - apiVersion: v1
     appVersion: 0.2.0
-    created: "2020-05-04T00:59:04.094942-07:00"
+    created: "2020-05-10T01:08:51.322737-07:00"
     dependencies:
     - condition: pinot.zookeeper.enabled,zookeeper.enabled
       name: zookeeper
@@ -13,7 +13,7 @@ entries:
       to deliver scalable real time analytics with low latency. It can ingest data
       from offline data sources (such as Hadoop and flat files) as well as online
       sources (such as Kafka). Pinot is designed to scale horizontally.
-    digest: e2b52aff7c2bae33ea0bbc9335b94d218a94afc56a11388f1848d4726c0e8221
+    digest: e8528298a72aab8e17e2283c2c65f2aaf72dbe1af4cdf0ab03eb1b2a87ad2506
     home: https://pinot.apache.org/
     keywords:
     - olap
@@ -29,26 +29,26 @@ entries:
     urls:
     - pinot-0.2.0.tgz
     version: 0.2.0
-  zookeeper:
+  presto:
   - apiVersion: v1
-    appVersion: 3.5.5
-    created: "2020-05-04T00:59:04.096461-07:00"
-    description: Centralized service for maintaining configuration information, naming,
-      providing distributed synchronization, and providing group services.
-    digest: ce79cf63a1284c16e6b615a3dea62e619ce99dea85419be5b46a8ee6ceec3b4e
-    home: https://zookeeper.apache.org/
-    icon: https://zookeeper.apache.org/images/zookeeper_small.gif
-    kubeVersion: ^1.10.0-0
+    appVersion: 0.2.0
+    created: "2020-05-10T01:08:51.324028-07:00"
+    description: Presto is an open source distributed SQL query engine for running
+      interactive analytic queries against data sources of all sizes ranging from
+      gigabytes to petabytes.
+    digest: 335a7f12f860e109dd89b1026b33f1a6bb67aa666611089619936f1022d7ac3d
+    home: https://github.com/prestodb/presto
+    keywords:
+    - analytics
+    - database
+    - presto
     maintainers:
-    - email: lachlan.evenson@microsoft.com
-      name: lachie83
-    - email: owensk@google.com
-      name: kow3ns
-    name: zookeeper
+    - email: dev@pinot.apache.org
+      name: pinot-dev
+    name: presto
     sources:
-    - https://github.com/apache/zookeeper
-    - https://github.com/kubernetes/contrib/tree/master/statefulsets/zookeeper
+    - https://github.com/apache/incubator-pinot/tree/master/kubernetes/helm
     urls:
-    - charts/zookeeper-2.1.3.tgz
-    version: 2.1.3
-generated: "2020-05-04T00:59:04.087389-07:00"
+    - presto-0.2.0.tgz
+    version: 0.2.0
+generated: "2020-05-10T01:08:51.317911-07:00"
diff --git a/kubernetes/helm/pinot-0.2.0.tgz b/kubernetes/helm/pinot-0.2.0.tgz
index 2e26faf..937867f 100644
Binary files a/kubernetes/helm/pinot-0.2.0.tgz and b/kubernetes/helm/pinot-0.2.0.tgz differ
diff --git a/kubernetes/helm/Chart.yaml b/kubernetes/helm/pinot/Chart.yaml
similarity index 100%
copy from kubernetes/helm/Chart.yaml
copy to kubernetes/helm/pinot/Chart.yaml
diff --git a/kubernetes/helm/pinot/README.md b/kubernetes/helm/pinot/README.md
new file mode 100644
index 0000000..12e7ab7
--- /dev/null
+++ b/kubernetes/helm/pinot/README.md
@@ -0,0 +1,402 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+
+# Pinot Quickstart on Kubernetes with Helm
+
+## Prerequisite
+
+- kubectl (<https://kubernetes.io/docs/tasks/tools/install-kubectl>)
+- Helm (<https://helm.sh/docs/using_helm/#installing-helm>)
+- Configure kubectl to connect to the Kubernetes cluster.
+  - Skip to [Section: How to setup a Pinot cluster for demo](#How to setup a Pinot cluster for demo) if a k8s cluster is already setup.
+
+
+## (Optional) Setup a Kubernetes cluster on Amazon Elastic Kubernetes Service (Amazon EKS)
+
+### (Optional) Create a new k8s cluster on AWS EKS
+
+- Install AWS CLI (<https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html#install-tool-bundled>)
+- Install AWS-IAM-AUTHENTICATOR (<https://docs.aws.amazon.com/eks/latest/userguide/install-aws-iam-authenticator.html>)
+- Install eksctl (<https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html#installing-eksctl>)
+
+- Login to your AWS account.
+
+```bash
+aws configure
+```
+
+Note that environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` will override the aws configuration in file `~/.aws/credentials`.
+
+- Create an EKS cluster
+
+Please modify the parameters in the example command below:
+
+```bash
+eksctl create cluster \
+--name pinot-quickstart \
+--version 1.14 \
+--region us-west-2 \
+--nodegroup-name standard-workers \
+--node-type t3.small \
+--nodes 3 \
+--nodes-min 3 \
+--nodes-max 4 \
+--node-ami auto
+```
+You can monitor cluster status by command:
+
+```bash
+EKS_CLUSTER_NAME=pinot-quickstart
+aws eks describe-cluster --name ${EKS_CLUSTER_NAME}
+```
+
+Once the cluster is in `ACTIVE` status, it's ready to be used.
+
+### (Optional) How to connect to an existing cluster
+
+Simply run below command to get the credential for the cluster you just created or your existing cluster.
+
+```bash
+EKS_CLUSTER_NAME=pinot-quickstart
+aws eks update-kubeconfig --name ${EKS_CLUSTER_NAME}
+```
+
+To verify the connection, you can run
+```bash
+kubectl get nodes
+```
+
+## (Optional) Setup a Kubernetes cluster on Google Kubernetes Engine(GKE)
+
+### (Optional) Create a new k8s cluster on GKE
+
+- Google Cloud SDK (<https://cloud.google.com/sdk/install>)
+- Enable Google Cloud Account and create a project, e.g. `pinot-demo`.
+  - `pinot-demo` will be used as example value for `${GCLOUD_PROJECT}` variable in script example.
+  - `pinot-demo@example.com` will be used as example value for `${GCLOUD_EMAIL}`.
+
+Below script will:
+
+- Create a gCloud cluster `pinot-quickstart`
+- Request 2 servers of type `n1-standard-8` for demo.
+
+Please fill both environment variables: `${GCLOUD_PROJECT}` and `${GCLOUD_EMAIL}` with your gcloud project and gcloud account email in below script.
+
+```bash
+GCLOUD_PROJECT=[your gcloud project name]
+GCLOUD_EMAIL=[Your gcloud account email]
+./setup_gke.sh
+```
+
+E.g.
+
+```bash
+GCLOUD_PROJECT=pinot-demo
+GCLOUD_EMAIL=pinot-demo@example.com
+./setup_gke.sh
+```
+
+### (Optional) How to connect to an existing cluster
+
+Simply run below command to get the credential for the cluster you just created or your existing cluster.
+Please modify the Env variables `${GCLOUD_PROJECT}`, `${GCLOUD_ZONE}`, `${GCLOUD_CLUSTER}` accordingly in below script.
+
+```bash
+GCLOUD_PROJECT=pinot-demo
+GCLOUD_ZONE=us-west1-b
+GCLOUD_CLUSTER=pinot-quickstart
+gcloud container clusters get-credentials ${GCLOUD_CLUSTER} --zone ${GCLOUD_ZONE} --project ${GCLOUD_PROJECT}
+```
+
+
+## (Optional) Setup a Kubernetes cluster on Microsoft Azure
+
+### (Optional) Create a new k8s cluster on Azure
+
+- Install Azure CLI (<https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest>)
+- Login to your Azure account.
+
+```bash
+az login
+```
+
+- Create Resource Group
+
+```bash
+AKS_RESOURCE_GROUP=pinot-demo
+AKS_RESOURCE_GROUP_LOCATION=eastus
+az group create --name ${AKS_RESOURCE_GROUP} --location ${AKS_RESOURCE_GROUP_LOCATION}
+```
+
+- Create an AKS cluster
+
+```bash
+AKS_RESOURCE_GROUP=pinot-demo
+AKS_CLUSTER_NAME=pinot-quickstart
+az aks create --resource-group ${AKS_RESOURCE_GROUP}  --name ${AKS_CLUSTER_NAME} --node-count 3
+```
+
+(Optional) Please register default provider if above command failed for error: `MissingSubscriptionRegistration`
+
+```bash
+az provider register --namespace Microsoft.Network
+```
+
+### (Optional) How to connect to an existing cluster
+
+Simply run below command to get the credential for the cluster you just created or your existing cluster.
+
+```bash
+AKS_RESOURCE_GROUP=pinot-demo
+AKS_CLUSTER_NAME=pinot-quickstart
+az aks get-credentials --resource-group ${AKS_RESOURCE_GROUP} --name ${AKS_CLUSTER_NAME}
+```
+
+To verify the connection, you can run
+```bash
+kubectl get nodes
+```
+
+## How to setup a Pinot cluster for demo
+
+### Update helm dependency
+
+```bash
+helm dependency update
+```
+
+### Start Pinot with Helm
+
+- For helm v3.1.2
+
+```bash
+kubectl create ns pinot-quickstart
+helm install pinot -n pinot-quickstart .
+```
+
+- For helm v3.0.0
+
+```bash
+kubectl create ns pinot-quickstart
+helm install -n pinot-quickstart pinot .
+```
+
+- For helm v2.12.1
+
+If cluster is just initialized, ensure helm is initialized by running:
+
+```bash
+helm init --service-account tiller
+```
+
+Then deploy pinot cluster by:
+
+```bash
+helm install --namespace "pinot-quickstart" --name "pinot" .
+```
+
+#### Troubleshooting (For helm v2.12.1)
+- Error: Please run below command if encountering issue:
+
+```
+Error: could not find tiller".
+```
+
+- Resolution:
+
+```bash
+kubectl -n kube-system delete deployment tiller-deploy
+kubectl -n kube-system delete service/tiller-deploy
+helm init --service-account tiller
+```
+
+- Error: Please run below command if encountering permission issue:
+
+```Error: release pinot failed: namespaces "pinot-quickstart" is forbidden: User "system:serviceaccount:kube-system:default" cannot get resource "namespaces" in API group "" in the namespace "pinot-quickstart"```
+
+- Resolution:
+
+```bash
+kubectl apply -f helm-rbac.yaml
+```
+
+#### To check deployment status
+
+```bash
+kubectl get all -n pinot-quickstart
+```
+
+### Pinot Realtime QuickStart
+
+#### Bring up a Kafka Cluster for realtime data ingestion
+
+- For helm v3.0.0
+
+```bash
+helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
+helm install -n pinot-quickstart kafka incubator/kafka --set replicas=1
+```
+
+- For helm v2.12.1
+
+```bash
+helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
+helm install --namespace "pinot-quickstart"  --name kafka incubator/kafka --set replicas=1
+```
+
+#### Create Kafka topic
+
+```bash
+kubectl -n pinot-quickstart exec kafka-0 -- kafka-topics --zookeeper kafka-zookeeper:2181 --topic flights-realtime --create --partitions 1 --replication-factor 1
+kubectl -n pinot-quickstart exec kafka-0 -- kafka-topics --zookeeper kafka-zookeeper:2181 --topic flights-realtime-avro --create --partitions 1 --replication-factor 1
+```
+
+#### Load data into Kafka and create Pinot schema/table
+
+```bash
+kubectl apply -f pinot-realtime-quickstart.yml
+```
+
+### How to query pinot data
+
+Please use below script to do local port-forwarding and open Pinot query console on your web browser.
+
+```bash
+./query-pinot-data.sh
+```
+
+## Configuring the Chart
+
+This chart includes a ZooKeeper chart as a dependency to the Pinot
+cluster in its `requirement.yaml` by default. The chart can be customized using the
+following configurable parameters:
+
+| Parameter                                      | Description                                                                                                                                                                | Default                                                            |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `image.repository`                             | Pinot Container image repo                                                                                                                                                 | `apachepinot/pinot`                                                |
+| `image.tag`                                    | Pinot Container image tag                                                                                                                                                  | `0.3.0-SNAPSHOT`                                                   |
+| `image.pullPolicy`                             | Pinot Container image pull policy                                                                                                                                          | `IfNotPresent`                                                     |
+| `cluster.name`                                 | Pinot Cluster name                                                                                                                                                         | `pinot-quickstart`                                                 |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `controller.name`                              | Name of Pinot Controller                                                                                                                                                   | `controller`                                                       |
+| `controller.port`                              | Pinot controller port                                                                                                                                                      | `9000`                                                             |
+| `controller.replicaCount`                      | Pinot controller replicas                                                                                                                                                  | `1`                                                                |
+| `controller.data.dir`                          | Pinot controller data directory, should be same as `controller.persistence.mountPath` or a sub directory of it                                                             | `/var/pinot/controller/data`                                       |
+| `controller.vip.host`                          | Pinot Vip host                                                                                                                                                             | `pinot-controller`                                                 |
+| `controller.vip.port`                          | Pinot Vip port                                                                                                                                                             | `9000`                                                             |
+| `controller.persistence.enabled`               | Use a PVC to persist Pinot Controller data                                                                                                                                 | `true`                                                             |
+| `controller.persistence.accessMode`            | Access mode of data volume                                                                                                                                                 | `ReadWriteOnce`                                                    |
+| `controller.persistence.size`                  | Size of data volume                                                                                                                                                        | `1G`                                                               |
+| `controller.persistence.mountPath`             | Mount path of controller data volume                                                                                                                                       | `/var/pinot/controller/data`                                       |
+| `controller.persistence.storageClass`          | Storage class of backing PVC                                                                                                                                               | `""`                                                               |
+| `controller.jvmOpts`                           | Pinot Controller JVM Options                                                                                                                                               | `-Xms256M -Xmx1G`                                                  |
+| `controller.log4j2ConfFile`                    | Pinot Controller log4j2 configuration file                                                                                                                                 | `/opt/pinot/conf/pinot-controller-log4j2.xml`                      |
+| `controller.pluginsDir`                        | Pinot Controller plugins directory                                                                                                                                         | `/opt/pinot/plugins`                                               |
+| `controller.service.port`                      | Service Port                                                                                                                                                               | `9000`                                                             |
+| `controller.external.enabled`                  | If True, exposes Pinot Controller externally                                                                                                                               | `true`                                                             |
+| `controller.external.type`                     | Service Type                                                                                                                                                               | `LoadBalancer`                                                     |
+| `controller.external.port`                     | Service Port                                                                                                                                                               | `9000`                                                             |
+| `controller.resources`                         | Pinot Controller resource requests and limits                                                                                                                              | `{}`                                                               |
+| `controller.nodeSelector`                      | Node labels for controller pod assignment                                                                                                                                  | `{}`                                                               |
+| `controller.affinity`                          | Defines affinities and anti-affinities for pods as defined in: <https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity> preferences | `{}`                                                               |
+| `controller.tolerations`                       | List of node tolerations for the pods. <https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/>                                                           | `[]`                                                               |
+| `controller.podAnnotations`                    | Annotations to be added to controller pod                                                                                                                                  | `{}`                                                               |
+| `controller.updateStrategy.type`               | StatefulSet update strategy to use.                                                                                                                                        | `RollingUpdate`                                                    |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `broker.name`                                  | Name of Pinot Broker                                                                                                                                                       | `broker`                                                           |
+| `broker.port`                                  | Pinot broker port                                                                                                                                                          | `8099`                                                             |
+| `broker.replicaCount`                          | Pinot broker replicas                                                                                                                                                      | `1`                                                                |
+| `broker.jvmOpts`                               | Pinot Broker JVM Options                                                                                                                                                   | `-Xms256M -Xmx1G`                                                  |
+| `broker.log4j2ConfFile`                        | Pinot Broker log4j2 configuration file                                                                                                                                     | `/opt/pinot/conf/pinot-broker-log4j2.xml`                          |
+| `broker.pluginsDir`                            | Pinot Broker plugins directory                                                                                                                                             | `/opt/pinot/plugins`                                               |
+| `broker.service.port`                          | Service Port                                                                                                                                                               | `8099`                                                             |
+| `broker.external.enabled`                      | If True, exposes Pinot Broker externally                                                                                                                                   | `true`                                                             |
+| `broker.external.type`                         | External service Type                                                                                                                                                      | `LoadBalancer`                                                     |
+| `broker.external.port`                         | External service Port                                                                                                                                                      | `8099`                                                             |
+| `broker.routingTable.builderClass`             | Routing Table Builder Class                                                                                                                                                | `random`                                                           |
+| `broker.resources`                             | Pinot Broker resource requests and limits                                                                                                                                  | `{}`                                                               |
+| `broker.nodeSelector`                          | Node labels for broker pod assignment                                                                                                                                      | `{}`                                                               |
+| `broker.affinity`                              | Defines affinities and anti-affinities for pods as defined in: <https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity> preferences | `{}`                                                               |
+| `broker.tolerations`                           | List of node tolerations for the pods. <https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/>                                                           | `[]`                                                               |
+| `broker.podAnnotations`                        | Annotations to be added to broker pod                                                                                                                                      | `{}`                                                               |
+| `broker.updateStrategy.type`                   | StatefulSet update strategy to use.                                                                                                                                        | `RollingUpdate`                                                    |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `server.name`                                  | Name of Pinot Server                                                                                                                                                       | `server`                                                           |
+| `server.port.netty`                            | Pinot server netty port                                                                                                                                                    | `8098`                                                             |
+| `server.port.admin`                            | Pinot server admin port                                                                                                                                                    | `8097`                                                             |
+| `server.replicaCount`                          | Pinot server replicas                                                                                                                                                      | `1`                                                                |
+| `server.dataDir`                               | Pinot server data directory, should be same as `server.persistence.mountPath` or a sub directory of it                                                                     | `/var/pinot/server/data/index`                                     |
+| `server.segmentTarDir`                         | Pinot server segment directory, should be same as `server.persistence.mountPath` or a sub directory of it                                                                  | `/var/pinot/server/data/segments`                                  |
+| `server.persistence.enabled`                   | Use a PVC to persist Pinot Server data                                                                                                                                     | `true`                                                             |
+| `server.persistence.accessMode`                | Access mode of data volume                                                                                                                                                 | `ReadWriteOnce`                                                    |
+| `server.persistence.size`                      | Size of data volume                                                                                                                                                        | `4G`                                                               |
+| `server.persistence.mountPath`                 | Mount path of server data volume                                                                                                                                           | `/var/pinot/server/data`                                           |
+| `server.persistence.storageClass`              | Storage class of backing PVC                                                                                                                                               | `""`                                                               |
+| `server.jvmOpts`                               | Pinot Server JVM Options                                                                                                                                                   | `-Xms512M -Xmx1G`                                                  |
+| `server.log4j2ConfFile`                        | Pinot Server log4j2 configuration file                                                                                                                                     | `/opt/pinot/conf/pinot-server-log4j2.xml`                          |
+| `server.pluginsDir`                            | Pinot Server plugins directory                                                                                                                                             | `/opt/pinot/plugins`                                               |
+| `server.service.port`                          | Service Port                                                                                                                                                               | `8098`                                                             |
+| `server.resources`                             | Pinot Server resource requests and limits                                                                                                                                  | `{}`                                                               |
+| `server.nodeSelector`                          | Node labels for server pod assignment                                                                                                                                      | `{}`                                                               |
+| `server.affinity`                              | Defines affinities and anti-affinities for pods as defined in: <https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity> preferences | `{}`                                                               |
+| `server.tolerations`                           | List of node tolerations for the pods. <https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/>                                                           | `[]`                                                               |
+| `server.podAnnotations`                        | Annotations to be added to server pod                                                                                                                                      | `{}`                                                               |
+| `server.updateStrategy.type`                   | StatefulSet update strategy to use.                                                                                                                                        | `RollingUpdate`                                                    |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `zookeeper.enabled`                            | If True, installs Zookeeper Chart                                                                                                                                          | `true`                                                             |
+| `zookeeper.resources`                          | Zookeeper resource requests and limits                                                                                                                                     | `{}`                                                               |
+| `zookeeper.env`                                | Environmental variables provided to Zookeeper Zookeeper                                                                                                                    | `{ZK_HEAP_SIZE: "256M"}`                                           |
+| `zookeeper.storage`                            | Zookeeper Persistent volume size                                                                                                                                           | `2Gi`                                                              |
+| `zookeeper.image.PullPolicy`                   | Zookeeper Container pull policy                                                                                                                                            | `IfNotPresent`                                                     |
+| `zookeeper.url`                                | URL of Zookeeper Cluster (unneeded if installing Zookeeper Chart)                                                                                                          | `""`                                                               |
+| `zookeeper.port`                               | Port of Zookeeper Cluster                                                                                                                                                  | `2181`                                                             |
+| `zookeeper.affinity`                           | Defines affinities and anti-affinities for pods as defined in: <https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity> preferences | `{}`                                                               |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+
+Specify parameters using `--set key=value[,key=value]` argument to `helm install`
+
+```bash
+helm install --name pinot -f values.yaml . --set server.replicaCount=2
+```
+
+Alternatively a YAML file that specifies the values for the parameters can be provided like this:
+
+```bash
+helm install --name pinot -f values.yaml .
+```
+
+If you are using GKE, Create a storageClass:
+
+```
+kubectl apply -f gke-ssd.yaml
+```
+
+or If you want to use pd-standard storageClass:
+
+```bash
+kubectl apply -f gke-pd.yaml
+```
+
+## How to clean up Pinot deployment
+
+```bash
+kubectl delete ns pinot-quickstart
+```
diff --git a/kubernetes/helm/charts/zookeeper-2.1.3.tgz b/kubernetes/helm/pinot/charts/zookeeper-2.1.3.tgz
similarity index 100%
rename from kubernetes/helm/charts/zookeeper-2.1.3.tgz
rename to kubernetes/helm/pinot/charts/zookeeper-2.1.3.tgz
diff --git a/kubernetes/helm/pinot-github-events-setup.yml b/kubernetes/helm/pinot/pinot-github-events-setup.yml
similarity index 100%
rename from kubernetes/helm/pinot-github-events-setup.yml
rename to kubernetes/helm/pinot/pinot-github-events-setup.yml
diff --git a/kubernetes/helm/pinot-realtime-quickstart.yml b/kubernetes/helm/pinot/pinot-realtime-quickstart.yml
similarity index 100%
rename from kubernetes/helm/pinot-realtime-quickstart.yml
rename to kubernetes/helm/pinot/pinot-realtime-quickstart.yml
diff --git a/kubernetes/helm/query-pinot-data.sh b/kubernetes/helm/pinot/query-pinot-data.sh
similarity index 100%
rename from kubernetes/helm/query-pinot-data.sh
rename to kubernetes/helm/pinot/query-pinot-data.sh
diff --git a/kubernetes/helm/requirements.lock b/kubernetes/helm/pinot/requirements.lock
similarity index 100%
rename from kubernetes/helm/requirements.lock
rename to kubernetes/helm/pinot/requirements.lock
diff --git a/kubernetes/helm/requirements.yaml b/kubernetes/helm/pinot/requirements.yaml
similarity index 100%
rename from kubernetes/helm/requirements.yaml
rename to kubernetes/helm/pinot/requirements.yaml
diff --git a/kubernetes/helm/templates/_helpers.tpl b/kubernetes/helm/pinot/templates/_helpers.tpl
similarity index 100%
rename from kubernetes/helm/templates/_helpers.tpl
rename to kubernetes/helm/pinot/templates/_helpers.tpl
diff --git a/kubernetes/helm/templates/broker/configmap.yaml b/kubernetes/helm/pinot/templates/broker/configmap.yaml
similarity index 100%
rename from kubernetes/helm/templates/broker/configmap.yaml
rename to kubernetes/helm/pinot/templates/broker/configmap.yaml
diff --git a/kubernetes/helm/templates/broker/service-external.yaml b/kubernetes/helm/pinot/templates/broker/service-external.yaml
similarity index 100%
rename from kubernetes/helm/templates/broker/service-external.yaml
rename to kubernetes/helm/pinot/templates/broker/service-external.yaml
diff --git a/kubernetes/helm/templates/broker/service-headless.yaml b/kubernetes/helm/pinot/templates/broker/service-headless.yaml
similarity index 100%
rename from kubernetes/helm/templates/broker/service-headless.yaml
rename to kubernetes/helm/pinot/templates/broker/service-headless.yaml
diff --git a/kubernetes/helm/templates/broker/service.yaml b/kubernetes/helm/pinot/templates/broker/service.yaml
similarity index 100%
copy from kubernetes/helm/templates/broker/service.yaml
copy to kubernetes/helm/pinot/templates/broker/service.yaml
diff --git a/kubernetes/helm/templates/broker/statefulset.yml b/kubernetes/helm/pinot/templates/broker/statefulset.yml
similarity index 100%
rename from kubernetes/helm/templates/broker/statefulset.yml
rename to kubernetes/helm/pinot/templates/broker/statefulset.yml
diff --git a/kubernetes/helm/templates/controller/configmap.yaml b/kubernetes/helm/pinot/templates/controller/configmap.yaml
similarity index 100%
copy from kubernetes/helm/templates/controller/configmap.yaml
copy to kubernetes/helm/pinot/templates/controller/configmap.yaml
diff --git a/kubernetes/helm/templates/controller/service-external.yaml b/kubernetes/helm/pinot/templates/controller/service-external.yaml
similarity index 100%
copy from kubernetes/helm/templates/controller/service-external.yaml
copy to kubernetes/helm/pinot/templates/controller/service-external.yaml
diff --git a/kubernetes/helm/templates/controller/service-headless.yaml b/kubernetes/helm/pinot/templates/controller/service-headless.yaml
similarity index 100%
rename from kubernetes/helm/templates/controller/service-headless.yaml
rename to kubernetes/helm/pinot/templates/controller/service-headless.yaml
diff --git a/kubernetes/helm/templates/controller/service.yaml b/kubernetes/helm/pinot/templates/controller/service.yaml
similarity index 100%
rename from kubernetes/helm/templates/controller/service.yaml
rename to kubernetes/helm/pinot/templates/controller/service.yaml
diff --git a/kubernetes/helm/templates/controller/statefulset.yaml b/kubernetes/helm/pinot/templates/controller/statefulset.yaml
similarity index 100%
rename from kubernetes/helm/templates/controller/statefulset.yaml
rename to kubernetes/helm/pinot/templates/controller/statefulset.yaml
diff --git a/kubernetes/helm/templates/server/configmap.yaml b/kubernetes/helm/pinot/templates/server/configmap.yaml
similarity index 100%
rename from kubernetes/helm/templates/server/configmap.yaml
rename to kubernetes/helm/pinot/templates/server/configmap.yaml
diff --git a/kubernetes/helm/templates/server/service-headless.yaml b/kubernetes/helm/pinot/templates/server/service-headless.yaml
similarity index 100%
copy from kubernetes/helm/templates/server/service-headless.yaml
copy to kubernetes/helm/pinot/templates/server/service-headless.yaml
diff --git a/kubernetes/helm/templates/server/service.yaml b/kubernetes/helm/pinot/templates/server/service.yaml
similarity index 100%
rename from kubernetes/helm/templates/server/service.yaml
rename to kubernetes/helm/pinot/templates/server/service.yaml
diff --git a/kubernetes/helm/templates/server/statefulset.yml b/kubernetes/helm/pinot/templates/server/statefulset.yml
similarity index 100%
rename from kubernetes/helm/templates/server/statefulset.yml
rename to kubernetes/helm/pinot/templates/server/statefulset.yml
diff --git a/kubernetes/helm/values.yaml b/kubernetes/helm/pinot/values.yaml
similarity index 100%
rename from kubernetes/helm/values.yaml
rename to kubernetes/helm/pinot/values.yaml
diff --git a/kubernetes/helm/presto-0.2.0.tgz b/kubernetes/helm/presto-0.2.0.tgz
new file mode 100644
index 0000000..e97643e
Binary files /dev/null and b/kubernetes/helm/presto-0.2.0.tgz differ
diff --git a/kubernetes/helm/presto-cli.sh b/kubernetes/helm/presto-cli.sh
deleted file mode 100644
index 135c529..0000000
--- a/kubernetes/helm/presto-cli.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-if [[ $(nc -z  localhost 8080) != 0 ]]; then
-  kubectl port-forward service/presto-coordinator 8080:8080 -n pinot-quickstart > /dev/null &
-fi
-sleep 2
-open http://localhost:8080/
-
-# Just for blocking
-tail -f /dev/null
-pkill -f "kubectl port-forward sservice/presto-coordinator 8080:8080 -n pinot-quickstart"
diff --git a/kubernetes/helm/Chart.yaml b/kubernetes/helm/presto/Chart.yaml
similarity index 69%
rename from kubernetes/helm/Chart.yaml
rename to kubernetes/helm/presto/Chart.yaml
index 0bfa2c6..167994f 100644
--- a/kubernetes/helm/Chart.yaml
+++ b/kubernetes/helm/presto/Chart.yaml
@@ -19,17 +19,16 @@
 
 apiVersion: v1
 appVersion: 0.2.0
-name: pinot
-description: Apache Pinot is a realtime distributed OLAP datastore, which is used to deliver scalable real time analytics with low latency. It can ingest data from offline data sources (such as Hadoop and flat files) as well as online sources (such as Kafka). Pinot is designed to scale horizontally.
+name: presto
+description: Presto is an open source distributed SQL query engine for running interactive analytic queries against data sources of all sizes ranging from gigabytes to petabytes.
 version: 0.2.0
 keywords:
-  - olap
   - analytics
   - database
-  - pinot
-home: https://pinot.apache.org/
+  - presto
+home: https://github.com/prestodb/presto
 sources:
-  - https://github.com/apache/incubator-pinot
+  - https://github.com/apache/incubator-pinot/tree/master/kubernetes/helm
 maintainers:
   - name: pinot-dev
     email: dev@pinot.apache.org
diff --git a/kubernetes/helm/presto/README.md b/kubernetes/helm/presto/README.md
new file mode 100644
index 0000000..52a81b6
--- /dev/null
+++ b/kubernetes/helm/presto/README.md
@@ -0,0 +1,232 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+
+# Pinot Presto Quickstart on Kubernetes with Helm
+
+## Prerequisite
+
+- kubectl (<https://kubernetes.io/docs/tasks/tools/install-kubectl>)
+- Helm (<https://helm.sh/docs/using_helm/#installing-helm>)
+- Configure kubectl to connect to the Kubernetes cluster.
+- An already Setup Pinot demo cluster.
+
+## How to setup a Presto cluster for demo
+
+### Start Presto with Helm
+
+Below command will start one presto coordinator and one presto worker as an example.
+
+```bash
+helm install presto -n pinot-quickstart .
+```
+
+#### To check deployment status
+
+```bash
+kubectl get all -n pinot-quickstart
+```
+
+### Presto UI
+Please use below script to do local port-forwarding and open Presto UI on your web browser.
+```bash
+./launch-presto-ui.sh
+```
+
+### Query Presto using Presto CLI
+
+Once Presto is deployed, you could run below command.
+
+```bash
+./pinot-presto-cli.sh
+```
+
+or with your own command with custom parameters.
+
+```bash
+./presto-cli.sh --server localhost:8080 --catalog pinot --schema default
+```
+
+### Sample queries to execute
+
+- List all catalogs
+
+```
+presto:default> show catalogs;
+```
+```
+ Catalog
+---------
+ pinot
+ system
+(2 rows)
+
+Query 20191112_050827_00003_xkm4g, FINISHED, 1 node
+Splits: 19 total, 19 done (100.00%)
+0:01 [0 rows, 0B] [0 rows/s, 0B/s]
+
+```
+
+- List All tables
+
+```
+presto:default> show tables;
+```
+```
+    Table
+--------------
+ airlinestats
+(1 row)
+
+Query 20191112_050907_00004_xkm4g, FINISHED, 1 node
+Splits: 19 total, 19 done (100.00%)
+0:01 [1 rows, 29B] [1 rows/s, 41B/s]
+```
+
+- Show schema
+
+```
+presto:default> DESCRIBE pinot.dontcare.airlinestats;
+```
+```
+        Column        |  Type   | Extra | Comment
+----------------------+---------+-------+---------
+ flightnum            | integer |       |
+ origin               | varchar |       |
+ quarter              | integer |       |
+ lateaircraftdelay    | integer |       |
+ divactualelapsedtime | integer |       |
+......
+
+Query 20191112_051021_00005_xkm4g, FINISHED, 1 node
+Splits: 19 total, 19 done (100.00%)
+0:02 [80 rows, 6.06KB] [35 rows/s, 2.66KB/s]
+```
+
+- Count total documents
+
+```
+presto:default> select count(*) as cnt from pinot.dontcare.airlinestats limit 10;
+```
+```
+ cnt
+------
+ 9745
+(1 row)
+
+Query 20191112_051114_00006_xkm4g, FINISHED, 1 node
+Splits: 17 total, 17 done (100.00%)
+0:00 [1 rows, 8B] [2 rows/s, 19B/s]
+```
+
+Then you could verify the new worker nodes are added by:
+
+```bash
+presto:default> select * from system.runtime.nodes;
+               node_id                |        http_uri        |      node_version      | coordinator | state
+--------------------------------------+------------------------+------------------------+-------------+--------
+ d7123f72-bdd4-417e-adc2-9cfed5bbb12c | http://10.1.0.165:8080 | 0.236-SNAPSHOT-dbf3a80 | true        | active
+ fe9b8813-7bfc-4b4e-aa84-9d50c5e87c57 | http://10.1.0.166:8080 | 0.236-SNAPSHOT-dbf3a80 | false       | active
+(2 rows)
+
+Query 20200510_073256_00012_z6jp6, FINISHED, 2 nodes
+Splits: 17 total, 17 done (100.00%)
+0:00 [2 rows, 174B] [14 rows/s, 1.27KB/s]
+```
+
+## Configuring the Chart
+
+The chart can be customized using the following configurable parameters:
+
+| Parameter                                      | Description                                                                                                                                                                | Default                                                            |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `image.repository`                             | Presto Container image repo                                                                                                                                                 | `apachepinot/pinot-presto`                                                |
+| `image.tag`                                    | Presto Container image tag                                                                                                                                                  | `latest`                                                   |
+| `image.pullPolicy`                             | Presto Container image pull policy                                                                                                                                          | `IfNotPresent`                                                     |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `pinot.connectorName`                              | Name of Pinot Connector                                                                                                                                                   | `pinot`                                                       |
+| `pinot.controllerUrls`                              | Pinot Controller URLs                                                                                                                                                   | `pinot-controller:9000`                                                       |
+| `pinot.controllerRestService`                              | Pinot Controller Rest Service URLs                                                                                        | `pinot-controller:9000`                                                       |
+| `pinot.allowMultipleAggregations`                              | Allow Query with Multiple Aggregations                                                                                                                                                 | `true`                                                       |
+| `pinot.useDateTrunc`                              | Allow DateTrunc Function in Pinot                                                                                                                                                   | `true`                                                       |
+| `pinot.inferDateTypeInSchema`                              | Infer a Pinot TimeFieldSpec/DateTimeFieldSpec column with Days Since Epoch value as a Date column based on Pinot Schema                                                                                                                                                  | `true`                                                       |
+| `pinot.inferTimestampTypeInSchema`                              | Infer a Pinot TimeFieldSpec/DateTimeFieldSpec column with MilliSecond Since Epoch value as a Timestamp column based on Pinot Schema                                                                                                                                                   | `true`                                                       |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `coordinator.name`                              | Name of Presto Coordinator                                                                                                                                                   | `coordinator`                                                       |
+| `coordinator.port`                              | Presto Coordinator port                                                                                                                                                      | `8080`                                                             |
+| `coordinator.replicaCount`                      | Presto Coordinator replicas                                                                                                                                                  | `1`                                                                |
+| `coordinator.query.maxMemory`                          | Max Memory Usage per Query                                                             | `4GB`                                       |
+| `coordinator.query.maxMemoryPerNode`                          | Max Memory Usage per Node per Query                                                            | `1GB`                                       |
+| `coordinator.query.maxTotalMemoryPerNode`                          | Max Total Memory Usage per Node                                                             | `2GB`                                       |
+| `coordinator.discovery.serverEnabled`                          | Enable Discovery Server                                                                                                                                                             | `true`                                                 |
+| `coordinator.discovery.uri`                          | Discovery Server URI                                                                                                                                                            | `http://presto-coordinator:8080`                                                 |
+| `coordinator.jvm`                          | Coordinator JVM Configs                                                                                                                                                             | `-server -Xmx16G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError`                                                             |
+| `coordinator.log`                          | Log File Content                                                                                                                                                             | `com.facebook.presto=INFO`                                                             |
+| `coordinator.node.environment`                          | Node Environment                                                                                                                                                             | `production`                                                             |
+| `coordinator.node.id`                          | Node ID (Default is empty, Presto will assign automatically)                                                                                                                                                             | ``                                                             |
+| `coordinator.node.dataDir`                          | Data Directory                                                                                                                                                             | `/home/presto/data`                                                             |
+| `coordinator.node.schedulerIncludeCoordinator`                          |  If Schedule Query on Coordinator                                                                                                                                                            | `true`                                                             |
+| `coordinator.persistence.enabled`               | Use a PVC to persist Presto Coordinator Data                                                                                                                                 | `true`                                                             |
+| `coordinator.persistence.accessMode`            | Access mode of data volume                                                                                                                                                 | `ReadWriteOnce`                                                    |
+| `coordinator.persistence.size`                  | Size of data volume                                                                                                                                                        | `4G`                                                               |
+| `coordinator.persistence.storageClass`          | Storage class of backing PVC                                                                                                                                               | `""`                                                               |
+| `coordinator.service.port`                      | Service Port                                                                                                                                                               | `8080`                                                             |
+| `coordinator.external.enabled`                  | If True, exposes Presto Coordinator externally                                                                                                                               | `true`                                                            |
+| `coordinator.external.type`                     | Service Type                                                                                                                                                               | `LoadBalancer`                                                     |
+| `coordinator.external.port`                     | Service Port                                                                                                                                                               | `8080`                                                             |
+| `coordinator.resources`                         | Presto Coordinator resource requests and limits                                                                                                                              | `{}`                                                               |
+| `coordinator.nodeSelector`                      | Node labels for controller pod assignment                                                                                                                                  | `{}`                                                               |
+| `coordinator.affinity`                          | Defines affinities and anti-affinities for pods as defined in: <https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity> preferences | `{}`                                                               |
+| `coordinator.tolerations`                       | List of node tolerations for the pods. <https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/>                                                           | `[]`                                                               |
+| `coordinator.podAnnotations`                    | Annotations to be added to controller pod                                                                                                                                  | `{}`                                                               |
+| `coordinator.updateStrategy.type`               | StatefulSet update strategy to use.                                                                                                                                        | `RollingUpdate`                                                    |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+| `worker.name`                              | Name of Presto Worker                                                                                                                                                   | `worker`                                                       |
+| `worker.port`                              | Presto Worker port                                                                                                                                                      | `8080`                                                             |
+| `worker.replicaCount`                      | Presto Worker replicas                                                                                                                                                  | `1`                                                                |
+| `worker.query.maxMemory`                          | Max Memory Usage per Query                                                             | `8GB`                                       |
+| `worker.query.maxMemoryPerNode`                          | Max Memory Usage per Node per Query                                                            | `4GB`                                       |
+| `worker.query.maxTotalMemoryPerNode`                          | Max Total Memory Usage per Node                                                             | `8GB`                                       |
+| `worker.discovery.uri`                          | Discovery Server URI                                                                                                                                                            | `http://presto-coordinator:8080`                                                 |
+| `worker.jvm`                          | Worker JVM Configs                                                                                                                                                             | `-server -Xmx64G -XX:+UseG1GC -XX:G1HeapRegionSize=32M -XX:+UseGCOverheadLimit -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError`                                                             |
+| `worker.log`                          | Log File Content                                                                                                                                                             | `com.facebook.presto=INFO`                                                             |
+| `worker.node.environment`                          | Node Environment                                                                                                                                                             | `production`                                                             |
+| `worker.node.id`                          | Node ID (Default is empty, Presto will assign automatically)                                                                                                                                                             | ``                                                             |
+| `worker.node.dataDir`                          | Data Directory                                                                                                                                                             | `/home/presto/data`                                                             |
+| `worker.persistence.enabled`               | Use a PVC to persist Presto Worker Data                                                                                                                                 | `true`                                                             |
+| `worker.persistence.accessMode`            | Access mode of data volume                                                                                                                                                 | `ReadWriteOnce`                                                    |
+| `worker.persistence.size`                  | Size of data volume                                                                                                                                                        | `4G`                                                               |
+| `worker.persistence.storageClass`          | Storage class of backing PVC                                                                                                                                               | `""`                                                               |
+| `worker.service.port`                      | Service Port                                                                                                                                                               | `8080`                                                             |
+| `worker.resources`                         | Presto Worker resource requests and limits                                                                                                                              | `{}`                                                               |
+| `worker.nodeSelector`                      | Node labels for controller pod assignment                                                                                                                                  | `{}`                                                               |
+| `worker.affinity`                          | Defines affinities and anti-affinities for pods as defined in: <https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity> preferences | `{}`                                                               |
+| `worker.tolerations`                       | List of node tolerations for the pods. <https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/>                                                           | `[]`                                                               |
+| `worker.podAnnotations`                    | Annotations to be added to controller pod                                                                                                                                  | `{}`                                                               |
+| `worker.updateStrategy.type`               | StatefulSet update strategy to use.                                                                                                                                        | `RollingUpdate`                                                    |
+|------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------|
+
+Specify parameters using `--set key=value[,key=value]` argument to `helm install`
+
+Alternatively a YAML file that specifies the values for the parameters can be provided like this:
+
+```bash
+helm install --name presto -f values.yaml .
+```
diff --git a/kubernetes/helm/launch-presto-ui.sh b/kubernetes/helm/presto/launch-presto-ui.sh
similarity index 100%
rename from kubernetes/helm/launch-presto-ui.sh
rename to kubernetes/helm/presto/launch-presto-ui.sh
diff --git a/kubernetes/helm/pinot-presto-cli.sh b/kubernetes/helm/presto/pinot-presto-cli.sh
similarity index 100%
rename from kubernetes/helm/pinot-presto-cli.sh
rename to kubernetes/helm/presto/pinot-presto-cli.sh
diff --git a/kubernetes/helm/presto/presto-cli.sh b/kubernetes/helm/presto/presto-cli.sh
new file mode 100755
index 0000000..be3b3d8
--- /dev/null
+++ b/kubernetes/helm/presto/presto-cli.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env bash
+
+if [[ ! -f "/tmp/presto-cli" ]]; then
+  curl -L https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.228/presto-cli-0.228-executable.jar -o /tmp/presto-cli
+  chmod +x /tmp/presto-cli
+fi
+
+/tmp/presto-cli $@
\ No newline at end of file
diff --git a/kubernetes/helm/presto-coordinator.yaml b/kubernetes/helm/presto/presto-coordinator.yaml
similarity index 100%
rename from kubernetes/helm/presto-coordinator.yaml
rename to kubernetes/helm/presto/presto-coordinator.yaml
diff --git a/kubernetes/helm/presto-worker.yaml b/kubernetes/helm/presto/presto-worker.yaml
similarity index 100%
rename from kubernetes/helm/presto-worker.yaml
rename to kubernetes/helm/presto/presto-worker.yaml
diff --git a/kubernetes/helm/presto/templates/_helpers.tpl b/kubernetes/helm/presto/templates/_helpers.tpl
new file mode 100644
index 0000000..eb49763
--- /dev/null
+++ b/kubernetes/helm/presto/templates/_helpers.tpl
@@ -0,0 +1,91 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+{{/* vim: set filetype=mustache: */}}
+{{/*
+Expand the name of the chart.
+*/}}
+{{- define "presto.name" -}}
+{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+
+{{/*
+Create a default fully qualified app name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+If release name contains chart name it will be used as a full name.
+*/}}
+{{- define "presto.fullname" -}}
+{{- if .Values.fullnameOverride -}}
+{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- $name := default .Chart.Name .Values.nameOverride -}}
+{{- if contains $name .Release.Name -}}
+{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
+{{- else -}}
+{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+{{- end -}}
+{{- end -}}
+
+
+{{/*
+Create chart name and version as used by the chart label.
+*/}}
+{{- define "presto.chart" -}}
+{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+Create a default fully qualified presto coordinator name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "presto.coordinator.fullname" -}}
+{{ template "presto.fullname" . }}-{{ .Values.coordinator.name }}
+{{- end -}}
+
+{{/*
+Create a default fully qualified presto worker name.
+We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
+*/}}
+{{- define "presto.worker.fullname" -}}
+{{ template "presto.fullname" . }}-{{ .Values.worker.name }}
+{{- end -}}
+
+{{/*
+The name of the presto coordinator external service.
+*/}}
+{{- define "presto.coordinator.external" -}}
+{{- printf "%s-external" (include "presto.coordinator.fullname" .) | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+
+{{/*
+The name of the presto coordinator headless service.
+*/}}
+{{- define "presto.coordinator.headless" -}}
+{{- printf "%s-headless" (include "presto.coordinator.fullname" .) | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
+
+{{/*
+The name of the presto worker headless service.
+*/}}
+{{- define "presto.worker.headless" -}}
+{{- printf "%s-headless" (include "presto.worker.fullname" .) | trunc 63 | trimSuffix "-" -}}
+{{- end -}}
\ No newline at end of file
diff --git a/kubernetes/helm/presto/templates/coordinator/configmap.yaml b/kubernetes/helm/presto/templates/coordinator/configmap.yaml
new file mode 100644
index 0000000..9dbb34f
--- /dev/null
+++ b/kubernetes/helm/presto/templates/coordinator/configmap.yaml
@@ -0,0 +1,60 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: presto-catalog
+data:
+  pinot.properties: |-
+    connector.name={{ .Values.pinot.connectorName }}
+    pinot.controller-urls={{ .Values.pinot.controllerUrls }}
+    pinot.controller-rest-service={{ .Values.pinot.controllerRestService }}
+    pinot.allow-multiple-aggregations={{ .Values.pinot.allowMultipleAggregations }}
+    pinot.use-date-trunc={{ .Values.pinot.useDateTrunc }}
+    pinot.infer-date-type-in-schema={{ .Values.pinot.inferDateTypeInSchema }}
+    pinot.infer-timestamp-type-in-schema={{ .Values.pinot.inferTimestampTypeInSchema }}
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: presto-coordinator-etc
+data:
+  config.properties: |-
+    coordinator=true
+    node-scheduler.include-coordinator={{ .Values.coordinator.node.schedulerIncludeCoordinator }}
+    http-server.http.port={{ .Values.coordinator.port }}
+    query.max-memory={{ .Values.coordinator.query.maxMemory }}
+    query.max-memory-per-node={{ .Values.coordinator.query.maxMemoryPerNode }}
+    query.max-total-memory-per-node={{ .Values.coordinator.query.maxTotalMemoryPerNode }}
+    discovery-server.enabled={{ .Values.coordinator.discovery.serverEnabled }}
+    discovery.uri={{ .Values.coordinator.discovery.uri }}
+
+  jvm.config:
+{{ toYaml .Values.coordinator.jvm | indent 4 }}
+
+  log.properties:
+{{ toYaml .Values.coordinator.log | indent 4 }}
+
+  node.properties: |-
+    node.environment={{ .Values.coordinator.node.environment }}
+    {{- if .Values.coordinator.node.id }}
+    node.id={{ .Values.coordinator.node.id }}
+    {{ end }}
+    node.data-dir={{ .Values.coordinator.node.dataDir }}
diff --git a/kubernetes/helm/templates/controller/service-external.yaml b/kubernetes/helm/presto/templates/coordinator/service-external.yaml
similarity index 68%
rename from kubernetes/helm/templates/controller/service-external.yaml
rename to kubernetes/helm/presto/templates/coordinator/service-external.yaml
index 6db4b6c..c81b37c 100644
--- a/kubernetes/helm/templates/controller/service-external.yaml
+++ b/kubernetes/helm/presto/templates/coordinator/service-external.yaml
@@ -17,25 +17,25 @@
 # under the License.
 #
 
-{{- if .Values.controller.external.enabled }}
+{{- if .Values.coordinator.external.enabled }}
 ---
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ template "pinot.controller.external" . }}
+  name: {{ template "presto.coordinator.external" . }}
   labels:
-    app: {{ include "pinot.name" . }}
-    chart: {{ include "pinot.chart" . }}
-    component: {{ .Values.controller.name }}
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.coordinator.name }}
     release: {{ .Release.Name }}
     heritage: {{ .Release.Service }}
 spec:
-  type: {{ .Values.controller.external.type }}
+  type: {{ .Values.coordinator.external.type }}
   ports:
-    - name: external-controller
-      port: {{ .Values.controller.external.port }}
+    - name: external-coordinator
+      port: {{ .Values.coordinator.external.port }}
   selector:
-    app: {{ include "pinot.name" . }}
+    app: {{ include "presto.name" . }}
     release: {{ .Release.Name }}
-    component: {{ .Values.controller.name }}
+    component: {{ .Values.coordinator.name }}
 {{- end }}
diff --git a/kubernetes/helm/templates/server/service-headless.yaml b/kubernetes/helm/presto/templates/coordinator/service-headless.yaml
similarity index 76%
copy from kubernetes/helm/templates/server/service-headless.yaml
copy to kubernetes/helm/presto/templates/coordinator/service-headless.yaml
index aa8297d..d1e1e36 100644
--- a/kubernetes/helm/templates/server/service-headless.yaml
+++ b/kubernetes/helm/presto/templates/coordinator/service-headless.yaml
@@ -20,19 +20,19 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ template "pinot.server.headless" . }}
+  name: {{ template "presto.coordinator.headless" . }}
   labels:
-    app: {{ include "pinot.name" . }}
-    chart: {{ include "pinot.chart" . }}
-    component: {{ .Values.server.name }}
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.coordinator.name }}
     release: {{ .Release.Name }}
     heritage: {{ .Release.Service }}
 spec:
   clusterIP: None
   ports:
     # [pod_name].[service_name].[namespace].svc.cluster.local
-    - port: {{ .Values.server.service.port }}
+    - port: {{ .Values.coordinator.service.port }}
   selector:
-    app: {{ include "pinot.name" . }}
+    app: {{ include "presto.name" . }}
     release: {{ .Release.Name }}
-    component: {{ .Values.server.name }}
+    component: {{ .Values.coordinator.name }}
diff --git a/kubernetes/helm/templates/broker/service.yaml b/kubernetes/helm/presto/templates/coordinator/service.yaml
similarity index 76%
copy from kubernetes/helm/templates/broker/service.yaml
copy to kubernetes/helm/presto/templates/coordinator/service.yaml
index 62c8424..8cfac97 100644
--- a/kubernetes/helm/templates/broker/service.yaml
+++ b/kubernetes/helm/presto/templates/coordinator/service.yaml
@@ -20,19 +20,19 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ include "pinot.broker.fullname" . }}
+  name: {{ include "presto.coordinator.fullname" . }}
   labels:
-    app: {{ include "pinot.name" . }}
-    chart: {{ include "pinot.chart" . }}
-    component: {{ .Values.broker.name }}
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.coordinator.name }}
     release: {{ .Release.Name }}
     heritage: {{ .Release.Service }}
 spec:
   type: ClusterIP
   ports:
     # [pod_name].[service_name].[namespace].svc.cluster.local
-    - port: {{ .Values.broker.service.port }}
+    - port: {{ .Values.coordinator.service.port }}
   selector:
-    app: {{ include "pinot.name" . }}
+    app: {{ include "presto.name" . }}
     release: {{ .Release.Name }}
-    component: {{ .Values.broker.name }}
+    component: {{ .Values.coordinator.name }}
diff --git a/kubernetes/helm/presto/templates/coordinator/statefulset.yml b/kubernetes/helm/presto/templates/coordinator/statefulset.yml
new file mode 100644
index 0000000..e44fec9
--- /dev/null
+++ b/kubernetes/helm/presto/templates/coordinator/statefulset.yml
@@ -0,0 +1,121 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: {{ include "presto.coordinator.fullname" . }}
+  labels:
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.coordinator.name }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+spec:
+  selector:
+    matchLabels:
+      app: {{ include "presto.name" . }}
+      release: {{ .Release.Name }}
+      component: {{ .Values.coordinator.name }}
+  serviceName: {{ template "presto.coordinator.headless" . }}
+  replicas: {{ .Values.coordinator.replicaCount }}
+  updateStrategy:
+    type: {{ .Values.coordinator.updateStrategy.type }}
+  podManagementPolicy: Parallel
+  template:
+    metadata:
+      labels:
+        app: {{ include "presto.name" . }}
+        release: {{ .Release.Name }}
+        component: {{ .Values.coordinator.name }}
+      annotations:
+{{ toYaml .Values.coordinator.podAnnotations | indent 8 }}
+    spec:
+      nodeSelector:
+{{ toYaml .Values.coordinator.nodeSelector | indent 8 }}
+      affinity:
+{{ toYaml .Values.coordinator.affinity | indent 8 }}
+      tolerations:
+{{ toYaml .Values.coordinator.tolerations | indent 8 }}
+      securityContext:
+        runAsGroup: 1000
+        fsGroup: 1000
+        runAsUser: 1000
+      containers:
+      - name: coordinator
+        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+        imagePullPolicy: {{ .Values.image.pullPolicy }}
+        args: [ "run" ]
+        ports:
+          - containerPort: {{ .Values.coordinator.port }}
+            protocol: TCP
+        volumeMounts:
+          - name: presto-data
+            mountPath: {{ .Values.coordinator.node.dataDir }}
+          - name: presto-catalog
+            mountPath: "/home/presto/etc/catalog"
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/config.properties"
+            subPath: config.properties
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/log.properties"
+            subPath: log.properties
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/node.properties"
+            subPath: node.properties
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/jvm.config"
+            subPath: jvm.config
+            readOnly: true
+        resources:
+{{ toYaml .Values.coordinator.resources | indent 12 }}
+      restartPolicy: Always
+      volumes:
+        - name: presto-catalog
+          configMap:
+            name: presto-catalog
+        - name: presto-etc
+          configMap:
+            name: presto-coordinator-etc
+
+  {{- if .Values.coordinator.persistence.enabled }}
+  volumeClaimTemplates:
+    - metadata:
+        name: presto-data
+        annotations:
+          pv.beta.kubernetes.io/gid: "1000"
+          pv.beta.kubernetes.io/groups: "1000"
+      spec:
+        accessModes:
+          - {{ .Values.coordinator.persistence.accessMode | quote }}
+        {{- if .Values.coordinator.persistence.storageClass }}
+        {{- if (eq "-" .Values.coordinator.persistence.storageClass) }}
+        storageClassName: ""
+        {{- else }}
+        storageClassName: {{ .Values.coordinator.persistence.storageClass }}
+        {{- end }}
+        {{- end }}
+        resources:
+          requests:
+            storage: {{ .Values.coordinator.persistence.size }}
+  {{ end }}
diff --git a/kubernetes/helm/templates/controller/configmap.yaml b/kubernetes/helm/presto/templates/worker/configmap.yaml
similarity index 53%
rename from kubernetes/helm/templates/controller/configmap.yaml
rename to kubernetes/helm/presto/templates/worker/configmap.yaml
index 7e6cf87..30fb778 100644
--- a/kubernetes/helm/templates/controller/configmap.yaml
+++ b/kubernetes/helm/presto/templates/worker/configmap.yaml
@@ -20,13 +20,25 @@
 apiVersion: v1
 kind: ConfigMap
 metadata:
-  name: controller-config
+  name: presto-worker-etc
 data:
-  pinot-controller.conf: |-
-    controller.helix.cluster.name={{ .Values.cluster.name }}
-    controller.port={{ .Values.controller.port }}
-    controller.vip.host={{ include "pinot.controller.fullname" . }}
-    controller.vip.port={{ .Values.controller.service.port }}
-    controller.data.dir={{ .Values.controller.data.dir }}
-    controller.zk.str={{ include "zookeeper.url" . }}
-    pinot.set.instance.id.to.hostname=true
+  config.properties: |-
+    coordinator=false
+    http-server.http.port={{ .Values.worker.port }}
+    query.max-memory={{ .Values.worker.query.maxMemory }}
+    query.max-memory-per-node={{ .Values.worker.query.maxMemoryPerNode }}
+    query.max-total-memory-per-node={{ .Values.worker.query.maxTotalMemoryPerNode }}
+    discovery.uri={{ .Values.worker.discovery.uri }}
+
+  jvm.config:
+{{ toYaml .Values.worker.jvm | indent 4 }}
+
+  log.properties:
+{{ toYaml .Values.worker.log | indent 4 }}
+
+  node.properties: |-
+    node.environment={{ .Values.worker.node.environment }}
+    {{- if .Values.worker.node.id }}
+    node.id={{ .Values.worker.node.id }}
+    {{ end }}
+    node.data-dir={{ .Values.worker.node.dataDir }}
diff --git a/kubernetes/helm/templates/server/service-headless.yaml b/kubernetes/helm/presto/templates/worker/service-headless.yaml
similarity index 77%
rename from kubernetes/helm/templates/server/service-headless.yaml
rename to kubernetes/helm/presto/templates/worker/service-headless.yaml
index aa8297d..f7ffc16 100644
--- a/kubernetes/helm/templates/server/service-headless.yaml
+++ b/kubernetes/helm/presto/templates/worker/service-headless.yaml
@@ -20,19 +20,19 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ template "pinot.server.headless" . }}
+  name: {{ template "presto.worker.headless" . }}
   labels:
-    app: {{ include "pinot.name" . }}
-    chart: {{ include "pinot.chart" . }}
-    component: {{ .Values.server.name }}
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.worker.name }}
     release: {{ .Release.Name }}
     heritage: {{ .Release.Service }}
 spec:
   clusterIP: None
   ports:
     # [pod_name].[service_name].[namespace].svc.cluster.local
-    - port: {{ .Values.server.service.port }}
+    - port: {{ .Values.worker.service.port }}
   selector:
-    app: {{ include "pinot.name" . }}
+    app: {{ include "presto.name" . }}
     release: {{ .Release.Name }}
-    component: {{ .Values.server.name }}
+    component: {{ .Values.worker.name }}
diff --git a/kubernetes/helm/templates/broker/service.yaml b/kubernetes/helm/presto/templates/worker/service.yaml
similarity index 77%
rename from kubernetes/helm/templates/broker/service.yaml
rename to kubernetes/helm/presto/templates/worker/service.yaml
index 62c8424..f02cce4 100644
--- a/kubernetes/helm/templates/broker/service.yaml
+++ b/kubernetes/helm/presto/templates/worker/service.yaml
@@ -20,19 +20,19 @@
 apiVersion: v1
 kind: Service
 metadata:
-  name: {{ include "pinot.broker.fullname" . }}
+  name: {{ include "presto.worker.fullname" . }}
   labels:
-    app: {{ include "pinot.name" . }}
-    chart: {{ include "pinot.chart" . }}
-    component: {{ .Values.broker.name }}
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.worker.name }}
     release: {{ .Release.Name }}
     heritage: {{ .Release.Service }}
 spec:
   type: ClusterIP
   ports:
     # [pod_name].[service_name].[namespace].svc.cluster.local
-    - port: {{ .Values.broker.service.port }}
+    - port: {{ .Values.worker.service.port }}
   selector:
-    app: {{ include "pinot.name" . }}
+    app: {{ include "presto.name" . }}
     release: {{ .Release.Name }}
-    component: {{ .Values.broker.name }}
+    component: {{ .Values.worker.name }}
diff --git a/kubernetes/helm/presto/templates/worker/statefulset.yml b/kubernetes/helm/presto/templates/worker/statefulset.yml
new file mode 100644
index 0000000..40eca4b
--- /dev/null
+++ b/kubernetes/helm/presto/templates/worker/statefulset.yml
@@ -0,0 +1,121 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+apiVersion: apps/v1
+kind: StatefulSet
+metadata:
+  name: {{ include "presto.worker.fullname" . }}
+  labels:
+    app: {{ include "presto.name" . }}
+    chart: {{ include "presto.chart" . }}
+    component: {{ .Values.worker.name }}
+    release: {{ .Release.Name }}
+    heritage: {{ .Release.Service }}
+spec:
+  selector:
+    matchLabels:
+      app: {{ include "presto.name" . }}
+      release: {{ .Release.Name }}
+      component: {{ .Values.worker.name }}
+  serviceName: {{ template "presto.worker.headless" . }}
+  replicas: {{ .Values.worker.replicaCount }}
+  updateStrategy:
+    type: {{ .Values.worker.updateStrategy.type }}
+  podManagementPolicy: Parallel
+  template:
+    metadata:
+      labels:
+        app: {{ include "presto.name" . }}
+        release: {{ .Release.Name }}
+        component: {{ .Values.worker.name }}
+      annotations:
+{{ toYaml .Values.worker.podAnnotations | indent 8 }}
+    spec:
+      nodeSelector:
+{{ toYaml .Values.worker.nodeSelector | indent 8 }}
+      affinity:
+{{ toYaml .Values.worker.affinity | indent 8 }}
+      tolerations:
+{{ toYaml .Values.worker.tolerations | indent 8 }}
+      securityContext:
+        runAsGroup: 1000
+        fsGroup: 1000
+        runAsUser: 1000
+      containers:
+      - name: coordinator
+        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+        imagePullPolicy: {{ .Values.image.pullPolicy }}
+        args: [ "run" ]
+        ports:
+          - containerPort: {{ .Values.worker.port }}
+            protocol: TCP
+        volumeMounts:
+          - name: presto-data
+            mountPath: {{ .Values.worker.node.dataDir }}
+          - name: presto-catalog
+            mountPath: "/home/presto/etc/catalog"
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/config.properties"
+            subPath: config.properties
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/log.properties"
+            subPath: log.properties
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/node.properties"
+            subPath: node.properties
+            readOnly: true
+          - name: presto-etc
+            mountPath: "/home/presto/etc/jvm.config"
+            subPath: jvm.config
+            readOnly: true
+        resources:
+{{ toYaml .Values.worker.resources | indent 12 }}
+      restartPolicy: Always
+      volumes:
+        - name: presto-catalog
+          configMap:
+            name: presto-catalog
+        - name: presto-etc
+          configMap:
+            name: presto-worker-etc
+
+  {{- if .Values.worker.persistence.enabled }}
+  volumeClaimTemplates:
+    - metadata:
+        name: presto-data
+        annotations:
+          pv.beta.kubernetes.io/gid: "1000"
+          pv.beta.kubernetes.io/groups: "1000"
+      spec:
+        accessModes:
+          - {{ .Values.worker.persistence.accessMode | quote }}
+        {{- if .Values.worker.persistence.storageClass }}
+        {{- if (eq "-" .Values.worker.persistence.storageClass) }}
+        storageClassName: ""
+        {{- else }}
+        storageClassName: {{ .Values.worker.persistence.storageClass }}
+        {{- end }}
+        {{- end }}
+        resources:
+          requests:
+            storage: {{ .Values.worker.persistence.size }}
+  {{ end }}
diff --git a/kubernetes/helm/presto/values.yaml b/kubernetes/helm/presto/values.yaml
new file mode 100644
index 0000000..0a668cf
--- /dev/null
+++ b/kubernetes/helm/presto/values.yaml
@@ -0,0 +1,160 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+# Default values for Presto image with built-in Pinot Connector.
+
+image:
+  repository: apachepinot/pinot-presto
+  tag: latest
+  pullPolicy: IfNotPresent
+
+pinot:
+  connectorName: pinot
+  controllerUrls: pinot-controller:9000
+  controllerRestService: pinot-controller:9000
+  allowMultipleAggregations: true
+  useDateTrunc: true
+  inferDateTypeInSchema: true
+  inferTimestampTypeInSchema: true
+
+coordinator:
+  name: coordinator
+  port: 8080
+  replicaCount: 1
+
+  query:
+    maxMemory: 4GB
+    maxMemoryPerNode: 1GB
+    maxTotalMemoryPerNode: 2GB
+
+  discovery:
+    serverEnabled: true
+    uri: http://presto-coordinator:8080
+
+  jvm: |-
+    -server
+    -Xmx16G
+    -XX:+UseG1GC
+    -XX:G1HeapRegionSize=32M
+    -XX:+UseGCOverheadLimit
+    -XX:+ExplicitGCInvokesConcurrent
+    -XX:+HeapDumpOnOutOfMemoryError
+    -XX:+ExitOnOutOfMemoryError
+
+  log: |-
+    com.facebook.presto=INFO
+
+  node:
+    environment: production
+    dataDir: /home/presto/data
+    schedulerIncludeCoordinator: true
+
+  persistence:
+    enabled: true
+    accessMode: ReadWriteOnce
+    size: 4G
+    storageClass: ""
+
+  service:
+    annotations: {}
+    clusterIP: ""
+    externalIPs: []
+    loadBalancerIP: ""
+    loadBalancerSourceRanges: []
+    type: ClusterIP
+    port: 8080
+    nodePort: ""
+
+  external:
+    enabled: true
+    type: LoadBalancer
+    port: 8080
+
+  resources: {}
+
+  nodeSelector: {}
+
+  tolerations: []
+
+  affinity: {}
+
+  podAnnotations: {}
+
+  updateStrategy:
+    type: RollingUpdate
+
+
+worker:
+  name: worker
+  port: 8080
+  replicaCount: 1
+
+  query:
+    maxMemory: 8GB
+    maxMemoryPerNode: 4GB
+    maxTotalMemoryPerNode: 8GB
+
+  discovery:
+    uri: http://presto-coordinator:8080
+
+  jvm: |-
+    -server
+    -Xmx64G
+    -XX:+UseG1GC
+    -XX:G1HeapRegionSize=32M
+    -XX:+UseGCOverheadLimit
+    -XX:+ExplicitGCInvokesConcurrent
+    -XX:+HeapDumpOnOutOfMemoryError
+    -XX:+ExitOnOutOfMemoryError
+
+  log: |-
+    com.facebook.presto=INFO
+
+  node:
+    environment: production
+    dataDir: /home/presto/data
+
+  persistence:
+    enabled: true
+    accessMode: ReadWriteOnce
+    size: 10G
+    storageClass: ""
+
+  service:
+    annotations: {}
+    clusterIP: ""
+    externalIPs: []
+    loadBalancerIP: ""
+    loadBalancerSourceRanges: []
+    type: ClusterIP
+    port: 8080
+    nodePort: ""
+
+  resources: {}
+
+  nodeSelector: {}
+
+  tolerations: []
+
+  affinity: {}
+
+  podAnnotations: {}
+
+  updateStrategy:
+    type: RollingUpdate


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org