From 15ea3a9bba4b3b50b851b8612dfb3814819b2120 Mon Sep 17 00:00:00 2001 From: Ali Afsharzadeh Date: Wed, 30 Sep 2026 12:36:38 +0330 Subject: [PATCH] Upload kubeadm ClusterConfiguration before the control plane upgrade (#13594) kubeadm upgrade reads ClusterConfiguration only from the kubeadm-config ConfigMap, so it keeps the old etcd version. The etcd version then changes on all control plane nodes at the same time, and the control plane stops. Upload the ClusterConfiguration first. Then kubeadm upgrades etcd on one node at a time. Signed-off-by: Ali Afsharzadeh --- .../kubernetes/control-plane/tasks/kubeadm-upgrade.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/roles/kubernetes/control-plane/tasks/kubeadm-upgrade.yml b/roles/kubernetes/control-plane/tasks/kubeadm-upgrade.yml index a602c4895..bffeea566 100644 --- a/roles/kubernetes/control-plane/tasks/kubeadm-upgrade.yml +++ b/roles/kubernetes/control-plane/tasks/kubeadm-upgrade.yml @@ -30,6 +30,16 @@ - inventory_hostname == first_kube_control_plane - preflight_check_result.rc is defined and preflight_check_result.rc != 0 +# kubeadm upgrade reads ClusterConfiguration only from the kubeadm-config ConfigMap. +# Upload it first. Then kubeadm upgrades etcd on one node at a time. +- name: Kubeadm | Upload ClusterConfiguration before upgrade + command: "{{ bin_dir }}/kubeadm init phase upload-config kubeadm --config {{ kube_config_dir }}/kubeadm-config.yaml" + register: kubeadm_upload_cluster_config + retries: 3 + until: kubeadm_upload_cluster_config.rc == 0 + when: + - inventory_hostname == first_kube_control_plane + - name: Kubeadm | Upgrade first control plane node to {{ kube_version }} command: >- timeout -k 600s 600s