diff --git a/roles/kubespray-defaults/defaults/main/main.yml b/roles/kubespray-defaults/defaults/main/main.yml
index 939027f87832d8a40d1c099e6ce74d72e05dc277..fc978e7d20be00bda9685586c53e5ea1b3aa0284 100644
--- a/roles/kubespray-defaults/defaults/main/main.yml
+++ b/roles/kubespray-defaults/defaults/main/main.yml
@@ -26,6 +26,10 @@ kube_version_min_required: v1.29.0
 ## Kube Proxy mode One of ['iptables', 'ipvs']
 kube_proxy_mode: ipvs
 
+# Kubeadm config api version
+# If kube_version is v1.31 or higher, it will be v1beta4, otherwise it will be v1beta3.
+kubeadm_config_api_version: "{{ 'v1beta4' if kube_version is version('v1.31.0', '>=') else 'v1beta3' }}"
+
 ## The timeout for init first control-plane
 kubeadm_init_timeout: 300s