From 81d5b18dfb96a3276c831fadbd4a0dca2c64745d Mon Sep 17 00:00:00 2001 From: "Lubomir I. Ivanov" Date: Wed, 28 Apr 2021 00:33:30 +0300 Subject: [PATCH] kubeadm: remove deprecated hyperkube image support in v1beta3 The hyperkube image support was deprecated. Remove the field ClusterConfiguration.UseHyperKubeImage from the new v1beta3 API. --- cmd/kubeadm/app/apis/kubeadm/types.go | 5 ----- .../app/apis/kubeadm/v1beta2/conversion.go | 6 ++++++ .../v1beta2/zz_generated.conversion.go | 18 ++++++---------- cmd/kubeadm/app/apis/kubeadm/v1beta3/doc.go | 4 ++-- cmd/kubeadm/app/apis/kubeadm/v1beta3/types.go | 5 ----- .../v1beta3/zz_generated.conversion.go | 2 -- cmd/kubeadm/app/constants/constants.go | 2 -- cmd/kubeadm/app/images/images.go | 21 +++++-------------- cmd/kubeadm/app/images/images_test.go | 8 ------- .../app/phases/upgrade/staticpods_test.go | 1 - 10 files changed, 19 insertions(+), 53 deletions(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/types.go b/cmd/kubeadm/app/apis/kubeadm/types.go index 30bd8bfc670..cc32214555d 100644 --- a/cmd/kubeadm/app/apis/kubeadm/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/types.go @@ -116,11 +116,6 @@ type ClusterConfiguration struct { // +k8s:conversion-gen=false CIImageRepository string - // UseHyperKubeImage controls if hyperkube should be used for Kubernetes components instead of their respective separate images - // DEPRECATED: As hyperkube is itself deprecated, this fields is too. It will be removed in future kubeadm config versions, kubeadm - // will print multiple warnings when set to true, and at some point it may become ignored. - UseHyperKubeImage bool - // FeatureGates enabled by the user. FeatureGates map[string]bool diff --git a/cmd/kubeadm/app/apis/kubeadm/v1beta2/conversion.go b/cmd/kubeadm/app/apis/kubeadm/v1beta2/conversion.go index d92ce96f289..56d650ff5c9 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1beta2/conversion.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1beta2/conversion.go @@ -36,3 +36,9 @@ func Convert_v1beta2_InitConfiguration_To_kubeadm_InitConfiguration(in *InitConf SetDefaults_ClusterConfiguration(clusterCfg) return Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(clusterCfg, &out.ClusterConfiguration, s) } + +// Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration is required since UseHyperKubeImage +// does not exist in the internal type. +func Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in *ClusterConfiguration, out *kubeadm.ClusterConfiguration, s conversion.Scope) error { + return autoConvert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in, out, s) +} diff --git a/cmd/kubeadm/app/apis/kubeadm/v1beta2/zz_generated.conversion.go b/cmd/kubeadm/app/apis/kubeadm/v1beta2/zz_generated.conversion.go index 6bcfa1e2a15..199ccb52cad 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1beta2/zz_generated.conversion.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1beta2/zz_generated.conversion.go @@ -87,11 +87,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*ClusterConfiguration)(nil), (*kubeadm.ClusterConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(a.(*ClusterConfiguration), b.(*kubeadm.ClusterConfiguration), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*kubeadm.ClusterConfiguration)(nil), (*ClusterConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_kubeadm_ClusterConfiguration_To_v1beta2_ClusterConfiguration(a.(*kubeadm.ClusterConfiguration), b.(*ClusterConfiguration), scope) }); err != nil { @@ -242,6 +237,11 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*ClusterConfiguration)(nil), (*kubeadm.ClusterConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(a.(*ClusterConfiguration), b.(*kubeadm.ClusterConfiguration), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*InitConfiguration)(nil), (*kubeadm.InitConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta2_InitConfiguration_To_kubeadm_InitConfiguration(a.(*InitConfiguration), b.(*kubeadm.InitConfiguration), scope) }); err != nil { @@ -401,17 +401,12 @@ func autoConvert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in } out.CertificatesDir = in.CertificatesDir out.ImageRepository = in.ImageRepository - out.UseHyperKubeImage = in.UseHyperKubeImage + // WARNING: in.UseHyperKubeImage requires manual conversion: does not exist in peer-type out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) out.ClusterName = in.ClusterName return nil } -// Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration is an autogenerated conversion function. -func Convert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in *ClusterConfiguration, out *kubeadm.ClusterConfiguration, s conversion.Scope) error { - return autoConvert_v1beta2_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in, out, s) -} - func autoConvert_kubeadm_ClusterConfiguration_To_v1beta2_ClusterConfiguration(in *kubeadm.ClusterConfiguration, out *ClusterConfiguration, s conversion.Scope) error { // INFO: in.ComponentConfigs opted out of conversion generation if err := Convert_kubeadm_Etcd_To_v1beta2_Etcd(&in.Etcd, &out.Etcd, s); err != nil { @@ -437,7 +432,6 @@ func autoConvert_kubeadm_ClusterConfiguration_To_v1beta2_ClusterConfiguration(in out.CertificatesDir = in.CertificatesDir out.ImageRepository = in.ImageRepository // INFO: in.CIImageRepository opted out of conversion generation - out.UseHyperKubeImage = in.UseHyperKubeImage out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) out.ClusterName = in.ClusterName return nil diff --git a/cmd/kubeadm/app/apis/kubeadm/v1beta3/doc.go b/cmd/kubeadm/app/apis/kubeadm/v1beta3/doc.go index d0ece235627..ead50e5907a 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1beta3/doc.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1beta3/doc.go @@ -23,7 +23,8 @@ limitations under the License. // This version improves on the v1beta2 format by fixing some minor issues and adding a few new fields. // // A list of changes since v1beta2: -// - TODO +// - The deprecated "ClusterConfiguration.useHyperKubeImage" field has been removed. +// Kubeadm no longer supports the hyperkube image. // // Migration from old kubeadm config versions // @@ -233,7 +234,6 @@ limitations under the License. // pathType: File // certificatesDir: "/etc/kubernetes/pki" // imageRepository: "k8s.gcr.io" -// useHyperKubeImage: false // clusterName: "example-cluster" // --- // apiVersion: kubelet.config.k8s.io/v1beta1 diff --git a/cmd/kubeadm/app/apis/kubeadm/v1beta3/types.go b/cmd/kubeadm/app/apis/kubeadm/v1beta3/types.go index 80646797d55..1097f608eda 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1beta3/types.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1beta3/types.go @@ -101,11 +101,6 @@ type ClusterConfiguration struct { // will be used for all the other images. ImageRepository string `json:"imageRepository,omitempty"` - // UseHyperKubeImage controls if hyperkube should be used for Kubernetes components instead of their respective separate images - // DEPRECATED: As hyperkube is itself deprecated, this fields is too. It will be removed in future kubeadm config versions, kubeadm - // will print multiple warnings when set to true, and at some point it may become ignored. - UseHyperKubeImage bool `json:"useHyperKubeImage,omitempty"` - // FeatureGates enabled by the user. FeatureGates map[string]bool `json:"featureGates,omitempty"` diff --git a/cmd/kubeadm/app/apis/kubeadm/v1beta3/zz_generated.conversion.go b/cmd/kubeadm/app/apis/kubeadm/v1beta3/zz_generated.conversion.go index 51b0354de66..eeaf727a592 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1beta3/zz_generated.conversion.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1beta3/zz_generated.conversion.go @@ -401,7 +401,6 @@ func autoConvert_v1beta3_ClusterConfiguration_To_kubeadm_ClusterConfiguration(in } out.CertificatesDir = in.CertificatesDir out.ImageRepository = in.ImageRepository - out.UseHyperKubeImage = in.UseHyperKubeImage out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) out.ClusterName = in.ClusterName return nil @@ -437,7 +436,6 @@ func autoConvert_kubeadm_ClusterConfiguration_To_v1beta3_ClusterConfiguration(in out.CertificatesDir = in.CertificatesDir out.ImageRepository = in.ImageRepository // INFO: in.CIImageRepository opted out of conversion generation - out.UseHyperKubeImage = in.UseHyperKubeImage out.FeatureGates = *(*map[string]bool)(unsafe.Pointer(&in.FeatureGates)) out.ClusterName = in.ClusterName return nil diff --git a/cmd/kubeadm/app/constants/constants.go b/cmd/kubeadm/app/constants/constants.go index 96a7b12ab38..d726b75e0b2 100644 --- a/cmd/kubeadm/app/constants/constants.go +++ b/cmd/kubeadm/app/constants/constants.go @@ -302,8 +302,6 @@ const ( KubeScheduler = "kube-scheduler" // KubeProxy defines variable used internally when referring to kube-proxy component KubeProxy = "kube-proxy" - // HyperKube defines variable used internally when referring to the hyperkube image - HyperKube = "hyperkube" // CoreDNS defines variable used internally when referring to the CoreDNS component CoreDNS = "CoreDNS" // Kubelet defines variable used internally when referring to the Kubelet diff --git a/cmd/kubeadm/app/images/images.go b/cmd/kubeadm/app/images/images.go index edf087e9c46..560c6afc49d 100644 --- a/cmd/kubeadm/app/images/images.go +++ b/cmd/kubeadm/app/images/images.go @@ -25,20 +25,14 @@ import ( kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util" ) -const extraHyperKubeNote = ` The "useHyperKubeImage" field will be removed from future kubeadm config versions and possibly ignored in future releases.` - // GetGenericImage generates and returns a platform agnostic image (backed by manifest list) func GetGenericImage(prefix, image, tag string) string { return fmt.Sprintf("%s/%s:%s", prefix, image, tag) } // GetKubernetesImage generates and returns the image for the components managed in the Kubernetes main repository, -// including the control-plane components and kube-proxy. If specified, the HyperKube image will be used. +// including the control-plane components and kube-proxy. func GetKubernetesImage(image string, cfg *kubeadmapi.ClusterConfiguration) string { - if cfg.UseHyperKubeImage && image != constants.HyperKube { - klog.Warningf(`WARNING: DEPRECATED use of the "hyperkube" image in place of %q.`+extraHyperKubeNote, image) - image = constants.HyperKube - } repoPrefix := cfg.GetControlPlaneImageRepository() kubernetesImageTag := kubeadmutil.KubernetesVersionToImageTag(cfg.KubernetesVersion) return GetGenericImage(repoPrefix, image, kubernetesImageTag) @@ -91,15 +85,10 @@ func GetControlPlaneImages(cfg *kubeadmapi.ClusterConfiguration) []string { imgs := []string{} // start with core kubernetes images - if cfg.UseHyperKubeImage { - klog.Warningln(`WARNING: DEPRECATED use of the "hyperkube" image for the Kubernetes control plane.` + extraHyperKubeNote) - imgs = append(imgs, GetKubernetesImage(constants.HyperKube, cfg)) - } else { - imgs = append(imgs, GetKubernetesImage(constants.KubeAPIServer, cfg)) - imgs = append(imgs, GetKubernetesImage(constants.KubeControllerManager, cfg)) - imgs = append(imgs, GetKubernetesImage(constants.KubeScheduler, cfg)) - imgs = append(imgs, GetKubernetesImage(constants.KubeProxy, cfg)) - } + imgs = append(imgs, GetKubernetesImage(constants.KubeAPIServer, cfg)) + imgs = append(imgs, GetKubernetesImage(constants.KubeControllerManager, cfg)) + imgs = append(imgs, GetKubernetesImage(constants.KubeScheduler, cfg)) + imgs = append(imgs, GetKubernetesImage(constants.KubeProxy, cfg)) // pause is not available on the ci image repository so use the default image repository. imgs = append(imgs, GetPauseImage(cfg)) diff --git a/cmd/kubeadm/app/images/images_test.go b/cmd/kubeadm/app/images/images_test.go index f5165406e0f..fb4cfd8aa08 100644 --- a/cmd/kubeadm/app/images/images_test.go +++ b/cmd/kubeadm/app/images/images_test.go @@ -50,14 +50,6 @@ func TestGetKubernetesImage(t *testing.T) { expected string cfg *kubeadmapi.ClusterConfiguration }{ - { - expected: GetGenericImage(gcrPrefix, constants.HyperKube, expected), - cfg: &kubeadmapi.ClusterConfiguration{ - ImageRepository: gcrPrefix, - KubernetesVersion: testversion, - UseHyperKubeImage: true, - }, - }, { image: constants.KubeAPIServer, expected: GetGenericImage(gcrPrefix, "kube-apiserver", expected), diff --git a/cmd/kubeadm/app/phases/upgrade/staticpods_test.go b/cmd/kubeadm/app/phases/upgrade/staticpods_test.go index c7da5a9401e..c0ab379b64d 100644 --- a/cmd/kubeadm/app/phases/upgrade/staticpods_test.go +++ b/cmd/kubeadm/app/phases/upgrade/staticpods_test.go @@ -86,7 +86,6 @@ networking: dnsDomain: cluster.local podSubnet: "" serviceSubnet: 10.96.0.0/12 -useHyperKubeImage: false `, kubeadmapiv1.SchemeGroupVersion.String()) // fakeWaiter is a fake apiclient.Waiter that returns errors it was initialized with