From 90faa6b5fd1ef390f7e2362479337e69015914a9 Mon Sep 17 00:00:00 2001 From: Ciprian Hacman Date: Sun, 15 May 2022 08:46:33 +0300 Subject: [PATCH] Allow overriding the kubernetes version when upgrading the cluster --- cmd/kops/upgrade_cluster.go | 17 +++++++++++++++-- docs/cli/kops_upgrade_cluster.md | 7 ++++--- docs/releases/1.24-NOTES.md | 2 ++ 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/cmd/kops/upgrade_cluster.go b/cmd/kops/upgrade_cluster.go index 1445b10bcf..f964c33532 100644 --- a/cmd/kops/upgrade_cluster.go +++ b/cmd/kops/upgrade_cluster.go @@ -58,6 +58,8 @@ type UpgradeClusterOptions struct { ClusterName string Yes bool Channel string + // KubernetesVersion is the k8s version to use for upgrade. + KubernetesVersion string } func NewCmdUpgradeCluster(f *util.Factory, out io.Writer) *cobra.Command { @@ -80,6 +82,8 @@ func NewCmdUpgradeCluster(f *util.Factory, out io.Writer) *cobra.Command { cmd.Flags().BoolVarP(&options.Yes, "yes", "y", false, "Apply update") cmd.Flags().StringVar(&options.Channel, "channel", "", "Channel to use for upgrade") cmd.RegisterFlagCompletionFunc("channel", completeChannel) + cmd.Flags().StringVar(&options.KubernetesVersion, "kubernetes-version", "", "Kubernetes version to use for upgrade") + cmd.RegisterFlagCompletionFunc("kubernetes-version", completeKubernetesVersion) return cmd } @@ -149,12 +153,21 @@ func RunUpgradeCluster(ctx context.Context, f *util.Factory, out io.Writer, opti } } - proposedKubernetesVersion := kopsapi.RecommendedKubernetesVersion(channel, kops.Version) + var proposedKubernetesVersion *semver.Version + if options.KubernetesVersion != "" { + proposedKubernetesVersion, err = kopsutil.ParseKubernetesVersion(options.KubernetesVersion) + if err != nil { + klog.Warningf("error parsing KubernetesVersion %q", cluster.Spec.KubernetesVersion) + } + } + if proposedKubernetesVersion == nil { + proposedKubernetesVersion = kopsapi.RecommendedKubernetesVersion(channel, kops.Version) + } // We won't propose a downgrade // TODO: What if a kubernetes version is bad? if currentKubernetesVersion != nil && proposedKubernetesVersion != nil && currentKubernetesVersion.GT(*proposedKubernetesVersion) { - klog.Warningf("cluster version %q is greater than recommended version %q", *currentKubernetesVersion, *proposedKubernetesVersion) + klog.Warningf("cluster version %q is greater than the desired version %q", *currentKubernetesVersion, *proposedKubernetesVersion) proposedKubernetesVersion = currentKubernetesVersion } diff --git a/docs/cli/kops_upgrade_cluster.md b/docs/cli/kops_upgrade_cluster.md index 973fb48b58..8fe4fc7ef6 100644 --- a/docs/cli/kops_upgrade_cluster.md +++ b/docs/cli/kops_upgrade_cluster.md @@ -25,9 +25,10 @@ kops upgrade cluster [CLUSTER] [flags] ### Options ``` - --channel string Channel to use for upgrade - -h, --help help for cluster - -y, --yes Apply update + --channel string Channel to use for upgrade + -h, --help help for cluster + --kubernetes-version string Kubernetes version to use for upgrade + -y, --yes Apply update ``` ### Options inherited from parent commands diff --git a/docs/releases/1.24-NOTES.md b/docs/releases/1.24-NOTES.md index 9cb5369c00..03b4e1b213 100644 --- a/docs/releases/1.24-NOTES.md +++ b/docs/releases/1.24-NOTES.md @@ -25,6 +25,8 @@ kOps will directly manage the Karpenter Provisioner resources. Read more about h * Adds support for Rocky Linux 8 +* Adds support for overriding the Kubernetes version when upgrading a cluster by using the `--kubernetes-version` flag. + * The minimum version for the Terraform AWS Provider has been bumped to 4.0.0 to address the deprecation of the aws_s3_bucket_object resource and its replacement with the aws_s3_object resource. Such resources will be destroyed and recreated without downtime when applying the changes. * ARM64 support for nvidia device driver. Nvidia nodes on ARM64 requires Ubuntu 22.04 AMIs.