mirror of https://github.com/k3s-io/k3s
Use results of kube-controller-manager leader election in addon manager
parent
0d088609b3
commit
5e4692f784
|
@ -15,7 +15,7 @@
|
||||||
IMAGE=gcr.io/google-containers/kube-addon-manager
|
IMAGE=gcr.io/google-containers/kube-addon-manager
|
||||||
ARCH?=amd64
|
ARCH?=amd64
|
||||||
TEMP_DIR:=$(shell mktemp -d)
|
TEMP_DIR:=$(shell mktemp -d)
|
||||||
VERSION=v6.4-beta.2
|
VERSION=v6.5
|
||||||
KUBECTL_VERSION?=v1.6.4
|
KUBECTL_VERSION?=v1.6.4
|
||||||
|
|
||||||
ifeq ($(ARCH),amd64)
|
ifeq ($(ARCH),amd64)
|
||||||
|
|
|
@ -47,6 +47,11 @@ ADDON_MANAGER_LABEL="addonmanager.kubernetes.io/mode"
|
||||||
# will be reconciled for now.
|
# will be reconciled for now.
|
||||||
CLUSTER_SERVICE_LABEL="kubernetes.io/cluster-service"
|
CLUSTER_SERVICE_LABEL="kubernetes.io/cluster-service"
|
||||||
|
|
||||||
|
# Whether only one addon manager should be running in a multi-master setup.
|
||||||
|
# Disabling this flag will force all addon managers to assume they are the
|
||||||
|
# leaders.
|
||||||
|
ADDON_MANAGER_LEADER_ELECTION=${ADDON_MANAGER_LEADER_ELECTION:-true}
|
||||||
|
|
||||||
# Remember that you can't log from functions that print some output (because
|
# Remember that you can't log from functions that print some output (because
|
||||||
# logs are also printed on stdout).
|
# logs are also printed on stdout).
|
||||||
# $1 level
|
# $1 level
|
||||||
|
@ -143,6 +148,25 @@ function ensure_addons() {
|
||||||
log INFO "== Kubernetes addon ensure completed at $(date -Is) =="
|
log INFO "== Kubernetes addon ensure completed at $(date -Is) =="
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function is_leader() {
|
||||||
|
# In multi-master setup, only one addon manager should be running. We use
|
||||||
|
# existing leader election in kube-controller-manager instead of implementing
|
||||||
|
# a separate mechanism here.
|
||||||
|
if ! $ADDON_MANAGER_LEADER_ELECTION; then
|
||||||
|
log INFO "Leader election disabled."
|
||||||
|
return 0;
|
||||||
|
fi
|
||||||
|
KUBE_CONTROLLER_MANAGER_LEADER=`${KUBECTL} -n kube-system get ep kube-controller-manager \
|
||||||
|
-o go-template=$'{{index .metadata.annotations "control-plane.alpha.kubernetes.io/leader"}}' \
|
||||||
|
| 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" ]]
|
||||||
|
}
|
||||||
|
|
||||||
# The business logic for whether a given object should be created
|
# The business logic for whether a given object should be created
|
||||||
# was already enforced by salt, and /etc/kubernetes/addons is the
|
# was already enforced by salt, and /etc/kubernetes/addons is the
|
||||||
# managed result is of that. Start everything below that directory.
|
# managed result is of that. Start everything below that directory.
|
||||||
|
@ -178,8 +202,12 @@ done
|
||||||
log INFO "== Entering periodical apply loop at $(date -Is) =="
|
log INFO "== Entering periodical apply loop at $(date -Is) =="
|
||||||
while true; do
|
while true; do
|
||||||
start_sec=$(date +"%s")
|
start_sec=$(date +"%s")
|
||||||
ensure_addons
|
if is_leader; then
|
||||||
reconcile_addons
|
ensure_addons
|
||||||
|
reconcile_addons
|
||||||
|
else
|
||||||
|
log INFO "Not elected leader, going back to sleep."
|
||||||
|
fi
|
||||||
end_sec=$(date +"%s")
|
end_sec=$(date +"%s")
|
||||||
len_sec=$((${end_sec}-${start_sec}))
|
len_sec=$((${end_sec}-${start_sec}))
|
||||||
# subtract the time passed from the sleep time
|
# subtract the time passed from the sleep time
|
||||||
|
|
|
@ -877,6 +877,11 @@ EOF
|
||||||
if [ -n "${CLUSTER_SIGNING_DURATION:-}" ]; then
|
if [ -n "${CLUSTER_SIGNING_DURATION:-}" ]; then
|
||||||
cat >>$file <<EOF
|
cat >>$file <<EOF
|
||||||
CLUSTER_SIGNING_DURATION: $(yaml-quote ${CLUSTER_SIGNING_DURATION})
|
CLUSTER_SIGNING_DURATION: $(yaml-quote ${CLUSTER_SIGNING_DURATION})
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
if [ -n "${ADDON_MANAGER_LEADER_ELECTION:-}" ]; then
|
||||||
|
cat >>$file <<EOF
|
||||||
|
ADDON_MANAGER_LEADER_ELECTION: $(yaml-quote ${ADDON_MANAGER_LEADER_ELECTION})
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue