From 6a880b2567eff17ef0a2bdeaf6ed6c77696dd989 Mon Sep 17 00:00:00 2001 From: Lantao Liu Date: Wed, 22 Aug 2018 19:20:46 -0700 Subject: [PATCH] Support extra prune resources in kube-addon-manager. Signed-off-by: Lantao Liu --- cluster/addons/addon-manager/kube-addons.sh | 46 ++++++++++++++++++- cluster/gce/gci/configure-helper.sh | 4 +- cluster/gce/manifests/kube-addon-manager.yaml | 3 ++ 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/cluster/addons/addon-manager/kube-addons.sh b/cluster/addons/addon-manager/kube-addons.sh index eb118444d6b..a017d622e5e 100755 --- a/cluster/addons/addon-manager/kube-addons.sh +++ b/cluster/addons/addon-manager/kube-addons.sh @@ -28,6 +28,29 @@ KUBECTL=${KUBECTL_BIN:-/usr/local/bin/kubectl} KUBECTL_OPTS=${KUBECTL_OPTS:-} +# KUBECTL_PRUNE_WHITELIST is a list of resources whitelisted by +# default. +# This is currently the same with the default in: +# https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/apply.go +KUBECTL_PRUNE_WHITELIST=( + core/v1/ConfigMap + core/v1/Endpoints + core/v1/Namespace + core/v1/PersistentVolumeClaim + core/v1/PersistentVolume + core/v1/Pod + core/v1/ReplicationController + core/v1/Secret + core/v1/Service + batch/v1/Job + batch/v1beta1/CronJob + extensions/v1beta1/DaemonSet + extensions/v1beta1/Deployment + extensions/v1beta1/Ingress + extensions/v1beta1/ReplicaSet + apps/v1beta1/StatefulSet + apps/v1beta1/Deployment +) ADDON_CHECK_INTERVAL_SEC=${TEST_ADDON_CHECK_INTERVAL_SEC:-60} ADDON_PATH=${ADDON_PATH:-/etc/kubernetes/addons} @@ -82,6 +105,25 @@ function log() { esac } +# Generate kubectl prune-whitelist flags from provided resource list. +function generate_prune_whitelist_flags() { + local -r resources=($@) + for resource in "${resources[@]}"; do + printf "%s" "--prune-whitelist ${resource} " + done +} + +# KUBECTL_EXTRA_PRUNE_WHITELIST is a list of extra whitelisted resources +# besides the default ones. +extra_prune_whitelist= +if [ -n "${KUBECTL_EXTRA_PRUNE_WHITELIST:-}" ]; then + extra_prune_whitelist=( ${KUBECTL_EXTRA_PRUNE_WHITELIST:-} ) +fi +prune_whitelist=( ${KUBECTL_PRUNE_WHITELIST[@]} ${extra_prune_whitelist[@]} ) +prune_whitelist_flags=$(generate_prune_whitelist_flags ${prune_whitelist[@]}) + +log INFO "== Generated kubectl prune whitelist flags: $prune_whitelist_flags ==" + # $1 filename of addon to start. # $2 count of tries to start the addon. # $3 delay in seconds between two consecutive tries @@ -126,12 +168,12 @@ function reconcile_addons() { log INFO "== Reconciling with deprecated label ==" ${KUBECTL} ${KUBECTL_OPTS} apply -f ${ADDON_PATH} \ -l ${CLUSTER_SERVICE_LABEL}=true,${ADDON_MANAGER_LABEL}!=EnsureExists \ - --prune=true --recursive | grep -v configured + --prune=true ${prune_whitelist_flags} --recursive | grep -v configured log INFO "== Reconciling with addon-manager label ==" ${KUBECTL} ${KUBECTL_OPTS} apply -f ${ADDON_PATH} \ -l ${CLUSTER_SERVICE_LABEL}!=true,${ADDON_MANAGER_LABEL}=Reconcile \ - --prune=true --recursive | grep -v configured + --prune=true ${prune_whitelist_flags} --recursive | grep -v configured log INFO "== Kubernetes addon reconcile completed at $(date -Is) ==" } diff --git a/cluster/gce/gci/configure-helper.sh b/cluster/gce/gci/configure-helper.sh index 8afe1d6a027..c0783a3ac65 100644 --- a/cluster/gce/gci/configure-helper.sh +++ b/cluster/gce/gci/configure-helper.sh @@ -2506,7 +2506,9 @@ EOF fi # Place addon manager pod manifest. - cp "${src_dir}/kube-addon-manager.yaml" /etc/kubernetes/manifests + src_file="${src_dir}/kube-addon-manager.yaml" + sed -i -e "s@{{kubectl_extra_prune_whitelist}}@${ADDON_MANAGER_PRUNE_WHITELIST:-}@g" "${src_file}" + cp "${src_file}" /etc/kubernetes/manifests } # Starts an image-puller - used in test clusters. diff --git a/cluster/gce/manifests/kube-addon-manager.yaml b/cluster/gce/manifests/kube-addon-manager.yaml index 2833fc8858d..1b62dc314f2 100644 --- a/cluster/gce/manifests/kube-addon-manager.yaml +++ b/cluster/gce/manifests/kube-addon-manager.yaml @@ -30,6 +30,9 @@ spec: - mountPath: /var/log name: varlog readOnly: false + env: + - name: KUBECTL_EXTRA_PRUNE_WHITELIST + value: {{kubectl_extra_prune_whitelist}} volumes: - hostPath: path: /etc/kubernetes/