From 29148f61ac04d2318470a043e4bf04b737039a47 Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Mon, 16 May 2022 17:38:04 +0300 Subject: [PATCH] kubeadm: add serializable health checks for etcd probes Use the etcd 3.5.3+ HTTP(s) endpoint "/health?serializable=true", to allow the kubelet liveness and starup probes in the kubeadm generated etcd.yaml (static Pod) to track individual member health instead of tracking the whole etcd cluster health. --- cmd/kubeadm/app/phases/etcd/local.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cmd/kubeadm/app/phases/etcd/local.go b/cmd/kubeadm/app/phases/etcd/local.go index 4e077fe3534..0099f19959a 100644 --- a/cmd/kubeadm/app/phases/etcd/local.go +++ b/cmd/kubeadm/app/phases/etcd/local.go @@ -179,6 +179,7 @@ func CreateStackedEtcdStaticPodManifestFile(client clientset.Interface, manifest // GetEtcdPodSpec returns the etcd static Pod actualized to the context of the current configuration // NB. GetEtcdPodSpec methods holds the information about how kubeadm creates etcd static pod manifests. func GetEtcdPodSpec(cfg *kubeadmapi.ClusterConfiguration, endpoint *kubeadmapi.APIEndpoint, nodeName string, initialCluster []etcdutil.Member) v1.Pod { + const etcdHealthEndpoint = "/health?serializable=true" pathType := v1.HostPathDirectoryOrCreate etcdMounts := map[string]v1.Volume{ etcdVolumeName: staticpodutil.NewVolume(etcdVolumeName, cfg.Etcd.Local.DataDir, &pathType), @@ -203,8 +204,8 @@ func GetEtcdPodSpec(cfg *kubeadmapi.ClusterConfiguration, endpoint *kubeadmapi.A v1.ResourceMemory: resource.MustParse("100Mi"), }, }, - LivenessProbe: staticpodutil.LivenessProbe(probeHostname, "/health", probePort, probeScheme), - StartupProbe: staticpodutil.StartupProbe(probeHostname, "/health", probePort, probeScheme, cfg.APIServer.TimeoutForControlPlane), + LivenessProbe: staticpodutil.LivenessProbe(probeHostname, etcdHealthEndpoint, probePort, probeScheme), + StartupProbe: staticpodutil.StartupProbe(probeHostname, etcdHealthEndpoint, probePort, probeScheme, cfg.APIServer.TimeoutForControlPlane), }, etcdMounts, // etcd will listen on the advertise address of the API server, in a different port (2379)