From d57ddf0be805407239141b334c6425717aa1cf3f Mon Sep 17 00:00:00 2001
From: Cristian Calin <6627509+cristicalin@users.noreply.github.com>
Date: Tue, 7 Sep 2021 20:47:16 +0300
Subject: [PATCH] Feature DynamicKubeletConfig is deprecated in 1.22 and will
 not move to GA (#7938)

* Feature DynamicKubeletConfig is deprecated in 1.22 and will not move to GA

* Add check for dynamic_kubelet_configuration with kube >= 1.22
---
 .../sample/group_vars/k8s_cluster/k8s-cluster.yml      |  3 +++
 roles/kubernetes/node/tasks/kubelet.yml                |  4 +++-
 roles/kubernetes/node/templates/kubelet.env.v1beta1.j2 |  2 +-
 .../preinstall/tasks/0020-verify-settings.yml          | 10 ++++++++++
 tests/files/packet_oracle7-canal-ha.yml                |  1 -
 tests/files/packet_ubuntu16-canal-kubeadm-ha.yml       |  1 -
 6 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml b/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml
index 064082246..e1208fc54 100644
--- a/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml
+++ b/inventory/sample/group_vars/k8s_cluster/k8s-cluster.yml
@@ -211,6 +211,9 @@ k8s_image_pull_policy: IfNotPresent
 kubernetes_audit: false
 
 # dynamic kubelet configuration
+# Note: Feature DynamicKubeletConfig is deprecated in 1.22 and will not move to GA.
+# It is planned to be removed from Kubernetes in the version 1.23.
+# Please use alternative ways to update kubelet configuration.
 dynamic_kubelet_configuration: false
 
 # define kubelet config dir for dynamic kubelet
diff --git a/roles/kubernetes/node/tasks/kubelet.yml b/roles/kubernetes/node/tasks/kubelet.yml
index 6e0052db9..3dc747c8c 100644
--- a/roles/kubernetes/node/tasks/kubelet.yml
+++ b/roles/kubernetes/node/tasks/kubelet.yml
@@ -4,7 +4,9 @@
     path: "{{ dynamic_kubelet_configuration_dir }}"
     mode: 0600
     state: directory
-  when: dynamic_kubelet_configuration
+  when:
+    - dynamic_kubelet_configuration
+    - kube_version is version('v1.22.0', '<')
 
 - name: Set kubelet api version to v1beta1
   set_fact:
diff --git a/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2 b/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
index 3ca1ffdd7..d190b1f3a 100644
--- a/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
+++ b/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
@@ -18,7 +18,7 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}"
 --container-runtime=remote \
 --container-runtime-endpoint=unix://{{ cri_socket }} \
 {% endif %}
-{% if dynamic_kubelet_configuration %}
+{% if dynamic_kubelet_configuration and kube_version is version('v1.22.0', '<') %}
 --dynamic-config-dir={{ dynamic_kubelet_configuration_dir }} \
 {% endif %}
 --runtime-cgroups={{ kubelet_runtime_cgroups }} \
diff --git a/roles/kubernetes/preinstall/tasks/0020-verify-settings.yml b/roles/kubernetes/preinstall/tasks/0020-verify-settings.yml
index 72d1fbf73..3a059c00f 100644
--- a/roles/kubernetes/preinstall/tasks/0020-verify-settings.yml
+++ b/roles/kubernetes/preinstall/tasks/0020-verify-settings.yml
@@ -114,6 +114,16 @@
   when:
     - kube_version is version('v1.21.0', '>=')
 
+- name: Stop when dynamic_kubelet_configuration enabled for kubernetes >= 1.22
+  assert:
+    that: not dynamic_kubelet_configuration
+    msg: >
+      Feature DynamicKubeletConfig is deprecated in 1.22 and will not move to GA.
+      It is planned to be removed from Kubernetes in the version 1.23.
+      Please use alternative ways to update kubelet configuration.
+  when:
+    - kube_version is version('v1.22.0', '>=')
+
 # This assertion will fail on the safe side: One can indeed schedule more pods
 # on a node than the CIDR-range has space for when additional pods use the host
 # network namespace. It is impossible to ascertain the number of such pods at
diff --git a/tests/files/packet_oracle7-canal-ha.yml b/tests/files/packet_oracle7-canal-ha.yml
index 993bcf3dd..9369e1c4a 100644
--- a/tests/files/packet_oracle7-canal-ha.yml
+++ b/tests/files/packet_oracle7-canal-ha.yml
@@ -6,7 +6,6 @@ mode: ha
 # Kubespray settings
 calico_datastore: etcd
 kube_network_plugin: canal
-dynamic_kubelet_configuration: true
 deploy_netchecker: true
 dns_min_replicas: 1
 
diff --git a/tests/files/packet_ubuntu16-canal-kubeadm-ha.yml b/tests/files/packet_ubuntu16-canal-kubeadm-ha.yml
index 7b27b4bae..2e359ee5b 100644
--- a/tests/files/packet_ubuntu16-canal-kubeadm-ha.yml
+++ b/tests/files/packet_ubuntu16-canal-kubeadm-ha.yml
@@ -6,6 +6,5 @@ mode: ha
 # Kubespray settings
 calico_datastore: etcd
 kube_network_plugin: canal
-dynamic_kubelet_configuration: true
 deploy_netchecker: true
 dns_min_replicas: 1
-- 
GitLab