diff --git a/docs/netcheck.md b/docs/netcheck.md
index 1444fc16a4863d0638b5cb7df0390ebfa83381b5..a3c50afcff0d4ed561a1b230ec6ba35fff2a1084 100644
--- a/docs/netcheck.md
+++ b/docs/netcheck.md
@@ -25,8 +25,6 @@ There are related application specific variables:
 netchecker_port: 31081
 agent_report_interval: 15
 netcheck_namespace: default
-agent_img: "mirantis/k8s-netchecker-agent:v1.2.2"
-server_img: "mirantis/k8s-netchecker-server:v1.2.2"
 ```
 
 Note that the application verifies DNS resolve for FQDNs comprising only the
diff --git a/roles/download/defaults/main.yml b/roles/download/defaults/main.yml
index 396498ad1624d61d6d00c3ca51fafed24370189c..80ebb3f1248be79378b5c9e9b85dcd57fe0b9259 100644
--- a/roles/download/defaults/main.yml
+++ b/roles/download/defaults/main.yml
@@ -220,6 +220,9 @@ addon_resizer_version: "1.8.3"
 addon_resizer_image_repo: "k8s.gcr.io/addon-resizer"
 addon_resizer_image_tag: "{{ addon_resizer_version }}"
 
+dashboard_image_repo: "gcr.io/google_containers/kubernetes-dashboard-{{ image_arch }}"
+dashboard_image_tag: "v1.10.0"
+
 downloads:
   netcheck_server:
     enabled: "{{ deploy_netchecker }}"
@@ -626,6 +629,15 @@ downloads:
     groups:
       - kube-node
 
+  dashboard:
+    enabled: "{{ dashboard_enabled }}"
+    container: true
+    repo: "{{ dashboard_image_repo }}"
+    tag: "{{ dashboard_image_tag }}"
+    sha256: "{{ dashboard_digest_checksum|default(None) }}"
+    groups:
+      - kube-master
+
 download_defaults:
   container: false
   file: false
diff --git a/roles/kubernetes-apps/ansible/defaults/main.yml b/roles/kubernetes-apps/ansible/defaults/main.yml
index 6cdc126e4e360873fa261d9c3440af202dec5cc7..f5896903bd4bd87aab13243a31fcfc136c547d1f 100644
--- a/roles/kubernetes-apps/ansible/defaults/main.yml
+++ b/roles/kubernetes-apps/ansible/defaults/main.yml
@@ -1,8 +1,4 @@
 ---
-# Versions
-kubedns_version: 1.14.13
-kubednsautoscaler_version: 1.2.0
-
 # Limits for dnsmasq/kubedns apps
 dns_memory_limit: 170Mi
 dns_cpu_requests: 100m
@@ -10,27 +6,13 @@ dns_memory_requests: 70Mi
 dns_min_replicas: 2
 dns_nodes_per_replica: 10
 dns_cores_per_replica: 20
-dns_prevent_single_point_failure: "{{ 'true' if dns_min_replicas > 1 else 'false' }}"
-
-# Images
-image_arch: "{{host_architecture}}"
-
-kubedns_image_repo: "gcr.io/google_containers/k8s-dns-kube-dns-{{ image_arch }}"
-kubedns_image_tag: "{{ kubedns_version }}"
-dnsmasq_nanny_image_repo: "gcr.io/google_containers/k8s-dns-dnsmasq-nanny-{{ image_arch }}"
-dnsmasq_nanny_image_tag: "{{ kubedns_version }}"
-dnsmasq_sidecar_image_repo: "gcr.io/google_containers/k8s-dns-sidecar-{{ image_arch }}"
-dnsmasq_sidecar_image_tag: "{{ kubedns_version }}"
-dnsautoscaler_image_repo: "gcr.io/google_containers/cluster-proportional-autoscaler-{{ image_arch }}"
-dnsautoscaler_image_tag: "{{ kubednsautoscaler_version }}"
+dns_prevent_single_point_failure: "{{ 'true' if dns_min_replicas|int > 1 else 'false' }}"
 
 # Netchecker
 deploy_netchecker: false
 netchecker_port: 31081
 agent_report_interval: 15
 netcheck_namespace: default
-agent_img: "{{ netcheck_agent_image_repo }}:{{ netcheck_agent_image_tag }}"
-server_img: "{{ netcheck_server_image_repo }}:{{ netcheck_server_image_tag }}"
 
 # Limits for netchecker apps
 netchecker_agent_cpu_limit: 30m
@@ -50,8 +32,6 @@ netchecker_server_group: 1000
 
 # Dashboard
 dashboard_enabled: true
-dashboard_image_repo: gcr.io/google_containers/kubernetes-dashboard-{{ image_arch }}
-dashboard_image_tag: v1.10.0
 
 # Limits for dashboard
 dashboard_cpu_limit: 100m
diff --git a/roles/kubernetes-apps/ansible/templates/netchecker-agent-ds.yml.j2 b/roles/kubernetes-apps/ansible/templates/netchecker-agent-ds.yml.j2
index ef947dcba87425476d00e16938510fec1ebb7fb1..414e79abc0ba8f209a25073defe6db060c54363c 100644
--- a/roles/kubernetes-apps/ansible/templates/netchecker-agent-ds.yml.j2
+++ b/roles/kubernetes-apps/ansible/templates/netchecker-agent-ds.yml.j2
@@ -22,7 +22,7 @@ spec:
         beta.kubernetes.io/os: linux
       containers:
         - name: netchecker-agent
-          image: "{{ agent_img }}"
+          image: "{{ netcheck_agent_image_repo }}:{{ netcheck_agent_image_tag }}"
           env:
             - name: MY_POD_NAME
               valueFrom:
diff --git a/roles/kubernetes-apps/ansible/templates/netchecker-agent-hostnet-ds.yml.j2 b/roles/kubernetes-apps/ansible/templates/netchecker-agent-hostnet-ds.yml.j2
index 40d5036b46848efda43be6e7d32e8aaa2efd879b..79d801f6c7140f931b81b54b75b3fe0e2f3d5de0 100644
--- a/roles/kubernetes-apps/ansible/templates/netchecker-agent-hostnet-ds.yml.j2
+++ b/roles/kubernetes-apps/ansible/templates/netchecker-agent-hostnet-ds.yml.j2
@@ -26,7 +26,7 @@ spec:
           operator: Exists
       containers:
         - name: netchecker-agent
-          image: "{{ agent_img }}"
+          image: "{{ netcheck_agent_image_repo }}:{{ netcheck_agent_image_tag }}"
           env:
             - name: MY_POD_NAME
               valueFrom:
diff --git a/roles/kubernetes-apps/ansible/templates/netchecker-server-deployment.yml.j2 b/roles/kubernetes-apps/ansible/templates/netchecker-server-deployment.yml.j2
index 3060cf27ad9705cbeaf0d806fd7d630dab26d237..28327e124ea1c5db4915eb9c0465024835dbff3d 100644
--- a/roles/kubernetes-apps/ansible/templates/netchecker-server-deployment.yml.j2
+++ b/roles/kubernetes-apps/ansible/templates/netchecker-server-deployment.yml.j2
@@ -16,7 +16,7 @@ spec:
 {% endif %}
       containers:
         - name: netchecker-server
-          image: "{{ server_img }}"
+          image: "{{ netcheck_server_image_repo }}:{{ netcheck_server_image_tag }}"
           env:
           imagePullPolicy: {{ k8s_image_pull_policy }}
           resources: