diff --git a/.gitignore b/.gitignore index 10ad5ee3f6..726ce98f4a 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ Session.vim # Binary files bin/ + +# vertical pod autoscaler test output +vertical-pod-autoscaler/e2e/v1*/workspace/ diff --git a/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml b/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml index d6af50f331..567dd430bf 100644 --- a/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml +++ b/vertical-pod-autoscaler/deploy/admission-controller-deployment.yaml @@ -21,7 +21,7 @@ spec: containers: - name: admission-controller image: registry.k8s.io/autoscaling/vpa-admission-controller:1.2.1 - imagePullPolicy: Always + imagePullPolicy: IfNotPresent env: - name: NAMESPACE valueFrom: diff --git a/vertical-pod-autoscaler/deploy/recommender-deployment.yaml b/vertical-pod-autoscaler/deploy/recommender-deployment.yaml index d195b41674..5ce429a9fd 100644 --- a/vertical-pod-autoscaler/deploy/recommender-deployment.yaml +++ b/vertical-pod-autoscaler/deploy/recommender-deployment.yaml @@ -21,7 +21,7 @@ spec: containers: - name: recommender image: registry.k8s.io/autoscaling/vpa-recommender:1.2.1 - imagePullPolicy: Always + imagePullPolicy: IfNotPresent resources: limits: cpu: 200m diff --git a/vertical-pod-autoscaler/deploy/updater-deployment.yaml b/vertical-pod-autoscaler/deploy/updater-deployment.yaml index a3f284e67f..b1f7343e5b 100644 --- a/vertical-pod-autoscaler/deploy/updater-deployment.yaml +++ b/vertical-pod-autoscaler/deploy/updater-deployment.yaml @@ -21,7 +21,7 @@ spec: containers: - name: updater image: registry.k8s.io/autoscaling/vpa-updater:1.2.1 - imagePullPolicy: Always + imagePullPolicy: IfNotPresent env: - name: NAMESPACE valueFrom: diff --git a/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh b/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh index 04d81fb37a..966e29e261 100755 --- a/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh +++ b/vertical-pod-autoscaler/hack/deploy-for-e2e-locally.sh @@ -19,12 +19,19 @@ set -o nounset set -o pipefail SCRIPT_ROOT=$(dirname ${BASH_SOURCE})/.. +BASE_NAME=$(basename $0) +source "${SCRIPT_ROOT}/hack/lib/util.sh" + +ARCH=$(kube::util::host_arch) function print_help { - echo "ERROR! Usage: deploy-for-e2e-locally.sh [suite]*" + echo "ERROR! Usage: $BASE_NAME [suite]*" echo " should be one of:" echo " - recommender" echo " - recommender-externalmetrics" + echo " - updater" + echo " - admission-controller" + echo " - full-vpa" } if [ $# -eq 0 ]; then @@ -40,16 +47,19 @@ fi SUITE=$1 case ${SUITE} in - recommender|recommender-externalmetrics) + recommender|recommender-externalmetrics|updater|admission-controller) COMPONENTS="${SUITE}" ;; + full-vpa) + COMPONENTS="recommender updater admission-controller" + ;; *) print_help exit 1 ;; esac -# Local KIND-hosted registry +# Local KIND images export REGISTRY=${REGISTRY:-localhost:5001} export TAG=${TAG:-latest} @@ -64,8 +74,12 @@ for i in ${COMPONENTS}; do if [ $i == recommender-externalmetrics ] ; then i=recommender fi - ALL_ARCHITECTURES=amd64 make --directory ${SCRIPT_ROOT}/pkg/${i} release REGISTRY=${REGISTRY} TAG=${TAG} - kind load docker-image ${REGISTRY}/vpa-${i}-amd64:${TAG} + if [ $i == admission-controller ] ; then + (cd ${SCRIPT_ROOT}/pkg/${i} && bash ./gencerts.sh e2e || true) + fi + ALL_ARCHITECTURES=${ARCH} make --directory ${SCRIPT_ROOT}/pkg/${i} docker-build REGISTRY=${REGISTRY} TAG=${TAG} + docker tag ${REGISTRY}/vpa-${i}-${ARCH}:${TAG} ${REGISTRY}/vpa-${i}:${TAG} + kind load docker-image ${REGISTRY}/vpa-${i}:${TAG} done diff --git a/vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh b/vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh deleted file mode 100755 index 8dba9f3d9f..0000000000 --- a/vertical-pod-autoscaler/hack/e2e/kind-with-registry.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/sh - -# Copyright 2023 The Kubernetes Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Based on https://kind.sigs.k8s.io/examples/kind-with-registry.sh -set -o errexit - -# Create registry container unless it already exists -reg_name='kind-registry' -reg_port='5001' - -if [ "$(docker inspect -f '{{.State.Running}}' "${reg_name}" 2>/dev/null || true)" != 'true' ]; then - docker run \ - -d --restart=always -p "127.0.0.1:${reg_port}:5000" --name "${reg_name}" \ - registry:2 -fi - -# Create a cluster with the local registry enabled in containerd -cat <" + echo "ERROR! Usage: $BASE_NAME " echo " should be one of:" echo " - recommender" echo " - recommender-externalmetrics" + echo " - updater" + echo " - admission-controller" + echo " - full-vpa" + } if [ $# -eq 0 ]; then @@ -38,28 +43,44 @@ fi SUITE=$1 +for i in kind docker; do + if ! command -v $i 2>&1 > /dev/null + then + echo "$i could not be found" + exit 1; + fi +done + +if ! docker ps 2>&1 >/dev/null +then + echo "docker isn't running" + exit 1 +fi + + echo "Deleting KIND cluster 'kind'." kind delete cluster -n kind -q -echo "Creating KIND cluster 'kind' with builtin registry." -${SCRIPT_ROOT}/hack/e2e/kind-with-registry.sh +echo "Creating KIND cluster 'kind'" +kind create cluster --image=kindest/node:v1.26.3 echo "Building metrics-pump image" docker build -t localhost:5001/write-metrics:dev -f ${SCRIPT_ROOT}/hack/e2e/Dockerfile.externalmetrics-writer ${SCRIPT_ROOT}/hack -echo " pushing image to local registry" -docker push localhost:5001/write-metrics:dev +echo " loading image into kind" +kind load docker-image localhost:5001/write-metrics:dev + case ${SUITE} in - recommender|recommender-externalmetrics) + recommender|recommender-externalmetrics|updater|admission-controller|full-vpa) ${SCRIPT_ROOT}/hack/vpa-down.sh echo " ** Deploying for suite ${SUITE}" ${SCRIPT_ROOT}/hack/deploy-for-e2e-locally.sh ${SUITE} echo " ** Running suite ${SUITE}" if [ ${SUITE} == recommender-externalmetrics ]; then - ${SCRIPT_ROOT}/hack/run-e2e-tests.sh recommender + WORKSPACE=./workspace/_artifacts ${SCRIPT_ROOT}/hack/run-e2e-tests.sh recommender else - ${SCRIPT_ROOT}/hack/run-e2e-tests.sh ${SUITE} + WORKSPACE=./workspace/_artifacts ${SCRIPT_ROOT}/hack/run-e2e-tests.sh ${SUITE} fi ;; *) diff --git a/vertical-pod-autoscaler/hack/run-e2e-tests.sh b/vertical-pod-autoscaler/hack/run-e2e-tests.sh index aaa1610c83..8c883693d7 100755 --- a/vertical-pod-autoscaler/hack/run-e2e-tests.sh +++ b/vertical-pod-autoscaler/hack/run-e2e-tests.sh @@ -44,13 +44,15 @@ SUITE=$1 export GO111MODULE=on +export WORKSPACE=${WORKSPACE:-/workspace/_artifacts} + case ${SUITE} in recommender|updater|admission-controller|actuation|full-vpa) export KUBECONFIG=$HOME/.kube/config pushd ${SCRIPT_ROOT}/e2e - go test -mod vendor ./v1beta2/*go -v --test.timeout=90m --args --ginkgo.v=true --ginkgo.focus="\[VPA\] \[${SUITE}\]" --report-dir=/workspace/_artifacts --disable-log-dump --ginkgo.timeout=90m + go test -mod vendor ./v1beta2/*go -v --test.timeout=90m --args --ginkgo.v=true --ginkgo.focus="\[VPA\] \[${SUITE}\]" --report-dir=${WORKSPACE} --disable-log-dump --ginkgo.timeout=90m V1BETA2_RESULT=$? - go test -mod vendor ./v1/*go -v --test.timeout=90m --args --ginkgo.v=true --ginkgo.focus="\[VPA\] \[${SUITE}\]" --report-dir=/workspace/_artifacts --disable-log-dump --ginkgo.timeout=90m + go test -mod vendor ./v1/*go -v --test.timeout=90m --args --ginkgo.v=true --ginkgo.focus="\[VPA\] \[${SUITE}\]" --report-dir=${WORKSPACE} --disable-log-dump --ginkgo.timeout=90m V1_RESULT=$? popd echo v1beta2 test result: ${V1BETA2_RESULT}