diff --git a/pkg/model/components/context.go b/pkg/model/components/context.go index c8b4dba99da6a..bf9c643334a0c 100644 --- a/pkg/model/components/context.go +++ b/pkg/model/components/context.go @@ -51,23 +51,6 @@ func (c *OptionsContext) IsKubernetesLT(version string) bool { return !c.IsKubernetesGTE(version) } -// KubernetesVersion parses the semver version of kubernetes, from the cluster spec -// Deprecated: prefer using OptionsContext.KubernetesVersion -func KubernetesVersion(clusterSpec *kops.ClusterSpec) (*semver.Version, error) { - kubernetesVersion := clusterSpec.KubernetesVersion - - if kubernetesVersion == "" { - return nil, fmt.Errorf("KubernetesVersion is required") - } - - sv, err := util.ParseKubernetesVersion(kubernetesVersion) - if err != nil { - return nil, fmt.Errorf("unable to determine kubernetes version from %q", kubernetesVersion) - } - - return sv, nil -} - // UsesKubenet returns true if our networking is derived from kubenet func UsesKubenet(networking *kops.NetworkingSpec) bool { if networking == nil { diff --git a/pkg/model/components/kubecontrollermanager.go b/pkg/model/components/kubecontrollermanager.go index f418573751012..91cdb79382793 100644 --- a/pkg/model/components/kubecontrollermanager.go +++ b/pkg/model/components/kubecontrollermanager.go @@ -35,7 +35,7 @@ const ( // KubeControllerManagerOptionsBuilder adds options for the kubernetes controller manager to the model. type KubeControllerManagerOptionsBuilder struct { - Context *OptionsContext + *OptionsContext } var _ loader.OptionsBuilder = &KubeControllerManagerOptionsBuilder{} @@ -49,17 +49,12 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o interface{}) error } kcm := clusterSpec.KubeControllerManager - kubernetesVersion, err := KubernetesVersion(clusterSpec) - if err != nil { - return fmt.Errorf("unable to parse kubernetesVersion %s", err) - } - // Tune the duration upon which the volume attach detach component is called. // See https://github.com/kubernetes/kubernetes/pull/39551 // TLDR; set this too low, and have a few EBS Volumes, and you will spam AWS api { - klog.V(4).Infof("Kubernetes version %q supports AttachDetachReconcileSyncPeriod; will configure", kubernetesVersion) + klog.V(4).Infof("Kubernetes version %q supports AttachDetachReconcileSyncPeriod; will configure", b.KubernetesVersion) // If not set ... or set to 0s ... which is stupid if kcm.AttachDetachReconcileSyncPeriod == nil || kcm.AttachDetachReconcileSyncPeriod.Duration.String() == "0s" { @@ -80,14 +75,14 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o interface{}) error } } - kcm.ClusterName = b.Context.ClusterName + kcm.ClusterName = b.ClusterName switch kops.CloudProviderID(clusterSpec.CloudProvider) { case kops.CloudProviderAWS: kcm.CloudProvider = "aws" case kops.CloudProviderGCE: kcm.CloudProvider = "gce" - kcm.ClusterName = gce.SafeClusterName(b.Context.ClusterName) + kcm.ClusterName = gce.SafeClusterName(b.ClusterName) case kops.CloudProviderDO: kcm.CloudProvider = "external" @@ -108,7 +103,7 @@ func (b *KubeControllerManagerOptionsBuilder) BuildOptions(o interface{}) error kcm.LogLevel = 2 - image, err := Image("kube-controller-manager", clusterSpec, b.Context.AssetBuilder) + image, err := Image("kube-controller-manager", clusterSpec, b.AssetBuilder) if err != nil { return err } diff --git a/pkg/model/components/kubecontrollermanager_test.go b/pkg/model/components/kubecontrollermanager_test.go index 7184c72d467cc..e8b2fb6a73b33 100644 --- a/pkg/model/components/kubecontrollermanager_test.go +++ b/pkg/model/components/kubecontrollermanager_test.go @@ -45,7 +45,7 @@ func Test_Build_KCM_Builder(t *testing.T) { b := assets.NewAssetBuilder(c, "") kcm := &KubeControllerManagerOptionsBuilder{ - Context: &OptionsContext{ + OptionsContext: &OptionsContext{ AssetBuilder: b, }, } @@ -68,7 +68,7 @@ func Test_Build_KCM_Builder_Change_Duration(t *testing.T) { b := assets.NewAssetBuilder(c, "") kcm := &KubeControllerManagerOptionsBuilder{ - Context: &OptionsContext{ + OptionsContext: &OptionsContext{ AssetBuilder: b, }, } diff --git a/pkg/model/components/kubelet.go b/pkg/model/components/kubelet.go index 71ac84ed8642f..964873455777a 100644 --- a/pkg/model/components/kubelet.go +++ b/pkg/model/components/kubelet.go @@ -29,7 +29,7 @@ import ( // KubeletOptionsBuilder adds options for kubelets type KubeletOptionsBuilder struct { - Context *OptionsContext + *OptionsContext } var _ loader.OptionsBuilder = &KubeletOptionsBuilder{} @@ -38,11 +38,6 @@ var _ loader.OptionsBuilder = &KubeletOptionsBuilder{} func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error { clusterSpec := o.(*kops.ClusterSpec) - kubernetesVersion, err := KubernetesVersion(clusterSpec) - if err != nil { - return err - } - if clusterSpec.Kubelet == nil { clusterSpec.Kubelet = &kops.KubeletConfigSpec{} } @@ -67,7 +62,7 @@ func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error { // AllowPrivileged is deprecated and removed in v1.14. // See https://github.com/kubernetes/kubernetes/pull/71835 - if kubernetesVersion.Major == 1 && kubernetesVersion.Minor >= 14 { + if b.IsKubernetesGTE("1.14") { if clusterSpec.Kubelet.AllowPrivileged != nil { // If it is explicitly set to false, return an error, because this // behavior is no longer supported in v1.14 (the default was true, prior). @@ -110,7 +105,7 @@ func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error { // Disk based evictions are not detecting the correct disk capacity in Kubernetes 1.19 and are // blocking scheduling by tainting worker nodes with "node.kubernetes.io/disk-pressure:NoSchedule" // TODO: Re-enable once the Kubelet issue is fixed - if b.Context.IsKubernetesLT("1.19") { + if b.IsKubernetesLT("1.19") { // Disk based eviction (evict old images) // We don't need to specify both, but it seems harmless / safer evictionHard = append(evictionHard, "nodefs.available<10%") @@ -162,7 +157,7 @@ func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error { clusterSpec.CloudConfig = &kops.CloudConfiguration{} } clusterSpec.CloudConfig.Multizone = fi.Bool(true) - clusterSpec.CloudConfig.NodeTags = fi.String(GCETagForRole(b.Context.ClusterName, kops.InstanceGroupRoleNode)) + clusterSpec.CloudConfig.NodeTags = fi.String(GCETagForRole(b.ClusterName, kops.InstanceGroupRoleNode)) // Use the hostname from the GCE metadata service // if hostnameOverride is not set. @@ -199,7 +194,8 @@ func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error { // Specify our pause image image := "k8s.gcr.io/pause:3.2" - if image, err = b.Context.AssetBuilder.RemapImage(image); err != nil { + var err error + if image, err = b.AssetBuilder.RemapImage(image); err != nil { return err } clusterSpec.Kubelet.PodInfraContainerImage = image @@ -209,7 +205,7 @@ func (b *KubeletOptionsBuilder) BuildOptions(o interface{}) error { clusterSpec.Kubelet.FeatureGates = make(map[string]string) } if _, found := clusterSpec.Kubelet.FeatureGates["ExperimentalCriticalPodAnnotation"]; !found { - if b.Context.IsKubernetesLT("1.16") { + if b.IsKubernetesLT("1.16") { clusterSpec.Kubelet.FeatureGates["ExperimentalCriticalPodAnnotation"] = "true" } } diff --git a/pkg/model/components/kubelet_test.go b/pkg/model/components/kubelet_test.go index f056c20a3ce96..4d7c4617e9afe 100644 --- a/pkg/model/components/kubelet_test.go +++ b/pkg/model/components/kubelet_test.go @@ -20,6 +20,7 @@ import ( "testing" "k8s.io/kops/pkg/apis/kops" + "k8s.io/kops/pkg/apis/kops/util" "k8s.io/kops/pkg/assets" ) @@ -37,13 +38,13 @@ func buildKubeletTestCluster() *kops.Cluster { func buildOptions(cluster *kops.Cluster) error { ab := assets.NewAssetBuilder(cluster, "") - ver, err := KubernetesVersion(&cluster.Spec) + ver, err := util.ParseKubernetesVersion(cluster.Spec.KubernetesVersion) if err != nil { return err } builder := KubeletOptionsBuilder{ - Context: &OptionsContext{ + OptionsContext: &OptionsContext{ AssetBuilder: ab, KubernetesVersion: *ver, }, diff --git a/upup/pkg/fi/cloudup/populate_cluster_spec.go b/upup/pkg/fi/cloudup/populate_cluster_spec.go index b16d8e5f6dae3..8a6b84e93c562 100644 --- a/upup/pkg/fi/cloudup/populate_cluster_spec.go +++ b/upup/pkg/fi/cloudup/populate_cluster_spec.go @@ -277,8 +277,8 @@ func (c *populateClusterSpec) run(clientset simple.Clientset) error { codeModels = append(codeModels, &components.ContainerdOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.NetworkingOptionsBuilder{Context: optionsContext}) codeModels = append(codeModels, &components.KubeDnsOptionsBuilder{Context: optionsContext}) - codeModels = append(codeModels, &components.KubeletOptionsBuilder{Context: optionsContext}) - codeModels = append(codeModels, &components.KubeControllerManagerOptionsBuilder{Context: optionsContext}) + codeModels = append(codeModels, &components.KubeletOptionsBuilder{OptionsContext: optionsContext}) + codeModels = append(codeModels, &components.KubeControllerManagerOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.KubeSchedulerOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.KubeProxyOptionsBuilder{Context: optionsContext}) codeModels = append(codeModels, &components.CiliumOptionsBuilder{Context: optionsContext})