From a6739dbffc76b0b6cd8000fa45c02c2945f2889c Mon Sep 17 00:00:00 2001 From: Oleg Chunikhin Date: Sun, 16 Feb 2020 14:48:35 -0500 Subject: [PATCH] fix addon manager failing to elect leader on masters with _ in the hostname (issue #88214) --- cluster/addons/addon-manager/kube-addons.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cluster/addons/addon-manager/kube-addons.sh b/cluster/addons/addon-manager/kube-addons.sh index 330bf9d4a80..0c38ea6414b 100755 --- a/cluster/addons/addon-manager/kube-addons.sh +++ b/cluster/addons/addon-manager/kube-addons.sh @@ -210,13 +210,15 @@ function is_leader() { # Disabling because "${KUBECTL_OPTS}" needs to allow for expansion here KUBE_CONTROLLER_MANAGER_LEADER=$(${KUBECTL} ${KUBECTL_OPTS} -n kube-system get ep kube-controller-manager \ -o go-template=$'{{index .metadata.annotations "control-plane.alpha.kubernetes.io/leader"}}' \ - | sed 's/^.*"holderIdentity":"\([^"]*\)".*/\1/' | awk -F'_' '{print $1}') + | sed 's/^.*"holderIdentity":"\([^"]*\)".*/\1/') # If there was any problem with getting the leader election results, var will # be empty. Since it's better to have multiple addon managers than no addon # managers at all, we're going to assume that we're the leader in such case. log INFO "Leader is $KUBE_CONTROLLER_MANAGER_LEADER" - [[ "$KUBE_CONTROLLER_MANAGER_LEADER" == "" || - "$HOSTNAME" == "$KUBE_CONTROLLER_MANAGER_LEADER" ]] + # KUBE_CONTROLLER_MANAGER_LEADER value is in the form "${HOSTNAME}_*" + # Here we verify that the value is either empty or is in the expected form for the leader + KUBE_CONTROLLER_MANAGER_LEADER="${KUBE_CONTROLLER_MANAGER_LEADER##${HOSTNAME}_*}" + [[ "$KUBE_CONTROLLER_MANAGER_LEADER" == "" ]] } # The business logic for whether a given object should be created