Feature/helm (#3296)

* fix inconsistent volume names and init container

* package names and spacing fix

* fix string comparison init container

could have also used double brackets

* fix prometheus stats provider class name

* add prometheus, kubectlImage and storageClassName

* add template for kubectl image:version

* add prometheus and storageClassName template logic

* add storageClassName template logic to zookeeper

* fix typo in zookeeper.yaml storageClass logic

* remove quotes from prometheus bool comparison
diff --git a/deploy/kubernetes/helm/templates/bookie.yaml b/deploy/kubernetes/helm/templates/bookie.yaml
index 15294e6..fecc7f1 100644
--- a/deploy/kubernetes/helm/templates/bookie.yaml
+++ b/deploy/kubernetes/helm/templates/bookie.yaml
@@ -42,7 +42,11 @@
   BK_zkServers: {{ .Release.Name }}-zookeeper:{{ .Values.zookeeper.clientPort }}
   BK_autoRecoveryDaemonEnabled: "true"
   # TODO: Issue 458: https://github.com/apache/bookkeeper/issues/458
-  #BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
+  {{- if eq .Values.bookkeeper.prometheus.enabled true }}
+  BK_enableStatistics: "true"
+  BK_enableTaskExecutionStats: "true"
+  BK_statsProviderClass: org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
+  {{- end }}
 ---
 
 ## BookKeeper servers need to access the local disks and the pods
@@ -107,8 +111,8 @@
             - -c
             - >-
               while true; do
-                status=$(echo ruok | nc {{ .Release.Name }}-zookeeper {{ .Values.zookeeper.clientPort }});
-                writestatus=$(echo isro | nc {{ .Release.Name }}-zookeeper {{ .Values.zookeeper.clientPort }})
+                status=$(echo ruok | nc -w 3 {{ .Release.Name }}-zookeeper {{ .Values.zookeeper.clientPort }});
+                writestatus=$(echo isro | nc -w 3 {{ .Release.Name }}-zookeeper {{ .Values.zookeeper.clientPort }})
                 if [ "$status" = "imok" ] && [ "$writestatus" = "rw" ]; then
                   break;
                 fi;
@@ -162,6 +166,9 @@
           component: {{ .Release.Name }}-bookkeeper
       spec:
         accessModes: [ "ReadWriteOnce" ]
+        {{- if ne .Values.bookkeeper.storageClassName "none" }}
+        storageClassName: {{ .Values.bookkeeper.storageClassName }}
+        {{- end }}
         resources:
           requests:
             storage: {{ $bookieJournalCapacity }}
@@ -173,6 +180,9 @@
           component: {{ .Release.Name }}-bookkeeper
       spec:
         accessModes: [ "ReadWriteOnce" ]
+        {{- if ne .Values.bookkeeper.storageClassName "none" }}
+        storageClassName: {{ .Values.bookkeeper.storageClassName }}
+        {{- end }}
         resources:
           requests:
             storage: {{ $bookieStorageCapacity }}
diff --git a/deploy/kubernetes/helm/templates/tools.yaml b/deploy/kubernetes/helm/templates/tools.yaml
index cc2dbeb..91f4f06 100644
--- a/deploy/kubernetes/helm/templates/tools.yaml
+++ b/deploy/kubernetes/helm/templates/tools.yaml
@@ -158,7 +158,7 @@
             - configMapRef:
                 name: {{ .Release.Name }}-tools-config
         - name: kubectl-proxy
-          image: heron/kubectl:latest
+          image: {{ .Values.kubectlImage }}
           command: ["sh", "-c"]
           args:
             - >
diff --git a/deploy/kubernetes/helm/templates/zookeeper.yaml b/deploy/kubernetes/helm/templates/zookeeper.yaml
index 3a0d842..4e4f5b2 100644
--- a/deploy/kubernetes/helm/templates/zookeeper.yaml
+++ b/deploy/kubernetes/helm/templates/zookeeper.yaml
@@ -146,6 +146,9 @@
       name: datadir
     spec:
       accessModes: [ "ReadWriteOnce" ]
+      {{- if ne .Values.zookeeper.storageClassName "none" }}
+      storageClassName: {{ .Values.zookeeper.storageClassName }}
+      {{- end }}
       resources:
         requests:
           storage: {{ .Values.zookeeper.storage }}
diff --git a/deploy/kubernetes/helm/values.yaml.template b/deploy/kubernetes/helm/values.yaml.template
index 5fc2a15..e934867 100644
--- a/deploy/kubernetes/helm/values.yaml.template
+++ b/deploy/kubernetes/helm/values.yaml.template
@@ -29,6 +29,7 @@
 
 # Heron image to use
 image: heron/heron:VERSION
+kubectlImage: heron/kubectl:latest
 
 # Heron image pull policy
 imagePullPolicy: IfNotPresent
@@ -68,6 +69,11 @@
 bookkeeper:
   image: apache/bookkeeper:4.7.3
   imagePullPolicy: IfNotPresent
+  
+  # set storageClassName to "none" to not use storageClassName
+  storageClassName: "none"
+  prometheus:
+    enabled: false
 
 zookeeper:
   enabled: true
@@ -98,3 +104,5 @@
     enabled: false
     runAsUser: 1000
     fsGroup: 1000
+  # set storageClassName to "none" to not use storageClassName
+  storageClassName: "none"