These are instructions for releasing VPA. We aim to release a new VPA minor version after each minor Kubernetes release. We release patch versions as needed.
Before doing the release for the first time check if you have all the necessary permissions (see Permissions section below).
There are the following steps of the release process:
- Open issue to track the release.
- Update VPA version const.
- Build and stage images.
- Test the release.
- Promote image.
- Finalize release.
Open a new issue to track the release, use the vpa_release template. We use the issue to communicate what is state of the release.
- Wait for all VPA changes that will be in the release to merge.
- Wait for the end to end tests to run with all VPA changes
included.
To see what code was actually tested, look for
===== last commit =====
entries in the fullbuild-log.txt
of a given test run. - Make sure the end to end VPA tests are green.
- Change the version in
common/version-go
to
1.${next-minor}.0
, - Commit and merge the change,
- Go to the merged change,
- Create a new branch named
vpa-release-1.${next-minor}
from the merged change.
- Bump the patch version number in VerticalPodAutoscalerVersion constant in
common/version.go.
Create a commit and merge by making a PR to the
vpa-release-1.${minor}
branch.
Create a fresh clone of the repo and switch to the vpa-release-1.${minor}
branch. This makes sure you have no local changes while building the images.
For example:
git clone [email protected]:kubernetes/autoscaler.git
git switch vpa-release-1.${minor}
Once in the freshly cloned repo, build and stage the images.
cd vertical-pod-autoscaler/
for component in recommender updater admission-controller ; do TAG=`grep 'const versionCore = ' common/version.go | cut -d '"' -f 2` REGISTRY=gcr.io/k8s-staging-autoscaling make release --directory=pkg/${component}; done
-
Create a Kubernetes cluster. If you're using GKE you can use the following command:
gcloud container clusters create e2e-test --machine-type=n1-standard-2 --image-type=COS_CONTAINERD --num-nodes=3
-
Create clusterrole. If you're using GKE you can use the following command:
kubectl create clusterrolebinding my-cluster-admin-binding --clusterrole=cluster-admin --user=`gcloud config get-value account`
-
Deploy VPA:
REGISTRY=gcr.io/k8s-staging-autoscaling TAG=`grep 'const versionCore = ' common/version.go | cut -d '"' -f 2` ./hack/vpa-up.sh
-
Run the
full-vpa
test suite:./hack/run-e2e-tests.sh full-vpa
To promote image from staging repo send out PR updating autoscaling images mapping (example).
NOTE: Please use the add-version.sh script to prepare the changes automatically.
When PR merges the promoter will run automatically and upload the image from staging repo to final repo. The post submit job status can be tracked on testgrid. To verify if the promoter finished its job one can use gcloud. E.g.:
gcloud container images describe registry.k8s.io/autoscaling/vpa-recommender:[*vpa-version*]
NOTE: We currently use two tags for releases:
vertical-pod-autoscaler-[*vpa-version*]
and
vertical-pod-autoscaler/v[*vpa-version*]
. We need
vertical-pod-autoscaler/v[*vpa-version*]
for go get k8s.io/autoscaler/vertical-pod-autoscaler@v[*vpa-version*]
to work. We can
consider stopping using vertical-pod-autoscaler-[*vpa-version*]
tags but
we've been using them since vertical-pod-autoscaler-0.1
and tags with the
other pattern start only with vertical-pod-autoscaler/v0.9.0
so we should make
sure nothing we care about will break if we do.
-
Update information about newest version and K8s compatibility in the installation section of README.
-
Update the yaml files:
sed -i -s "s|[0-9]\+\.[0-9]\+\.[0-9]\+|[*vpa-version*]|" ./deploy/*-deployment*.yaml ./hack/vpa-process-yaml.sh
-
Update the default tag in vpa-up.sh.
-
Merge these changes into branch vpa-release-1.{$minor} and optionally into master if 1.{$minor} is the latest minor release (example PR: #5460).
-
Tag the commit with version const change
git tag -a vertical-pod-autoscaler-[*vpa-version*] -m "Vertical Pod Autoscaler release [*vpa-version*]" git tag -a vertical-pod-autoscaler/v[*vpa-version*] -m "Vertical Pod Autoscaler release [*vpa-version*]"
-
Push tag
git push [email protected]:kubernetes/autoscaler.git vertical-pod-autoscaler-[*vpa-version*] git push [email protected]:kubernetes/autoscaler.git vertical-pod-autoscaler/v[*vpa-version*]
-
To create and publish a github release from pushed tag go to https://github.com/kubernetes/autoscaler/releases/tag/vertical-pod-autoscaler-[*vpa-version*], press
Create release from tag
, complete release title and release notes, tick theThis is a pre-release
box and pressPublish release
.
-
Permissions to access
gcr.io/k8s-staging-autoscaling
are governed by list of people in groups.yaml under k8s-infra-staging-autoscaling. -
Permissions to add images to
k8s.io/registry.k8s.io/images/k8s-staging-autoscaling/images.yaml
are governed by OWNERS file. -
Permissions to add tags to kubernetes/autoscaler and create releases in the repo you must be:
- a collaborator on the kubernetes/autoscaler repo or
- a member of the autoscaler-maintainers team.
A member of the autoscaler-admins can add you to add you as a collaborator.