mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-07-17 20:00:07 +00:00
Merge pull request #134847 from prometherion/feat/kubeadm-dns-signature
refactor(kubeadm): including dns addon version to signature
This commit is contained in:
@@ -120,7 +120,7 @@ func runPlan(flagSet *pflag.FlagSet, flags *planFlags, args []string, printer ou
|
||||
return cmdutil.TypeMismatchErr("allowExperimentalUpgrades", "bool")
|
||||
}
|
||||
|
||||
availUpgrades, err := upgrade.GetAvailableUpgrades(versionGetter, *allowExperimentalUpgrades, *allowRCUpgrades, client, printer)
|
||||
availUpgrades, err := upgrade.GetAvailableUpgrades(versionGetter, *allowExperimentalUpgrades, *allowRCUpgrades, printer)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "[upgrade/versions] FATAL")
|
||||
}
|
||||
|
||||
@@ -21,11 +21,9 @@ import (
|
||||
"strings"
|
||||
|
||||
versionutil "k8s.io/apimachinery/pkg/util/version"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/klog/v2"
|
||||
|
||||
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/output"
|
||||
)
|
||||
|
||||
@@ -74,7 +72,7 @@ type ClusterState struct {
|
||||
|
||||
// GetAvailableUpgrades fetches all versions from the specified VersionGetter and computes which
|
||||
// kinds of upgrades can be performed
|
||||
func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesAllowed, rcUpgradesAllowed bool, client clientset.Interface, printer output.Printer) ([]Upgrade, error) {
|
||||
func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesAllowed, rcUpgradesAllowed bool, printer output.Printer) ([]Upgrade, error) {
|
||||
printer.Printf("[upgrade] Fetching available versions to upgrade to\n")
|
||||
|
||||
// Collect the upgrades kubeadm can do in this list
|
||||
@@ -145,7 +143,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
|
||||
}
|
||||
isExternalEtcd := len(etcdVersions) == 0
|
||||
|
||||
dnsVersion, err := dns.DeployedDNSAddon(client)
|
||||
dnsVersion, err := versionGetterImpl.DNSAddonVersion()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -17,19 +17,13 @@ limitations under the License.
|
||||
package upgrade
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
|
||||
apps "k8s.io/api/apps/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
versionutil "k8s.io/apimachinery/pkg/util/version"
|
||||
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/errors"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/output"
|
||||
@@ -46,6 +40,8 @@ type fakeVersionGetter struct {
|
||||
componentVersion string
|
||||
etcdVersion string
|
||||
isExternalEtcd bool
|
||||
coreDNSVersion string
|
||||
coreDNSError error
|
||||
}
|
||||
|
||||
var _ VersionGetter = &fakeVersionGetter{}
|
||||
@@ -117,6 +113,10 @@ func (f *fakeVersionGetter) ComponentVersions(name string) (map[string][]string,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (f *fakeVersionGetter) DNSAddonVersion() (string, error) {
|
||||
return f.coreDNSVersion, f.coreDNSError
|
||||
}
|
||||
|
||||
const fakeCurrentEtcdVersion = "3.1.12"
|
||||
|
||||
func getEtcdVersion(v *versionutil.Version) string {
|
||||
@@ -158,22 +158,20 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
expectedUpgrades []Upgrade
|
||||
allowExperimental, allowRCs bool
|
||||
errExpected bool
|
||||
beforeDNSVersion string
|
||||
deployDNSFailed bool
|
||||
}{
|
||||
{
|
||||
name: "no action needed, already up-to-date",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: v1Y0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
errExpected: false,
|
||||
@@ -181,16 +179,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "get component version failed",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: "",
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: "",
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: v1Y0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
errExpected: true,
|
||||
@@ -198,16 +196,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "there is version information about multiple components",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: "multiVersion",
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: "multiVersion",
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: v1Y0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
errExpected: true,
|
||||
@@ -215,16 +213,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "get kubeadm version failed",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: "",
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: "",
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: v1Y0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
errExpected: true,
|
||||
@@ -232,16 +230,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "get kubelet version failed",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: "",
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: "",
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: v1Y0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
errExpected: true,
|
||||
@@ -249,16 +247,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "deploy DNS failed",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: v1Y0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
@@ -267,17 +265,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "get stable version from CI label failed",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y0.String(),
|
||||
componentVersion: v1Y0.String(),
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y0.String(),
|
||||
stableVersion: "",
|
||||
coreDNSVersion: "",
|
||||
coreDNSError: errors.New("multiple DNS addon deployment"),
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
deployDNSFailed: true,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: false,
|
||||
errExpected: true,
|
||||
@@ -285,16 +282,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "simple patch version upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y2.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y2.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y3.String(),
|
||||
stableVersion: v1Y3.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
|
||||
@@ -330,16 +327,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "simple patch version upgrade with external etcd",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y2.String(),
|
||||
isExternalEtcd: true,
|
||||
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y2.String(),
|
||||
isExternalEtcd: true,
|
||||
stablePatchVersion: v1Y3.String(),
|
||||
stableVersion: v1Y3.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
|
||||
@@ -375,16 +372,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "no version provided to offline version getter does not change behavior",
|
||||
vg: NewOfflineVersionGetter(&fakeVersionGetter{
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y2.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y2.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y3.String(),
|
||||
stableVersion: v1Y3.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
}, ""),
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
|
||||
@@ -420,16 +417,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "minor version upgrade only",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Z0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y1.String(),
|
||||
componentVersion: v1Y1.String(),
|
||||
kubeletVersion: v1Y1.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Z0.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y1.String(),
|
||||
stableVersion: v1Z0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "stable version",
|
||||
@@ -465,16 +462,16 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "both minor version upgrade and patch version upgrade available",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y3.String(),
|
||||
componentVersion: v1Y3.String(),
|
||||
kubeletVersion: v1Y3.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y3.String(),
|
||||
componentVersion: v1Y3.String(),
|
||||
kubeletVersion: v1Y3.String(), // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y5.String(),
|
||||
stableVersion: v1Z1.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
|
||||
@@ -537,17 +534,17 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "allow experimental upgrades, but no upgrade available",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Z0alpha2.String(),
|
||||
componentVersion: v1Z0alpha2.String(),
|
||||
kubeletVersion: v1Y5.String(),
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Z0alpha2.String(),
|
||||
componentVersion: v1Z0alpha2.String(),
|
||||
kubeletVersion: v1Y5.String(),
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y5.String(),
|
||||
stableVersion: v1Y5.String(),
|
||||
latestVersion: v1Z0alpha2.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: nil,
|
||||
allowExperimental: true,
|
||||
errExpected: false,
|
||||
@@ -555,17 +552,17 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade to an unstable version should be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Y5.String(),
|
||||
componentVersion: v1Y5.String(),
|
||||
kubeletVersion: v1Y5.String(),
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Y5.String(),
|
||||
componentVersion: v1Y5.String(),
|
||||
kubeletVersion: v1Y5.String(),
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y5.String(),
|
||||
stableVersion: v1Y5.String(),
|
||||
latestVersion: v1Z0alpha2.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "experimental version",
|
||||
@@ -601,17 +598,17 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade from an unstable version to an unstable version should be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1Z0alpha1.String(),
|
||||
componentVersion: v1Z0alpha1.String(),
|
||||
kubeletVersion: v1Y5.String(),
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1Z0alpha1.String(),
|
||||
componentVersion: v1Z0alpha1.String(),
|
||||
kubeletVersion: v1Y5.String(),
|
||||
kubeadmVersion: v1Y5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1Y5.String(),
|
||||
stableVersion: v1Y5.String(),
|
||||
latestVersion: v1Z0alpha2.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "experimental version",
|
||||
@@ -647,18 +644,18 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "v1.X.0-alpha.0 should be ignored",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1X5.String(),
|
||||
stableVersion: v1X5.String(),
|
||||
latestDevBranchVersion: v1Z0beta1.String(),
|
||||
latestVersion: v1Y0alpha0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "experimental version",
|
||||
@@ -694,18 +691,18 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade to an RC version should be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1X5.String(),
|
||||
stableVersion: v1X5.String(),
|
||||
latestDevBranchVersion: v1Z0rc1.String(),
|
||||
latestVersion: v1Y0alpha1.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "release candidate version",
|
||||
@@ -741,18 +738,18 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "it is possible (but very uncommon) that the latest version from the previous branch is an rc and the current latest version is alpha.0. In that case, show the RC",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1X5.String(),
|
||||
stableVersion: v1X5.String(),
|
||||
latestDevBranchVersion: v1Z0rc1.String(),
|
||||
latestVersion: v1Y0alpha0.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "experimental version", // Note that this is considered an experimental version in this uncommon scenario
|
||||
@@ -788,18 +785,18 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade to an RC version should be supported. There may also be an even newer unstable version.",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
|
||||
clusterVersion: v1X5.String(),
|
||||
componentVersion: v1X5.String(),
|
||||
kubeletVersion: v1X5.String(),
|
||||
kubeadmVersion: v1X5.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
stablePatchVersion: v1X5.String(),
|
||||
stableVersion: v1X5.String(),
|
||||
latestDevBranchVersion: v1Z0rc1.String(),
|
||||
latestVersion: v1Y0alpha1.String(),
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
},
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "release candidate version",
|
||||
@@ -868,8 +865,9 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
kubeletVersion: v1Y0.String(),
|
||||
kubeadmVersion: v1Y1.String(),
|
||||
etcdVersion: fakeCurrentEtcdVersion,
|
||||
coreDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
coreDNSError: nil,
|
||||
}, v1Z1.String()),
|
||||
beforeDNSVersion: fakeCurrentCoreDNSVersion,
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: fmt.Sprintf("version in the v%d.%d series", v1Y0.Major(), v1Y0.Minor()),
|
||||
@@ -906,12 +904,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
// Kubernetes release.
|
||||
for _, rt := range tests {
|
||||
t.Run(rt.name, func(t *testing.T) {
|
||||
|
||||
dnsName := constants.CoreDNSDeploymentName
|
||||
|
||||
client := newMockClientForTest(t, dnsName, rt.beforeDNSVersion, rt.deployDNSFailed)
|
||||
|
||||
actualUpgrades, actualErr := GetAvailableUpgrades(rt.vg, rt.allowExperimental, rt.allowRCs, client, &output.TextPrinter{})
|
||||
actualUpgrades, actualErr := GetAvailableUpgrades(rt.vg, rt.allowExperimental, rt.allowRCs, &output.TextPrinter{})
|
||||
if diff := cmp.Diff(rt.expectedUpgrades, actualUpgrades); len(diff) > 0 {
|
||||
t.Errorf("failed TestGetAvailableUpgrades\n\texpected upgrades:\n%v\n\tgot:\n%v\n\tdiff:\n%v", rt.expectedUpgrades, actualUpgrades, diff)
|
||||
}
|
||||
@@ -1100,42 +1093,3 @@ func TestGetSuggestedEtcdVersion(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func newMockClientForTest(t *testing.T, dnsName string, dnsVersion string, multiDNS bool) *clientsetfake.Clientset {
|
||||
client := clientsetfake.NewSimpleClientset()
|
||||
createDeployment := func(name string) {
|
||||
_, err := client.AppsV1().Deployments(metav1.NamespaceSystem).Create(context.TODO(), &apps.Deployment{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "Deployment",
|
||||
APIVersion: "apps/v1",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: dnsName + name,
|
||||
Namespace: "kube-system",
|
||||
Labels: map[string]string{
|
||||
"k8s-app": "kube-dns",
|
||||
},
|
||||
},
|
||||
Spec: apps.DeploymentSpec{
|
||||
Template: v1.PodTemplateSpec{
|
||||
Spec: v1.PodSpec{
|
||||
Containers: []v1.Container{
|
||||
{
|
||||
Image: "test:" + dnsVersion + name,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}, metav1.CreateOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("error creating deployment: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
createDeployment("")
|
||||
if multiDNS {
|
||||
createDeployment("dns2")
|
||||
}
|
||||
return client
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ import (
|
||||
"k8s.io/component-base/version"
|
||||
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns"
|
||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/errors"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/util/image"
|
||||
@@ -46,6 +47,8 @@ type VersionGetter interface {
|
||||
KubeletVersions() (map[string][]string, error)
|
||||
// ComponentVersions should return a map with a version and a list of node names that describes how many a given control-plane components there are for that version
|
||||
ComponentVersions(string) (map[string][]string, error)
|
||||
// DNSAddonVersion returns, if deployed, the CoreDNS image tag
|
||||
DNSAddonVersion() (string, error)
|
||||
}
|
||||
|
||||
// KubeVersionGetter handles the version-fetching mechanism from external sources
|
||||
@@ -130,6 +133,11 @@ func (g *KubeVersionGetter) KubeletVersions() (map[string][]string, error) {
|
||||
return kubeletVersions, nil
|
||||
}
|
||||
|
||||
// DNSAddonVersion returns the CoreDNS image deployed in the cluster, or an error in case of multiple instances.
|
||||
func (g *KubeVersionGetter) DNSAddonVersion() (string, error) {
|
||||
return dns.DeployedDNSAddon(g.client)
|
||||
}
|
||||
|
||||
// ComponentVersions gets the versions of the control-plane components in the cluster.
|
||||
// The name parameter is the name of the component to get the versions for.
|
||||
// The function returns a map with the version as the key and a list of node names as the value.
|
||||
|
||||
Reference in New Issue
Block a user