diff --git a/inventory/group_vars/k8s-cluster.yml b/inventory/group_vars/k8s-cluster.yml
index cbd922c632d8943635a6f4a220360227b2e93d0d..066e429edfbbbcc114871c00e4140dd7b0958e5d 100644
--- a/inventory/group_vars/k8s-cluster.yml
+++ b/inventory/group_vars/k8s-cluster.yml
@@ -135,3 +135,6 @@ k8s_image_pull_policy: IfNotPresent
 
 # Monitoring apps for k8s
 efk_enabled: false
+
+# Helm deployment
+helm_enabled: false
diff --git a/roles/download/defaults/main.yml b/roles/download/defaults/main.yml
index 23e87bbbd3047442a377e4dbdebfc6f4530b24c3..00cfdc16d580567d54fa11d22639c9f838e0f487 100644
--- a/roles/download/defaults/main.yml
+++ b/roles/download/defaults/main.yml
@@ -92,6 +92,13 @@ kibana_version: "v4.6.1"
 kibana_image_repo: "gcr.io/google_containers/kibana"
 kibana_image_tag: "{{ kibana_version }}"
 
+helm_version: "v2.2.2"
+helm_image_repo: "lachlanevenson/k8s-helm"
+helm_image_tag: "{{ helm_version }}"
+tiller_version: "{{ helm_version }}"
+tiller_image_repo: "gcr.io/kubernetes-helm/tiller"
+tiller_image_tag: "{{ tiller_version }}"
+
 downloads:
   netcheck_server:
     container: true
@@ -221,6 +228,16 @@ downloads:
     repo: "{{ kibana_image_repo }}"
     tag: "{{ kibana_image_tag }}"
     sha256: "{{ kibana_digest_checksum|default(None) }}"
+  helm:
+    container: true
+    repo: "{{ helm_image_repo }}"
+    tag: "{{ helm_image_tag }}"
+    sha256: "{{ helm_digest_checksum|default(None) }}"
+  tiller:
+    container: true
+    repo: "{{ tiller_image_repo }}"
+    tag: "{{ tiller_image_tag }}"
+    sha256: "{{ tiller_digest_checksum|default(None) }}"
 
 download:
   container: "{{ file.container|default('false') }}"
diff --git a/roles/kubernetes-apps/helm/defaults/main.yml b/roles/kubernetes-apps/helm/defaults/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..ae139556d68426ee87683463b783d1c7298ab0c5
--- /dev/null
+++ b/roles/kubernetes-apps/helm/defaults/main.yml
@@ -0,0 +1 @@
+helm_enabled: false
diff --git a/roles/kubernetes-apps/helm/meta/main.yml b/roles/kubernetes-apps/helm/meta/main.yml
new file mode 100644
index 0000000000000000000000000000000000000000..8054392507ec70c422ed29c9a8e65589a5092ac1
--- /dev/null
+++ b/roles/kubernetes-apps/helm/meta/main.yml
@@ -0,0 +1,5 @@
+dependencies:
+  - role: download
+    file: "{{ downloads.helm }}"
+  - role: download
+    file: "{{ downloads.tiller }}"
diff --git a/roles/kubernetes-apps/helm/tasks/main.yml b/roles/kubernetes-apps/helm/tasks/main.yml
index edf2509d50143d0b027f31d919f5e60008a4f344..551b0375eccfc2c195b7da4ad980eeaf77af8592 100644
--- a/roles/kubernetes-apps/helm/tasks/main.yml
+++ b/roles/kubernetes-apps/helm/tasks/main.yml
@@ -1,3 +1,16 @@
 ---
-- debug:
-    msg: "No helm charts"
+- name: Helm | Set up helm launcher
+  template:
+    src: helm-container.j2
+    dest: "{{ bin_dir }}/helm"
+    owner: root
+    mode: 0755
+  register: helm_container
+
+- name: Helm | Install/upgrade helm
+  command: "helm init --upgrade --tiller-image={{ tiller_image_repo }}:{{ tiller_image_tag }}"
+  when: helm_container.changed
+
+- name: Helm | Set up bash completion
+  shell: "umask 022 && {{ bin_dir }}/helm completion >/etc/bash_completion.d/helm.sh"
+  when: helm_container.changed
diff --git a/roles/kubernetes-apps/helm/templates/helm-container.j2 b/roles/kubernetes-apps/helm/templates/helm-container.j2
new file mode 100644
index 0000000000000000000000000000000000000000..598daa73a0b3c15e70b217341dbc9c25e6c37551
--- /dev/null
+++ b/roles/kubernetes-apps/helm/templates/helm-container.j2
@@ -0,0 +1,10 @@
+#!/bin/bash
+{{ docker_bin_dir }}/docker run --rm \
+  --net=host \
+  --name=helm \
+  -v /etc/ssl:/etc/ssl:ro \
+  {% for dir in ssl_ca_dirs -%}
+  -v {{ dir }}:{{ dir }}:ro \
+  {% endfor -%}
+  {{ helm_image_repo }}:{{ helm_image_tag}} \
+  "$@"
diff --git a/roles/kubernetes-apps/meta/main.yml b/roles/kubernetes-apps/meta/main.yml
index f6df2626c2b12b8c831dfcfaac4994fda9910385..dfaf6261d9cbc45a207b407d84c9beda29602681 100644
--- a/roles/kubernetes-apps/meta/main.yml
+++ b/roles/kubernetes-apps/meta/main.yml
@@ -17,3 +17,6 @@ dependencies:
   - role: kubernetes-apps/efk
     when: efk_enabled
     tags: [ apps, efk ]
+  - role: kubernetes-apps/helm
+    when: helm_enabled
+    tags: [ apps, helm ]