diff --git a/roles/container-engine/crictl/templates/crictl.yaml.j2 b/roles/container-engine/crictl/templates/crictl.yaml.j2
index fbf691f8a03260bd88f307ea80b4bde7f794a29d..b97dbefe64b87f60fd30375779e1c4032c7047a3 100644
--- a/roles/container-engine/crictl/templates/crictl.yaml.j2
+++ b/roles/container-engine/crictl/templates/crictl.yaml.j2
@@ -1,4 +1,4 @@
-runtime-endpoint: unix://{{ cri_socket }}
-image-endpoint: unix://{{ cri_socket }}
+runtime-endpoint: {{ cri_socket }}
+image-endpoint: {{ cri_socket }}
 timeout: 30
 debug: false
diff --git a/roles/container-engine/nerdctl/templates/nerdctl.toml.j2 b/roles/container-engine/nerdctl/templates/nerdctl.toml.j2
index c12d6832edf08d75e631713baa235282e5027c08..cd1b5f9e254acb8eef646abc68d22246ebf5b1d9 100644
--- a/roles/container-engine/nerdctl/templates/nerdctl.toml.j2
+++ b/roles/container-engine/nerdctl/templates/nerdctl.toml.j2
@@ -1,6 +1,6 @@
 debug             = false
 debug_full        = false
-address           = "unix://{{ cri_socket }}"
+address           = "{{ cri_socket }}"
 namespace         = "k8s.io"
 snapshotter       = "native"
 cni_path          = "/opt/cni/bin"
diff --git a/roles/download/templates/kubeadm-images.yaml.j2 b/roles/download/templates/kubeadm-images.yaml.j2
index c2068d2fc61f70383df7c1d11782c302381ceb11..3a9121defdb9d4289fe2bab129e93ab56037f077 100644
--- a/roles/download/templates/kubeadm-images.yaml.j2
+++ b/roles/download/templates/kubeadm-images.yaml.j2
@@ -1,9 +1,9 @@
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/v1beta3
 kind: InitConfiguration
 nodeRegistration:
   criSocket: {{ cri_socket }}
 ---
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/v1beta3
 kind: ClusterConfiguration
 imageRepository: {{ kube_image_repo }}
 kubernetesVersion: {{ kube_version }}
diff --git a/roles/kubernetes/control-plane/tasks/kubeadm-setup.yml b/roles/kubernetes/control-plane/tasks/kubeadm-setup.yml
index f339989c8a2c0ec7991c9285ba455227446af224..c960ad6432473a68aaabbfa1176251a0bc7cc4f9 100644
--- a/roles/kubernetes/control-plane/tasks/kubeadm-setup.yml
+++ b/roles/kubernetes/control-plane/tasks/kubeadm-setup.yml
@@ -73,9 +73,9 @@
     kubeadm_config_api_fqdn: "{{ apiserver_loadbalancer_domain_name|default('lb-apiserver.kubernetes.local') }}"
   when: loadbalancer_apiserver is defined
 
-- name: Set kubeadm api version to v1beta2
+- name: Set kubeadm api version to v1beta3
   set_fact:
-    kubeadmConfig_api_version: v1beta2
+    kubeadmConfig_api_version: v1beta3
 
 - name: kubeadm | Create kubeadm config
   template:
@@ -92,14 +92,14 @@
 
 - name: kubeadm | Push admission control config file
   template:
-    src: "admission-controls.{{ kubeadmConfig_api_version }}.yaml.j2"
+    src: "admission-controls.yaml.j2"
     dest: "{{ kube_config_dir }}/admission-controls/admission-controls.yaml"
     mode: 0640
   when: kube_apiserver_admission_control_config_file
 
 - name: kubeadm | Push admission control config files
   template:
-    src: "{{ item|lower }}.{{ kubeadmConfig_api_version }}.yaml.j2"
+    src: "{{ item|lower }}.yaml.j2"
     dest: "{{ kube_config_dir }}/admission-controls/{{ item|lower }}.yaml"
     mode: 0640
   when:
diff --git a/roles/kubernetes/control-plane/templates/admission-controls.v1beta2.yaml.j2 b/roles/kubernetes/control-plane/templates/admission-controls.yaml.j2
similarity index 100%
rename from roles/kubernetes/control-plane/templates/admission-controls.v1beta2.yaml.j2
rename to roles/kubernetes/control-plane/templates/admission-controls.yaml.j2
diff --git a/roles/kubernetes/control-plane/templates/eventratelimit.v1beta2.yaml.j2 b/roles/kubernetes/control-plane/templates/eventratelimit.yaml.j2
similarity index 100%
rename from roles/kubernetes/control-plane/templates/eventratelimit.v1beta2.yaml.j2
rename to roles/kubernetes/control-plane/templates/eventratelimit.yaml.j2
diff --git a/roles/kubernetes/control-plane/templates/kubeadm-config.v1beta2.yaml.j2 b/roles/kubernetes/control-plane/templates/kubeadm-config.v1beta3.yaml.j2
similarity index 99%
rename from roles/kubernetes/control-plane/templates/kubeadm-config.v1beta2.yaml.j2
rename to roles/kubernetes/control-plane/templates/kubeadm-config.v1beta3.yaml.j2
index ba1c5be394ac48a28e0fd763fa40927bddf9932f..9415593d0fe0828dcb19a3239ca0c9c948c0384d 100644
--- a/roles/kubernetes/control-plane/templates/kubeadm-config.v1beta2.yaml.j2
+++ b/roles/kubernetes/control-plane/templates/kubeadm-config.v1beta3.yaml.j2
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/v1beta3
 kind: InitConfiguration
 {% if kubeadm_token is defined %}
 bootstrapTokens:
@@ -29,7 +29,7 @@ nodeRegistration:
     cloud-provider: external
 {% endif %}
 ---
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/v1beta3
 kind: ClusterConfiguration
 clusterName: {{ cluster_name }}
 etcd:
@@ -86,7 +86,6 @@ etcd:
 {% endfor %}
 {% endif %}
 dns:
-  type: CoreDNS
   imageRepository: {{ coredns_image_repo | regex_replace('/coredns(?!/coredns).*$','') }}
   imageTag: {{ coredns_image_tag }}
 networking:
@@ -125,7 +124,9 @@ apiServer:
 {% if kube_apiserver_insecure_port|string != "0" %}
     insecure-bind-address: {{ kube_apiserver_insecure_bind_address }}
 {% endif %}
+{% if kube_version is version('v1.24.0','<') %}
     insecure-port: "{{ kube_apiserver_insecure_port }}"
+{% endif %}
 {% if kube_apiserver_enable_admission_plugins|length > 0 %}
     enable-admission-plugins: {{ kube_apiserver_enable_admission_plugins | join(',') }}
 {% endif %}
diff --git a/roles/kubernetes/control-plane/templates/kubeadm-controlplane.v1beta2.yaml.j2 b/roles/kubernetes/control-plane/templates/kubeadm-controlplane.v1beta3.yaml.j2
similarity index 95%
rename from roles/kubernetes/control-plane/templates/kubeadm-controlplane.v1beta2.yaml.j2
rename to roles/kubernetes/control-plane/templates/kubeadm-controlplane.v1beta3.yaml.j2
index f73a85fe98bf7ab06beebb0cdb62b45f11b199f8..7bf876c527870c6b46ceb3e4538767382d54f038 100644
--- a/roles/kubernetes/control-plane/templates/kubeadm-controlplane.v1beta2.yaml.j2
+++ b/roles/kubernetes/control-plane/templates/kubeadm-controlplane.v1beta3.yaml.j2
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/v1beta3
 kind: JoinConfiguration
 discovery:
   bootstrapToken:
@@ -25,4 +25,4 @@ nodeRegistration:
     key: node-role.kubernetes.io/master
 {% else %}
   taints: []
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/roles/kubernetes/kubeadm/tasks/main.yml b/roles/kubernetes/kubeadm/tasks/main.yml
index 15a20cbd7182269f90f1a72d386867f57adca85a..13497ffbbd3f863d742b5b1d5094f412dedd614a 100644
--- a/roles/kubernetes/kubeadm/tasks/main.yml
+++ b/roles/kubernetes/kubeadm/tasks/main.yml
@@ -54,7 +54,7 @@
 
 - name: Set kubeadm api version to v1beta2
   set_fact:
-    kubeadmConfig_api_version: v1beta2
+    kubeadmConfig_api_version: v1beta3
 
 - name: Create kubeadm client config
   template:
diff --git a/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta2.j2 b/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta3.j2
similarity index 96%
rename from roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta2.j2
rename to roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta3.j2
index 143a731ed597db2c7250a20af6c452d1a1d7b3a0..f9b31dc73c96c85d93f6d4ba3d2d1f8886884200 100644
--- a/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta2.j2
+++ b/roles/kubernetes/kubeadm/templates/kubeadm-client.conf.v1beta3.j2
@@ -1,5 +1,5 @@
 ---
-apiVersion: kubeadm.k8s.io/v1beta2
+apiVersion: kubeadm.k8s.io/v1beta3
 kind: JoinConfiguration
 discovery:
   bootstrapToken:
diff --git a/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2 b/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
index 5c8c32df65dfd511afb8d0769063bf5ce63fbb54..9397d7a2e06a6b7f7c9870b9d1455f19c4e90a0d 100644
--- a/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
+++ b/roles/kubernetes/node/templates/kubelet.env.v1beta1.j2
@@ -13,7 +13,7 @@ KUBELET_HOSTNAME="--hostname-override={{ kube_override_hostname }}"
 --kubeconfig={{ kube_config_dir }}/kubelet.conf \
 {# end kubeadm specific settings #}
 --container-runtime=remote \
---container-runtime-endpoint=unix://{{ cri_socket }} \
+--container-runtime-endpoint={{ cri_socket }} \
 --runtime-cgroups={{ kubelet_runtime_cgroups }} \
 {% endset %}
 
diff --git a/roles/kubespray-defaults/defaults/main.yaml b/roles/kubespray-defaults/defaults/main.yaml
index fa99b85bf7b64a70fd71163aabedce7b2034862e..d2b6ad239966485758da3492bcae844e079557ca 100644
--- a/roles/kubespray-defaults/defaults/main.yaml
+++ b/roles/kubespray-defaults/defaults/main.yaml
@@ -289,11 +289,11 @@ container_manager_on_localhost: "{{ container_manager }}"
 # CRI socket path
 cri_socket: >-
   {%- if container_manager == 'crio' -%}
-  /var/run/crio/crio.sock
+  unix:///var/run/crio/crio.sock
   {%- elif container_manager == 'containerd' -%}
-  /var/run/containerd/containerd.sock
+  unix:////var/run/containerd/containerd.sock
   {%- elif container_manager == 'docker' -%}
-  /var/run/cri-dockerd.sock
+  unix:///var/run/cri-dockerd.sock
   {%- endif -%}
 
 ## Uncomment this if you want to force overlay/overlay2 as docker storage driver