From 7b59ee52c7c6caa151f6f171c6f2e7d715212b1e Mon Sep 17 00:00:00 2001 From: Jonathan Meier Date: Wed, 21 Feb 2024 21:34:33 +0000 Subject: [PATCH] Disable ETCD Learner Mode ETCD Learner Mode went to Beta in k8s 1.29 and is now default enabled. When a new stacked etcd instance comes up, it joins the cluster in learner mode. The API Server cannot perform rpc calls against its etcd instance, and fails to come online. In theory the etcd instance should be promoted to a full member and this issue should be resolved, but for some reason this is not happening. While we investigate a root cause, we are disabling this new feature flag explicitly. --- pkg/providers/cloudstack/config/template-cp.yaml | 2 ++ pkg/providers/docker/config/template-cp.yaml | 2 ++ pkg/providers/snow/apibuilder.go | 1 + pkg/providers/snow/etcd.go | 4 ++++ pkg/providers/tinkerbell/config/template-cp.yaml | 2 ++ pkg/providers/vsphere/config/template-cp.yaml | 2 ++ 6 files changed, 13 insertions(+) diff --git a/pkg/providers/cloudstack/config/template-cp.yaml b/pkg/providers/cloudstack/config/template-cp.yaml index 8a691d3bd2e52..fe99455bcc31d 100644 --- a/pkg/providers/cloudstack/config/template-cp.yaml +++ b/pkg/providers/cloudstack/config/template-cp.yaml @@ -67,6 +67,8 @@ spec: name: {{.controlPlaneTemplateName}} kubeadmConfigSpec: clusterConfiguration: + featureGates: + EtcdLearnerMode: false imageRepository: {{.kubernetesRepository}} etcd: {{- if .externalEtcd }} diff --git a/pkg/providers/docker/config/template-cp.yaml b/pkg/providers/docker/config/template-cp.yaml index 5f7ba56fab51e..58f868f45106a 100644 --- a/pkg/providers/docker/config/template-cp.yaml +++ b/pkg/providers/docker/config/template-cp.yaml @@ -65,6 +65,8 @@ spec: namespace: {{.eksaSystemNamespace}} kubeadmConfigSpec: clusterConfiguration: + featureGates: + EtcdLearnerMode: false imageRepository: {{.kubernetesRepository}} etcd: {{- if .externalEtcd }} diff --git a/pkg/providers/snow/apibuilder.go b/pkg/providers/snow/apibuilder.go index 4a5773cbddbbe..f9c35d813c9cd 100644 --- a/pkg/providers/snow/apibuilder.go +++ b/pkg/providers/snow/apibuilder.go @@ -55,6 +55,7 @@ func KubeadmControlPlane(log logr.Logger, clusterSpec *cluster.Spec, snowMachine joinConfigKubeletExtraArg["provider-id"] = "aws-snow:////'{{ ds.meta_data.instance_id }}'" addStackedEtcdExtraArgsInKubeadmControlPlane(kcp, clusterSpec.Cluster.Spec.ExternalEtcdConfiguration) + disableEtcdLearnerMode(kcp) machineConfig := clusterSpec.SnowMachineConfig(clusterSpec.Cluster.Spec.ControlPlaneConfiguration.MachineGroupRef.Name) diff --git a/pkg/providers/snow/etcd.go b/pkg/providers/snow/etcd.go index 3cb43f2f11b74..04abbb9e629fa 100644 --- a/pkg/providers/snow/etcd.go +++ b/pkg/providers/snow/etcd.go @@ -15,3 +15,7 @@ func addStackedEtcdExtraArgsInKubeadmControlPlane(kcp *controlplanev1.KubeadmCon stackedEtcdExtraArgs["listen-peer-urls"] = "https://0.0.0.0:2380" stackedEtcdExtraArgs["listen-client-urls"] = "https://0.0.0.0:2379" } + +func disableEtcdLearnerMode(kcp *controlplanev1.KubeadmControlPlane) { + kcp.Spec.KubeadmConfigSpec.ClusterConfiguration.FeatureGates["EtcdLearnerMode"] = false +} diff --git a/pkg/providers/tinkerbell/config/template-cp.yaml b/pkg/providers/tinkerbell/config/template-cp.yaml index 4d251acbe005f..87c408b70e7c4 100644 --- a/pkg/providers/tinkerbell/config/template-cp.yaml +++ b/pkg/providers/tinkerbell/config/template-cp.yaml @@ -37,6 +37,8 @@ metadata: spec: kubeadmConfigSpec: clusterConfiguration: + featureGates: + EtcdLearnerMode: false imageRepository: {{.kubernetesRepository}} etcd: {{- if .externalEtcd }} diff --git a/pkg/providers/vsphere/config/template-cp.yaml b/pkg/providers/vsphere/config/template-cp.yaml index e64629fb0291c..37bbd395bae36 100644 --- a/pkg/providers/vsphere/config/template-cp.yaml +++ b/pkg/providers/vsphere/config/template-cp.yaml @@ -86,6 +86,8 @@ spec: name: {{.controlPlaneTemplateName}} kubeadmConfigSpec: clusterConfiguration: + featureGates: + EtcdLearnerMode: false imageRepository: {{.kubernetesRepository}} etcd: {{- if .externalEtcd }}