kubernetes / autoscaler

Autoscaling components for Kubernetes
Apache License 2.0
8.11k stars 3.98k forks source link

Change VPA versioning #5759

Open jbartosik opened 1 year ago

jbartosik commented 1 year ago

I'd like to change how we version VPA.

Since there's K8s version which:

I think it makes sense to name VPA like that K8s version. It would make it easier to decide which VPA version to use with which K8s version.

During SIG meetings the following downsides were pointed out:

  1. We might sometimes have to delay releasing some changes. Some changes are being enough so that we can't release them in a patch release. So we'd have to wait up to 4 months for a new minor (K8s and VPA) release
  2. CA has versioning like that and is much more tightly coupled with K8s

I think 1. isn't likely to be a big issue (we have more of a problem of doing minor releases not frequently enough). I think that 2. we can address by documenting this properly.

During SIG meeting it was also pointed out that before we do a change like that we should check if Kubernetes community has any recommendations around changes like that.

voelzmo commented 1 year ago

Just re-iterating what I tried to say in the SIG meeting: I'm not sure if we really should assign a meaning to VPA version numbers, if we don't need to do this. Right now, we can release VPA and decide freely, if this should be a patch version update, a minor version update, or a major version update. If you're linking this directly to k8s versions, you lose this freedom.

As everything is a tradeoff, let's look at what we're gaining for this freedom. We could be dropping this table in the README, which tries to record the incompatible changes we made in VPA and specify which k8s versions definitely would break (e.g. because a certain API version doesn't exist in k8s versions smaller than x) and replace it with a single statement like Cluster-Autoscaler

We recommend using Cluster Autoscaler with the Kubernetes control plane (previously referred to as master) version for which it was meant. The below combinations have been tested on GCP. We don't do cross version testing or compatibility testing in other environments. Some user reports indicate successful use of a newer version of Cluster Autoscaler with older clusters, however, there is always a chance that it won't work as expected.

(source)

This would also mean that we would need to start maintaining (at least?) 3 VPA releases. Instead of rolling forward whenever we merge a security- or bugfix, we'd need to cherry-pick this to the VPA release branches for the 3 supported k8s versions. All of this is easily possible when releasing and cherry-picking is automated, but given the current state of how to do a VPA release, I'd rather avoid these complications.

k8s-triage-robot commented 10 months ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

Shubham82 commented 10 months ago

/remove-lifecycle stale

k8s-triage-robot commented 7 months ago

The Kubernetes project currently lacks enough contributors to adequately respond to all issues.

This bot triages un-triaged issues according to the following rules:

You can:

Please send feedback to sig-contributor-experience at kubernetes/community.

/lifecycle stale

Shubham82 commented 7 months ago

/remove-lifecycle stale /lifecycle frozen

sjwl commented 1 month ago

@voelzmo can you clarify the earlier comment:

As everything is a tradeoff, let's look at what we're gaining for this freedom. We could be dropping this table in the README, which tries to record the incompatible changes we made in VPA and specify which k8s versions definitely would break (e.g. because a certain API version doesn't exist in k8s versions smaller than x) and replace it with a single statement like Cluster-Autoscaler

My interpretation is the following: The Compatibility table clearly shows the minimum supported Kubernetes version for each VPA release. In addition, the maximum is derived by observing if there is a Kubernetes version in the table that is higher than the current row.

So for example. VPA version Kubernetes version
1.2.1 1.27+
1.2.0 1.27+
1.1.2 1.25+

VPA version 1.1.2 is compatible with Kubernetes versions 1.25-1.26