diff --git a/inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml b/inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml index 6096f52a3c37a2b342285cd9c23a3945c0574c63..bee09d4a6fb33f89f8cd2781627aa85911e731b2 100644 --- a/inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml +++ b/inventory/sample/group_vars/k8s-cluster/k8s-cluster.yml @@ -154,6 +154,14 @@ k8s_image_pull_policy: IfNotPresent # audit log for kubernetes kubernetes_audit: false +# dynamic kubelet configuration +dynamic_kubelet_configuration: false + +# define kubelet config dir for dynamic kubelet +#kubelet_config_dir: +default_kubelet_config_dir: "{{ kube_config_dir }}/dynamic_kubelet_dir" +dynamic_kubelet_configuration_dir: "{{ kubelet_config_dir | default(default_kubelet_config_dir) }}" + # pod security policy (RBAC must be enabled either by having 'RBAC' in authorization_modes or kubeadm enabled) podsecuritypolicy_enabled: false diff --git a/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2 b/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2 index 447c382b6c8deae6d8e338253be6dbdd06149e9b..4c729e9ac88e4bcdcf8f070fd218989a596b140d 100644 --- a/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2 +++ b/roles/kubernetes/master/templates/kubeadm-config.v1alpha2.yaml.j2 @@ -150,3 +150,7 @@ nodeRegistration: {% if container_manager == 'crio' %} criSocket: /var/run/crio/crio.sock {% endif %} +{% if dynamic_kubelet_configuration %} +featureGates: + DynamicKubeletConfig: true +{% endif %} diff --git a/roles/kubernetes/node/tasks/main.yml b/roles/kubernetes/node/tasks/main.yml index 69302915fd15d498b43edfad5ea03acff75b7d82..03d08bb1ac14383c07edf2978f8d15f33fc6a65a 100644 --- a/roles/kubernetes/node/tasks/main.yml +++ b/roles/kubernetes/node/tasks/main.yml @@ -32,6 +32,13 @@ tags: - kubelet +- name: Make sure dynamic kubelet configuration directory is writeable + file: + path: "{{ dynamic_kubelet_configuration_dir }}" + mode: 0600 + state: directory + when: dynamic_kubelet_configuration + - name: Write kubelet config file (kubeadm) template: src: kubelet.kubeadm.env.j2 diff --git a/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2 b/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2 index 7597fd9ae44266ff0ae71b3dd4a7c4cfaa9b3f84..0424efdf9a305de94a6dcc91fcf1013f23f1939d 100644 --- a/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2 +++ b/roles/kubernetes/node/templates/kubelet.kubeadm.env.j2 @@ -48,6 +48,9 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}" {% else %} --fail-swap-on={{ kubelet_fail_swap_on|default(true)}} \ {% endif %} +{% if dynamic_kubelet_configuration %} +--dynamic-config-dir={{ dynamic_kubelet_configuration_dir }} \ +{% endif %} --runtime-cgroups={{ kubelet_runtime_cgroups }} --kubelet-cgroups={{ kubelet_kubelet_cgroups }} \ {% endset %} diff --git a/roles/kubespray-defaults/defaults/main.yaml b/roles/kubespray-defaults/defaults/main.yaml index e405c7a3f9e10fea1d824305bb6d699f5641cacb..24fef712595e06323a4c96bfb55aa8a2a4e6f8ef 100644 --- a/roles/kubespray-defaults/defaults/main.yaml +++ b/roles/kubespray-defaults/defaults/main.yaml @@ -136,6 +136,14 @@ kube_apiserver_port: 6443 kube_apiserver_insecure_bind_address: 127.0.0.1 kube_apiserver_insecure_port: 8080 +# dynamic kubelet configuration +dynamic_kubelet_configuration: false + +# define kubelet config dir for dynamic kubelet +#kubelet_config_dir: +default_kubelet_config_dir: "{{ kube_config_dir }}/dynamic_kubelet_dir" +dynamic_kubelet_configuration_dir: "{{ kubelet_config_dir | default(default_kubelet_config_dir) }}" + # Aggregator kube_api_aggregator_routing: false diff --git a/tests/files/gce_centos-weave-kubeadm.yml b/tests/files/gce_centos-weave-kubeadm.yml index 199fa437cd2b34e94d7ab153ee01410bb3918a34..24183eb6e017803b2034a33396f94d6a0efa35f0 100644 --- a/tests/files/gce_centos-weave-kubeadm.yml +++ b/tests/files/gce_centos-weave-kubeadm.yml @@ -10,5 +10,6 @@ kube_network_plugin: weave kubeadm_enabled: true deploy_netchecker: true kubernetes_audit: true +dynamic_kubelet_configuration: true kubedns_min_replicas: 1 cloud_provider: gce