@@ -67,35 +67,103 @@ esac
6767export REGISTRY=${REGISTRY:- localhost: 5001}
6868export TAG=${TAG:- latest}
6969
70- rm -f ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.yaml
71- patch -c ${SCRIPT_ROOT} /deploy/vpa-rbac.yaml -i ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.diff -o ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.yaml
72- kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.yaml
73- # Other-versioned CRDs are irrelevant as we're running a modern-ish cluster.
74- kubectl apply -f ${SCRIPT_ROOT} /deploy/vpa-v1-crd-gen.yaml
70+ # Deploy metrics server for E2E tests
7571kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/k8s-metrics-server.yaml
7672
73+ # Build and load Docker images for each component
7774for i in ${COMPONENTS} ; do
75+ COMPONENT_NAME=$i
7876 if [ $i == recommender-externalmetrics ] ; then
79- i =recommender
77+ COMPONENT_NAME =recommender
8078 fi
81- if [ $i == admission-controller ] ; then
82- (cd ${SCRIPT_ROOT} /pkg/${i} && bash ./gencerts.sh e2e || true)
83- kubectl apply -f ${SCRIPT_ROOT} /deploy/admission-controller-service.yaml
84- fi
85- ALL_ARCHITECTURES=${ARCH} make --directory ${SCRIPT_ROOT} /pkg/${i} docker-build REGISTRY=${REGISTRY} TAG=${TAG}
86- docker tag ${REGISTRY} /vpa-${i} -${ARCH} :${TAG} ${REGISTRY} /vpa-${i} :${TAG}
87- kind load docker-image ${REGISTRY} /vpa-${i} :${TAG}
79+ ALL_ARCHITECTURES=${ARCH} make --directory ${SCRIPT_ROOT} /pkg/${COMPONENT_NAME} docker-build REGISTRY=${REGISTRY} TAG=${TAG}
80+ docker tag ${REGISTRY} /vpa-${COMPONENT_NAME} -${ARCH} :${TAG} ${REGISTRY} /vpa-${COMPONENT_NAME} :${TAG}
81+ kind load docker-image ${REGISTRY} /vpa-${COMPONENT_NAME} :${TAG}
8882done
8983
84+ # Prepare Helm values
85+ HELM_CHART_PATH=" ${SCRIPT_ROOT} /charts/vertical-pod-autoscaler"
86+ VALUES_FILE=" ${SCRIPT_ROOT} /hack/e2e/values-e2e-local.yaml"
87+ HELM_RELEASE_NAME=" vpa"
88+ HELM_NAMESPACE=" kube-system"
89+
90+ # Build dynamic Helm set arguments based on components
91+ HELM_SET_ARGS=" "
92+
93+ # Enable components based on suite
9094for i in ${COMPONENTS} ; do
91- if [ $i == recommender-externalmetrics ] ; then
92- kubectl delete namespace monitoring --ignore-not-found=true
93- kubectl create namespace monitoring
94- kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/prometheus.yaml
95- kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/prometheus-adapter.yaml
96- kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/metrics-pump.yaml
97- kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/${i} -deployment.yaml
98- else
99- REGISTRY=${REGISTRY} TAG=${TAG} ${SCRIPT_ROOT} /hack/vpa-process-yaml.sh ${SCRIPT_ROOT} /deploy/${i} -deployment.yaml | kubectl apply -f -
100- fi
95+ case $i in
96+ recommender|recommender-externalmetrics)
97+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set recommender.enabled=true"
98+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set recommender.image.repository=${REGISTRY} /vpa-recommender"
99+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set recommender.image.tag=${TAG} "
100+ ;;
101+ updater)
102+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set updater.enabled=true"
103+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set updater.image.repository=${REGISTRY} /vpa-updater"
104+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set updater.image.tag=${TAG} "
105+ ;;
106+ admission-controller)
107+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set admissionController.enabled=true"
108+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set admissionController.image.repository=${REGISTRY} /vpa-admission-controller"
109+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set admissionController.image.tag=${TAG} "
110+ ;;
111+ esac
101112done
113+
114+ # Add feature gates if specified
115+ if [ -n " ${FEATURE_GATES:- } " ]; then
116+ # Add feature gates to each enabled component
117+ for i in ${COMPONENTS} ; do
118+ case $i in
119+ recommender|recommender-externalmetrics)
120+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set recommender.extraArgs[0]=--feature-gates=${FEATURE_GATES} "
121+ ;;
122+ updater)
123+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set updater.extraArgs[0]=--feature-gates=${FEATURE_GATES} "
124+ ;;
125+ admission-controller)
126+ HELM_SET_ARGS=" ${HELM_SET_ARGS} --set admissionController.extraArgs[0]=--feature-gates=${FEATURE_GATES} "
127+ ;;
128+ esac
129+ done
130+ fi
131+
132+ # Uninstall any existing VPA Helm release
133+ helm uninstall ${HELM_RELEASE_NAME} --namespace ${HELM_NAMESPACE} 2> /dev/null || true
134+
135+ # Install VPA using Helm chart
136+ echo " ** Installing VPA via Helm chart"
137+ helm install ${HELM_RELEASE_NAME} ${HELM_CHART_PATH} \
138+ --namespace ${HELM_NAMESPACE} \
139+ --values ${VALUES_FILE} \
140+ ${HELM_SET_ARGS} \
141+ --wait
142+
143+ # Handle external metrics special case
144+ if [[ " ${SUITE} " == " recommender-externalmetrics" ]]; then
145+ echo " ** Setting up external metrics infrastructure"
146+
147+ # Apply extra RBAC for external metrics
148+ rm -f ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.yaml
149+ patch -c ${SCRIPT_ROOT} /deploy/vpa-rbac.yaml -i ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.diff -o ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.yaml
150+ kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/vpa-rbac.yaml
151+
152+ # Deploy Prometheus and adapter for external metrics
153+ kubectl delete namespace monitoring --ignore-not-found=true
154+ kubectl create namespace monitoring
155+ kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/prometheus.yaml
156+ kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/prometheus-adapter.yaml
157+ kubectl apply -f ${SCRIPT_ROOT} /hack/e2e/metrics-pump.yaml
158+
159+ # Upgrade Helm release with external metrics configuration
160+ echo " ** Updating recommender with external metrics args"
161+ helm upgrade ${HELM_RELEASE_NAME} ${HELM_CHART_PATH} \
162+ --namespace ${HELM_NAMESPACE} \
163+ --values ${VALUES_FILE} \
164+ ${HELM_SET_ARGS} \
165+ --set " recommender.extraArgs[0]=--use-external-metrics=true" \
166+ --set " recommender.extraArgs[1]=--external-metrics-cpu-metric=cpu" \
167+ --set " recommender.extraArgs[2]=--external-metrics-memory-metric=mem" \
168+ --wait
169+ fi
0 commit comments