[VOL-1615] Create VOLTHA 2.0 Helm Charts

Squashed version of David Bainbridge's patches at commit:

 https://github.com/ciena/voltha-helm-charts/commit/120fb4b719e0492e6a0a24cc78d08b806e3698fa

Linted the README, fixed whitespace and incubator repo address

Change-Id: I7c5b1c3478450bbefbed09a75e9029e6371cae3a
diff --git a/voltha/.helmignore b/voltha/.helmignore
new file mode 100644
index 0000000..f0c1319
--- /dev/null
+++ b/voltha/.helmignore
@@ -0,0 +1,21 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
diff --git a/voltha/Chart.yaml b/voltha/Chart.yaml
new file mode 100644
index 0000000..5e199c8
--- /dev/null
+++ b/voltha/Chart.yaml
@@ -0,0 +1,21 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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.
+
+---
+name: voltha
+description: A Helm chart for Voltha based on K8S resources in Voltha project
+icon: https://guide.opencord.org/logos/cord.svg
+
+version: 2.0.0
+appVersion: 2.0.0
diff --git a/voltha/requirements.yaml b/voltha/requirements.yaml
new file mode 100644
index 0000000..a441106
--- /dev/null
+++ b/voltha/requirements.yaml
@@ -0,0 +1,28 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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.
+
+---
+dependencies:
+  - name: kafka
+    repository: https://kubernetes-charts-incubator.storage.googleapis.com
+    version: 0.15.3
+    condition: private_kafka_cluster
+  - name: etcd-operator
+    repository: https://kubernetes-charts.storage.googleapis.com
+    version: 0.8.3
+    condition: private_etcd_cluster
+  - name: voltha-etcd-cluster
+    repository: file://../voltha-etcd-cluster
+    version: 2.0.0
+    condition: private_etcd_cluster
diff --git a/voltha/templates/10-rbac.yaml b/voltha/templates/10-rbac.yaml
new file mode 100644
index 0000000..430f842
--- /dev/null
+++ b/voltha/templates/10-rbac.yaml
@@ -0,0 +1,72 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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: ServiceAccount
+metadata:
+  name: voltha-serviceaccount
+
+---
+apiVersion: rbac.authorization.k8s.io/v1beta1
+kind: ClusterRole
+metadata:
+  name: pod-reader
+rules:
+  - apiGroups: [""]
+    resources: ["pods", "nodes"]
+    verbs: ["get", "watch", "list"]
+
+---
+apiVersion: rbac.authorization.k8s.io/v1beta1
+kind: Role
+metadata:
+  name: voltha-role
+  namespace: {{ .Release.Namespace }}
+rules:
+  - apiGroups: [""]
+    resources: ["pods", "secrets", "namespaces", "endpoints"]
+    verbs: ["get"]
+  - apiGroups: [""]
+    resources: ["configmaps"]
+    verbs: ["get", "update", "create"]
+
+---
+apiVersion: rbac.authorization.k8s.io/v1beta1
+kind: RoleBinding
+metadata:
+  name: voltha-role-nisa-binding
+  namespace: {{ .Release.Namespace }}
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: Role
+  name: voltha-role
+subjects:
+  - kind: ServiceAccount
+    name: voltha-serviceaccount
+    namespace: {{ .Release.Namespace }}
+
+---
+apiVersion: rbac.authorization.k8s.io/v1beta1
+kind: ClusterRoleBinding
+metadata:
+  name: voltha-clusterrole-nisa-binding
+roleRef:
+  apiGroup: rbac.authorization.k8s.io
+  kind: ClusterRole
+  name: pod-reader
+subjects:
+  - kind: ServiceAccount
+    name: voltha-serviceaccount
+    namespace: {{ .Release.Namespace }}
diff --git a/voltha/templates/affinity-router.yaml b/voltha/templates/affinity-router.yaml
new file mode 100644
index 0000000..ab8b4b2
--- /dev/null
+++ b/voltha/templates/affinity-router.yaml
@@ -0,0 +1,71 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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: Service
+metadata:
+  name: voltha-api
+  serviceAccountName: {{ .Values.serviceaccount }}
+spec:
+  serviceAccountName: {{ .Values.serviceaccount }}
+  ports:
+    - name: grpc
+      port: 55555
+      targetPort: 55555
+  selector:
+    app: voltha-api-server
+
+---
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: voltha-api-server
+  serviceAccountName: {{ .Values.serviceaccount }}
+spec:
+  replicas: {{ .Values.replicas.afrouter }}
+  template:
+    metadata:
+      labels:
+        app: voltha-api-server
+      annotations:
+        cni: "calico"
+    spec:
+      serviceAccountName: {{ .Values.serviceaccount }}
+      containers:
+      - name: arouter
+        image: {{ .Values.registry }}{{ .Values.images.afrouter.repository }}:{{ tpl .Values.images.afrouter.tag . }}
+        imagePullPolicy: {{ .Values.images.afrouter.pullPolicy }}
+        volumeMounts:
+        - name: config-volume
+          mountPath: /app/config
+        ports:
+        - containerPort: 55555
+        env:
+        - name: POD_NAMESPACE
+          value: {{ .Release.Namespace }}
+        command: ["/app/afrouter"]
+        args: ["-config", "/app/config/arouter.voltha.json"]
+      - name: arouterd
+        env:
+        - name: POD_NAMESPACE
+          value: {{ .Release.Namespace }}
+        image: {{ .Values.registry }}{{ .Values.images.afrouterd.repository }}:{{ tpl .Values.images.afrouterd.tag . }}
+        imagePullPolicy: {{ .Values.images.afrouterd.pullPolicy }}
+        command: ["/app/arouterd"]
+      restartPolicy: Always
+      volumes:
+        - name: config-volume
+          configMap:
+            name: afrouter-config
diff --git a/voltha/templates/afrouter-config.yaml b/voltha/templates/afrouter-config.yaml
new file mode 100644
index 0000000..a29c6e3
--- /dev/null
+++ b/voltha/templates/afrouter-config.yaml
@@ -0,0 +1,201 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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.
+
+---
+{{- $rw_count := mul .Values.replicas.rw_core 2 | int }}
+{{- $ro_count := .Values.replicas.ro_core | int }}
+apiVersion: v1
+data:
+  arouter.voltha.json: |
+      {
+        "servers": [
+          {
+            "name": "grpc_command",
+            "port": 55555,
+            "address": "",
+            "type": "grpc",
+            "routers": [
+              {
+                "_TODO": "Suport a router list, remove the package and service from the router",
+                "package": "voltha",
+                "service": "VolthaService",
+                "router": "vcore"
+              }
+            ]
+          }
+        ],
+        "routers": [
+          {
+            "name": "vcore",
+            "package": "voltha",
+            "service": "VolthaService",
+            "routes": [
+              {
+                "name": "dev_manager",
+                "proto_descriptor": "voltha.pb",
+                "type": "rpc_affinity_message",
+                "association": "round_robin",
+                "routing_field": "id",
+                "backend_cluster": "vcore",
+                "_COMMENT": "Methods here MUST be specified above, this overrides thier default beahvior",
+                "methods": [
+                  "CreateDevice",
+                  "GetCoreInstance",
+                  "EnableLogicalDevicePort",
+                  "DisableLogicalDevicePort",
+                  "EnableDevice",
+                  "DisableDevice",
+                  "RebootDevice",
+                  "DeleteDevice",
+                  "DownloadImage",
+                  "CancelImageDownload",
+                  "ActivateImageUpdate",
+                  "RevertImageUpdate",
+                  "UpdateDevicePmConfigs",
+                  "CreateAlarmFilter",
+                  "UpdateAlarmFilter",
+                  "DeleteAlarmFilter",
+                  "SelfTest"
+                ],
+                "nb_binding_methods": [
+                  "CreateDevice"
+                ],
+                "_TODO": "Overrides not implemented yet, config ignored",
+                "overrides": [ ]
+              },
+              {
+                "name": "read_only",
+                "type": "round_robin",
+                "association": "round_robin",
+                "backend_cluster": "ro_vcore",
+                "methods": [
+                  "ListDevicePorts",
+                  "ListDevicePmConfigs",
+                  "GetImages",
+                  "GetImageDownloadStatus",
+                  "GetImageDownload",
+                  "ListImageDownloads",
+                  "ListDeviceFlows",
+                  "ListDeviceFlowGroups",
+                  "ListLogicalDeviceFlows",
+                  "ListLogicalDeviceFlowGroups",
+                  "ListDevices",
+                  "GetDevice",
+                  "ListLogicalDevices",
+                  "GetLogicalDevices",
+                  "GetDeviceType",
+                  "GetDeviceGroup",
+                  "GetLogicalDevice",
+                  "GetAlarmFilter",
+                  "ListLogicalDevicePorts",
+                  "GetLogicalDevicePort",
+                  "ListAdapters",
+                  "GetVoltha"
+                ]
+              },
+              {
+                "name": "dev_manager_ofagent",
+                "type": "binding",
+                "_association": "round_robin",
+                "binding": {
+                  "type": "header",
+                  "field": "voltha_backend_name",
+                  "method": "Subscribe",
+                  "association": "round_robin"
+                },
+                "backend_cluster": "vcore",
+                "methods": [
+                  "StreamPacketsOut",
+                  "ReceivePacketsIn",
+                  "ReceiveChangeEvents",
+                  "Subscribe",
+                  "UpdateLogicalDeviceFlowTable",
+                  "UpdateLogicalDeviceFlowGroupTable",
+                  "GetLogicalDevice",
+                  "GetLogicalDevicePort",
+                  "EnableLogicalDevicePort",
+                  "DisableLogicalDevicePort",
+                  "ListLogicalDevices",
+                  "ListLogicalDeviceFlows",
+                  "ListLogicalDeviceFlowGroups",
+                  "ListLogicalDevicePorts"
+                ],
+                "_TODO": "Overrides not implemented yet, config ignored",
+                "overrides": [ ]
+              }
+            ]
+          }
+        ],
+        "backend_clusters": [
+          {
+            "name": "vcore",
+            "backends": [
+{{- range $i, $e := until $rw_count }}
+{{- $core_idx := add $i 1 }}
+              {
+                "name": "vcore{{ $core_idx }}",
+                "type": "active_active",
+                "association": {
+                  "strategy": "serial_number",
+                  "location": "header",
+                  "_TODO": "The key below needs to be implemented, currently hard coded",
+                  "key": "voltha_serial_number"
+                },
+                "connections": [
+                  {
+                    "name": "vcore{{ $core_idx }}1",
+                    "addr": "",
+                    "port": ""
+                  },
+                  {
+                    "name": "vcore{{ $core_idx }}2",
+                    "addr": "",
+                    "port": ""
+                  }
+                ]
+              }{{ if lt $core_idx $rw_count }},{{ end }}
+{{- end}}
+            ]
+          },
+          {
+            "name": "ro_vcore",
+            "backends": [
+{{- range $i, $e := until $ro_count }}
+{{- $core_idx := add $i 1 }}
+              {
+                "name": "ro_vcore{{ $core_idx }}",
+                "type": "server",
+                "connections": [
+                  {
+                    "name": "ro_vcore{{ $core_idx }}1",
+                    "addr": "",
+                    "port": ""
+                  }
+                ]
+              }{{ if lt $core_idx $ro_count }},{{ end }}
+{{- end}}
+            ]
+          }
+        ],
+        "api": {
+          "_comment": "If this isn't defined then no api is available for dynamic configuration and queries",
+          "address": "",
+          "port": 55554
+        }
+      }
+
+kind: ConfigMap
+metadata:
+  name: afrouter-config
+  serviceAccountName: {{ .Values.serviceaccount }}
diff --git a/voltha/templates/cli.yaml b/voltha/templates/cli.yaml
new file mode 100644
index 0000000..244c4ca
--- /dev/null
+++ b/voltha/templates/cli.yaml
@@ -0,0 +1,64 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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 .Values.replicas.cli }}
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: voltha-cli
+  serviceAccountName: {{ .Values.serviceaccount }}
+  labels:
+    name: vcli
+spec:
+  serviceAccountName: {{ .Values.serviceaccount }}
+  ports:
+    - name: ssh
+      port: 5022
+      targetPort: 22
+  selector:
+    app: vcli
+
+---
+apiVersion: apps/v1beta1
+kind: Deployment
+metadata:
+  name: voltha-cli-server
+  serviceAccountName: {{ .Values.serviceaccount }}
+spec:
+  replicas: {{ .Values.replicas.cli }}
+  template:
+    metadata:
+      labels:
+        app: vcli
+      annotations:
+        cni: "calico"
+    spec:
+      serviceAccountName: {{ .Values.serviceaccount }}
+      containers:
+        - name: vcli
+          image: {{ .Values.registry }}{{ .Values.images.cli.repository }}:{{ tpl .Values.images.cli.tag . }}
+          imagePullPolicy: {{ .Values.images.cli.pullPolicy }}
+          env:
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+          args:
+            - "/voltha/python/cli/setup.sh"
+            - "-g voltha-api.{{ .Release.Namespace }}.svc.cluster.local:55555"
+          ports:
+            - containerPort: 22
+              name: ssh-port
+{{- end}}
diff --git a/voltha/templates/ofagent.yaml b/voltha/templates/ofagent.yaml
new file mode 100644
index 0000000..2dd9e74
--- /dev/null
+++ b/voltha/templates/ofagent.yaml
@@ -0,0 +1,43 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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/v1beta1
+kind: Deployment
+metadata:
+  name: ofagent
+  serviceAccountName: {{ .Values.serviceaccount }}
+spec:
+  replicas: {{ .Values.replicas.ofagent }}
+  template:
+    metadata:
+      labels:
+        app: ofagent
+      annotations:
+        cni: "calico"
+    spec:
+      terminationGracePeriodSeconds: 10
+      serviceAccountName: {{ .Values.serviceaccount }}
+      containers:
+      - name: ofagent
+        image: {{ .Values.registry }}{{ .Values.images.ofagent.repository }}:{{ tpl .Values.images.ofagent.tag . }}
+        imagePullPolicy: {{ .Values.images.ofagent.pullPolicy }}
+        env:
+        - name: CONTROLLER_SERVICE
+          value: "{{ .Values.services.controller.service }}:{{ .Values.services.controller.port }}"
+        args:
+        - "/ofagent/ofagent/main.py"
+        - "-v"
+        - "--controller=$(CONTROLLER_SERVICE)"
+        - "--grpc-endpoint=voltha-api.{{ .Release.Namespace }}.svc.cluster.local:55555"
diff --git a/voltha/templates/ro-core.yaml b/voltha/templates/ro-core.yaml
new file mode 100644
index 0000000..8225e00
--- /dev/null
+++ b/voltha/templates/ro-core.yaml
@@ -0,0 +1,73 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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: Deployment
+metadata:
+  name: ro-core
+  serviceAccountName: {{ .Values.serviceaccount }}
+spec:
+  replicas: {{ .Values.replicas.ro_core }}
+  selector:
+    matchLabels:
+      app: ro-core
+  template:
+    metadata:
+      labels:
+        app: ro-core
+      annotations:
+        cni: "calico"
+    spec:
+      affinity:
+        podAntiAffinity:
+          preferredDuringSchedulingIgnoredDuringExecution:
+          - weight: 100
+            podAffinityTerm:
+              labelSelector:
+                matchExpressions:
+                - key: app
+                  operator: In
+                  values:
+                  - ro-core
+              topologyKey: "kubernetes.io/hostname"
+      serviceAccountName: {{ .Values.serviceaccount }}
+      containers:
+        - name: voltha
+          image: {{ .Values.registry }}{{ .Values.images.ro_core.repository }}:{{ tpl .Values.images.ro_core.tag . }}
+          imagePullPolicy: {{ .Values.images.ro_core.pullPolicy }}
+          env:
+            - name: NAMESPACE
+              value: {{ quote .Release.Namespace }}
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+            - name: ETCD_SERVICE
+              value: {{ quote .Values.services.etcd.service }}
+            - name: ETCD_SERVICE_PORT
+              value: {{ quote .Values.services.etcd.port }}
+          args:
+            - "/app/ro_core"
+            - "-kv_store_type=etcd"
+            - "-kv_store_host=$(ETCD_SERVICE)"
+            - "-kv_store_port=$(ETCD_SERVICE_PORT)"
+            - "-grpc_host=$(POD_IP)"
+            - "-grpc_port=50057"
+            - "-banner=true"
+            - "-ro_core_topic=rocore"
+            - "-log_level=0"
+          ports:
+            - containerPort: 50057
+              name: grpc-port
diff --git a/voltha/templates/rw-core.yaml b/voltha/templates/rw-core.yaml
new file mode 100644
index 0000000..4dd0e06
--- /dev/null
+++ b/voltha/templates/rw-core.yaml
@@ -0,0 +1,95 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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.
+
+{{- $root := . -}}
+{{- $count := mul .Values.replicas.rw_core 2 | int }}
+{{- $tag := tpl .Values.images.rw_core.tag . }}
+{{- range $i, $e := until $count }}
+{{- $core_idx := add $i 1 }}
+{{- $pair_idx := div $i 2 | int }}
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: rw-core{{ $core_idx }}
+  serviceAccountName: {{ $root.Values.serviceaccount }}
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: rw-core
+  template:
+    metadata:
+      labels:
+        app: rw-core
+        affinity-index: anti-affinity-{{ $pair_idx }}
+      annotations:
+        cni: "calico"
+    spec:
+      affinity:
+        podAntiAffinity:
+          requiredDuringSchedulingIgnoredDuringExecution:
+          - labelSelector:
+              matchExpressions:
+              - key: affinity-index
+                operator: In
+                values:
+                - anti-affinity-{{ $pair_idx }}
+            topologyKey: "kubernetes.io/hostname"
+      serviceAccountName: {{ $root.Values.serviceaccount }}
+      containers:
+        - name: voltha
+          image: {{ $root.Values.registry }}{{ $root.Values.images.rw_core.repository }}:{{ $tag }}
+          imagePullPolicy: {{ $root.Values.images.rw_core.pullPolicy }}
+          env:
+            - name: NAMESPACE
+              value: {{ quote $root.Release.Namespace }}
+            - name: POD_IP
+              valueFrom:
+                fieldRef:
+                  fieldPath: status.podIP
+            - name: ETCD_SERVICE
+              value: {{ quote $root.Values.services.etcd.service }}
+            - name: ETCD_SERVICE_PORT
+              value: {{ quote $root.Values.services.etcd.port }}
+            - name: ADAPTER_KAFKA_SERVICE
+              value: {{ quote $root.Values.services.kafka.adapter.service }}
+            - name: ADAPTER_KAFKA_SERVICE_PORT
+              value: {{ quote $root.Values.services.kafka.adapter.port }}
+            - name: CLUSTER_KAFKA_SERVICE
+              value: {{ quote $root.Values.services.kafka.cluster.service }}
+            - name: CLUSTER_KAFKA_SERVICE_PORT
+              value: {{ quote $root.Values.services.kafka.cluster.port }}
+          args:
+            - "/app/rw_core"
+            - "-kv_store_type=etcd"
+            - "-kv_store_host=$(ETCD_SERVICE)"
+            - "-kv_store_port=$(ETCD_SERVICE_PORT)"
+            - "-grpc_host=$(POD_IP)"
+            - "-grpc_port=50057"
+            - "-banner=true"
+            - "-kafka_adapter_host=$(ADAPTER_KAFKA_SERVICE)"
+            - "-kafka_adapter_port=$(ADAPTER_KAFKA_SERVICE_PORT)"
+            - "-kafka_cluster_host=$(CLUSTER_KAFKA_SERVICE)"
+            - "-kafka_cluster_port=$(CLUSTER_KAFKA_SERVICE_PORT)"
+            - "-rw_core_topic=rwcore"
+            - "-kv_store_data_prefix=service/voltha"
+            - "-in_competing_mode=true"
+            - "-timeout_long_request=8000"
+            - "-timeout_request=6000"
+            - "-log_level=4"
+          ports:
+            - containerPort: 50057
+              name: grpc-port
+{{end}}
diff --git a/voltha/values.yaml b/voltha/values.yaml
new file mode 100644
index 0000000..27da6d9
--- /dev/null
+++ b/voltha/values.yaml
@@ -0,0 +1,99 @@
+# Copyright 2019-present Open Networking Foundation
+#
+# Licensed 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.
+
+---
+registry: ''
+serviceaccount: voltha-serviceaccount
+private_etcd_cluster: true
+private_kafka_cluster: true
+
+# Configure the Kafka sub-chart (if it is used)
+kafka:
+  configurationOverrides:
+    "offsets.topic.replication.factor": 1
+    "log.retention.hours": 4
+    "log.message.timestamp.type": "LogAppendTime"
+  persistence:
+    enabled: false
+  zookeeper:
+    replicaCount: 1
+    persistence:
+      enabled: false
+  replicas: 1
+
+# Define connectivity to services on which VOLTHA depends
+services:
+  kafka:
+    adapter:
+      service: voltha-kafka.voltha.svc.cluster.local
+      port: 9092
+    cluster:
+      service: voltha-kafka.voltha.svc.cluster.local
+      port: 9092
+
+  # Define connectivity to etcd
+  etcd:
+    service: voltha-etcd-cluster-client.voltha.svc.cluster.local
+    port: 2379
+
+  # Define controller to which to connect
+  controller:
+    service: onos-openflow.default.svc.cluster.local
+    port: 6653
+
+# Define the recplica count for everything
+replicas:
+  # For R/W cores the templates translate the number of replicas
+  # into the number of RW core pairs with two pods per pair
+  rw_core: 1
+
+  # For everything else replicas are replicas
+  cli: 1
+  ofagent: 1
+  ro_core: 1
+  afrouter: 1
+  afrouterd: 1
+
+# Define Docker images to be used
+images:
+  cli:
+    repository: 'volthacore/voltha-cli'
+    tag: '{{ .Chart.AppVersion }}'
+    pullPolicy: 'Always'
+
+  ofagent:
+    repository: 'volthacore/voltha-ofagent'
+    tag: '{{ .Chart.AppVersion }}'
+    pullPolicy: 'Always'
+
+  ro_core:
+    repository: 'volthacore/voltha-ro-core'
+    tag: '{{ .Chart.AppVersion }}'
+    pullPolicy: 'Always'
+
+  rw_core:
+    repository: 'volthacore/voltha-rw-core'
+    tag: '{{ .Chart.AppVersion }}'
+    pullPolicy: 'Always'
+
+  afrouter:
+    repository: 'volthacore/voltha-afrouter'
+    tag: '{{ .Chart.AppVersion }}'
+    pullPolicy: 'Always'
+
+  afrouterd:
+    repository: 'volthacore/voltha-afrouterd'
+    tag: '{{ .Chart.AppVersion }}'
+    pullPolicy: 'Always'
+    restartPolicy: 'Always'