Add static and dynamic kubelet config support

Kubelet can be configured on startup now - just add new key/values in:
kubelet-static-config.yml.j2

Also kubelet static (startup) configuration can be overriden later
(dynamically) during its runtime - for more info read this:
https://kubernetes.io/docs/tasks/administer-cluster/reconfigure-kubelet/

Issue-ID: OOM-2199

Change-Id: Ia4790a4dfc04f0caed695df7bfd343253bd95bc0
Signed-off-by: Petr OspalĂ˝ <p.ospaly@partner.samsung.com>
diff --git a/ansible/roles/rke/defaults/main.yml b/ansible/roles/rke/defaults/main.yml
index 71c0c62..1077ee8 100644
--- a/ansible/roles/rke/defaults/main.yml
+++ b/ansible/roles/rke/defaults/main.yml
@@ -3,6 +3,10 @@
 rke_username: rke
 rke_bin_dir: /usr/local/bin
 kube_config_dir: "{{ ansible_env.HOME }}/.kube"
+kubernetes_config_dir: "/etc/kubernetes"
+kubelet:
+  static_config: "kubelet-static-config.yml"
+  runtime_request_timeout: "2m0s"
 cluster_config_dir: "{{ app_data_path }}/cluster"
 # Whether dashboard is exposed.
 rke_dashboard_exposed: true
diff --git a/ansible/roles/rke/tasks/rke_node.yml b/ansible/roles/rke/tasks/rke_node.yml
index 9ec9f07..2f59b18 100644
--- a/ansible/roles/rke/tasks/rke_node.yml
+++ b/ansible/roles/rke/tasks/rke_node.yml
@@ -9,3 +9,14 @@
   authorized_key:
     user: "{{ rke_username }}"
     key: "{{ hostvars[groups['infrastructure'][0]].cluster_public_key }}"
+
+- name: "Ensure that '{{ kubernetes_config_dir }}' is present"
+  file:
+    path: "{{ kubernetes_config_dir }}"
+    state: directory
+    mode: 0755
+
+- name: Prepare kubelet static config
+  template:
+    src: "kubelet-static-config.yml.j2"
+    dest: "{{ kubernetes_config_dir }}/{{ kubelet.static_config }}"
diff --git a/ansible/roles/rke/templates/cluster.yml.j2 b/ansible/roles/rke/templates/cluster.yml.j2
index 656c113..53e9a09 100644
--- a/ansible/roles/rke/templates/cluster.yml.j2
+++ b/ansible/roles/rke/templates/cluster.yml.j2
@@ -67,8 +67,11 @@
     extra_env: []
   kubelet:
     image: ""
-    extra_args: {}
-    extra_binds: []
+    extra_args:
+        dynamic-config-dir: "/kubelet-dynamic-config-dir"
+        config: "/kubelet-static-config.yml"
+    extra_binds:
+        - "{{ kubernetes_config_dir }}/{{ kubelet.static_config }}:/kubelet-static-config.yml:ro"
     extra_env: []
     cluster_domain: cluster.local
     infra_container_image: ""
diff --git a/ansible/roles/rke/templates/kubelet-static-config.yml.j2 b/ansible/roles/rke/templates/kubelet-static-config.yml.j2
new file mode 100644
index 0000000..71c2854
--- /dev/null
+++ b/ansible/roles/rke/templates/kubelet-static-config.yml.j2
@@ -0,0 +1,3 @@
+apiVersion: kubelet.config.k8s.io/v1beta1
+kind: KubeletConfiguration
+runtimeRequestTimeout: "{{ kubelet.runtime_request_timeout }}"