From 5ab9ccd4fb613496b2acf136dc9b5aa87ff91457 Mon Sep 17 00:00:00 2001 From: Michael Taufen Date: Thu, 8 Feb 2018 09:35:38 -0800 Subject: [PATCH] remove CAdvisorPort from KubeletConfiguration See: #56523, cAdvisor is becoming an implementation detail of Kubernetes, and we should not canonize its knobs on the KubeletConfiguration. --- cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go | 1 - cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD | 1 - cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go | 4 ---- .../app/apis/kubeadm/validation/validation_test.go | 2 -- cmd/kubelet/app/options/BUILD | 1 + cmd/kubelet/app/options/options.go | 11 ++++++++++- pkg/kubelet/apis/kubeletconfig/fuzzer/fuzzer.go | 1 - pkg/kubelet/apis/kubeletconfig/helpers_test.go | 1 - pkg/kubelet/apis/kubeletconfig/types.go | 2 -- pkg/kubelet/apis/kubeletconfig/v1alpha1/defaults.go | 4 ---- pkg/kubelet/apis/kubeletconfig/v1alpha1/types.go | 2 -- .../kubeletconfig/v1alpha1/zz_generated.conversion.go | 6 ------ .../kubeletconfig/v1alpha1/zz_generated.deepcopy.go | 9 --------- .../apis/kubeletconfig/validation/validation.go | 3 --- .../apis/kubeletconfig/validation/validation_test.go | 6 ++---- 15 files changed, 13 insertions(+), 41 deletions(-) diff --git a/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go b/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go index 7e667805e24..54195b2b2b6 100644 --- a/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go +++ b/cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go @@ -72,7 +72,6 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { Authentication: kubeletconfigv1alpha1.KubeletAuthentication{ X509: kubeletconfigv1alpha1.KubeletX509Authentication{ClientCAFile: "foo"}, }, - CAdvisorPort: utilpointer.Int32Ptr(0), }, } kubeletconfigv1alpha1.SetDefaults_KubeletConfiguration(obj.KubeletConfiguration.BaseConfig) diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD index edeb99e0b06..389e161b4b4 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/BUILD @@ -56,7 +56,6 @@ go_library( "//pkg/kubelet/apis/kubeletconfig/v1alpha1:go_default_library", "//pkg/proxy/apis/kubeproxyconfig/scheme:go_default_library", "//pkg/proxy/apis/kubeproxyconfig/v1alpha1:go_default_library", - "//pkg/util/pointer:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go index a2a967a0190..6920ab07615 100644 --- a/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go +++ b/cmd/kubeadm/app/apis/kubeadm/v1alpha1/defaults.go @@ -28,7 +28,6 @@ import ( kubeletconfigv1alpha1 "k8s.io/kubernetes/pkg/kubelet/apis/kubeletconfig/v1alpha1" kubeproxyscheme "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/scheme" kubeproxyconfigv1alpha1 "k8s.io/kubernetes/pkg/proxy/apis/kubeproxyconfig/v1alpha1" - utilpointer "k8s.io/kubernetes/pkg/util/pointer" ) const ( @@ -202,9 +201,6 @@ func SetDefaults_KubeletConfiguration(obj *MasterConfiguration) { if obj.KubeletConfiguration.BaseConfig.Authentication.X509.ClientCAFile == "" { obj.KubeletConfiguration.BaseConfig.Authentication.X509.ClientCAFile = DefaultCACertPath } - if obj.KubeletConfiguration.BaseConfig.CAdvisorPort == nil { - obj.KubeletConfiguration.BaseConfig.CAdvisorPort = utilpointer.Int32Ptr(0) - } scheme, _, _ := kubeletscheme.NewSchemeAndCodecs() if scheme != nil { diff --git a/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go b/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go index d23215d8590..897121a68fe 100644 --- a/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go +++ b/cmd/kubeadm/app/apis/kubeadm/validation/validation_test.go @@ -573,7 +573,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { EnforceNodeAllocatable: []string{"pods", "system-reserved", "kube-reserved"}, SystemCgroups: "", CgroupRoot: "", - CAdvisorPort: utilpointer.Int32Ptr(0), EventBurst: 10, EventRecordQPS: utilpointer.Int32Ptr(5), HealthzPort: utilpointer.Int32Ptr(10248), @@ -604,7 +603,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { EnforceNodeAllocatable: []string{"pods", "system-reserved", "kube-reserved", "illegal-key"}, SystemCgroups: "/", CgroupRoot: "", - CAdvisorPort: utilpointer.Int32Ptr(-10), EventBurst: -10, EventRecordQPS: utilpointer.Int32Ptr(-10), HealthzPort: utilpointer.Int32Ptr(-10), diff --git a/cmd/kubelet/app/options/BUILD b/cmd/kubelet/app/options/BUILD index d08afb55bab..8ba49aaa0c6 100644 --- a/cmd/kubelet/app/options/BUILD +++ b/cmd/kubelet/app/options/BUILD @@ -66,6 +66,7 @@ go_library( "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library", diff --git a/cmd/kubelet/app/options/options.go b/cmd/kubelet/app/options/options.go index 9dcbdd5c8b6..ce663dbb7ea 100644 --- a/cmd/kubelet/app/options/options.go +++ b/cmd/kubelet/app/options/options.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/pflag" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + utilvalidation "k8s.io/apimachinery/pkg/util/validation" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/apiserver/pkg/util/flag" "k8s.io/kubernetes/pkg/apis/componentconfig" @@ -115,6 +116,9 @@ type KubeletFlags struct { // is true and upon the initial registration of the node. RegisterWithTaints []core.Taint + // cAdvisorPort is the port of the localhost cAdvisor endpoint (set to 0 to disable) + CAdvisorPort int32 + // EXPERIMENTAL FLAGS // Whitelist of unsafe sysctls or sysctl patterns (ending in *). // +optional @@ -232,6 +236,8 @@ func NewKubeletFlags() *KubeletFlags { HostNetworkSources: []string{kubetypes.AllSource}, HostPIDSources: []string{kubetypes.AllSource}, HostIPCSources: []string{kubetypes.AllSource}, + // TODO(#56523): default CAdvisorPort to 0 (disabled) and deprecate it + CAdvisorPort: 4194, } } @@ -240,6 +246,9 @@ func ValidateKubeletFlags(f *KubeletFlags) error { if f.DynamicConfigDir.Provided() && !utilfeature.DefaultFeatureGate.Enabled(features.DynamicKubeletConfig) { return fmt.Errorf("the DynamicKubeletConfig feature gate must be enabled in order to use the --dynamic-config-dir flag") } + if f.CAdvisorPort != 0 && utilvalidation.IsValidPortNum(int(f.CAdvisorPort)) != nil { + return fmt.Errorf("invalid configuration: CAdvisorPort (--cadvisor-port) %v must be between 0 and 65535, inclusive", f.CAdvisorPort) + } return nil } @@ -333,6 +342,7 @@ func (f *KubeletFlags) AddFlags(fs *pflag.FlagSet) { fs.BoolVar(&f.RegisterNode, "register-node", f.RegisterNode, "Register the node with the apiserver. If --kubeconfig is not provided, this flag is irrelevant, as the Kubelet won't have an apiserver to register with. Default=true.") fs.Var(utiltaints.NewTaintsVar(&f.RegisterWithTaints), "register-with-taints", "Register the node with the given list of taints (comma separated \"=:\"). No-op if register-node is false.") fs.BoolVar(&f.Containerized, "containerized", f.Containerized, "Running kubelet in a container.") + fs.Int32Var(&f.CAdvisorPort, "cadvisor-port", f.CAdvisorPort, "The port of the localhost cAdvisor endpoint (set to 0 to disable)") // EXPERIMENTAL FLAGS fs.StringVar(&f.KubeletConfigFile, "config", f.KubeletConfigFile, " The Kubelet will load its initial configuration from this file. The path may be absolute or relative; relative paths start at the Kubelet's current working directory. Omit this flag to use the built-in default configuration values. Note that the format of the config file is still Alpha.") @@ -444,7 +454,6 @@ func AddKubeletConfigFlags(fs *pflag.FlagSet, c *kubeletconfig.KubeletConfigurat fs.BoolVar(&c.EnableDebuggingHandlers, "enable-debugging-handlers", c.EnableDebuggingHandlers, "Enables server endpoints for log collection and local running of containers and commands") fs.BoolVar(&c.EnableContentionProfiling, "contention-profiling", c.EnableContentionProfiling, "Enable lock contention profiling, if profiling is enabled") - fs.Int32Var(&c.CAdvisorPort, "cadvisor-port", c.CAdvisorPort, "The port of the localhost cAdvisor endpoint (set to 0 to disable)") fs.Int32Var(&c.HealthzPort, "healthz-port", c.HealthzPort, "The port of the localhost healthz endpoint (set to 0 to disable)") fs.Var(componentconfig.IPVar{Val: &c.HealthzBindAddress}, "healthz-bind-address", "The IP address for the healthz server to serve on (set to `0.0.0.0` for all IPv4 interfaces and `::` for all IPv6 interfaces)") fs.Int32Var(&c.OOMScoreAdj, "oom-score-adj", c.OOMScoreAdj, "The oom-score-adj value for kubelet process. Values must be within the range [-1000, 1000]") diff --git a/pkg/kubelet/apis/kubeletconfig/fuzzer/fuzzer.go b/pkg/kubelet/apis/kubeletconfig/fuzzer/fuzzer.go index 8692084d846..82d9e51e7f4 100644 --- a/pkg/kubelet/apis/kubeletconfig/fuzzer/fuzzer.go +++ b/pkg/kubelet/apis/kubeletconfig/fuzzer/fuzzer.go @@ -43,7 +43,6 @@ func Funcs(codecs runtimeserializer.CodecFactory) []interface{} { obj.Authorization.Webhook.CacheAuthorizedTTL = metav1.Duration{Duration: 5 * time.Minute} obj.Authorization.Webhook.CacheUnauthorizedTTL = metav1.Duration{Duration: 30 * time.Second} obj.Address = "0.0.0.0" - obj.CAdvisorPort = 4194 obj.VolumeStatsAggPeriod = metav1.Duration{Duration: time.Minute} obj.RuntimeRequestTimeout = metav1.Duration{Duration: 2 * time.Minute} obj.CPUCFSQuota = true diff --git a/pkg/kubelet/apis/kubeletconfig/helpers_test.go b/pkg/kubelet/apis/kubeletconfig/helpers_test.go index c58a043b451..b0a8757fd3d 100644 --- a/pkg/kubelet/apis/kubeletconfig/helpers_test.go +++ b/pkg/kubelet/apis/kubeletconfig/helpers_test.go @@ -144,7 +144,6 @@ var ( "Authorization.Mode", "Authorization.Webhook.CacheAuthorizedTTL.Duration", "Authorization.Webhook.CacheUnauthorizedTTL.Duration", - "CAdvisorPort", "CPUCFSQuota", "CPUManagerPolicy", "CPUManagerReconcilePeriod.Duration", diff --git a/pkg/kubelet/apis/kubeletconfig/types.go b/pkg/kubelet/apis/kubeletconfig/types.go index 7a6ab3d87a3..25805431abf 100644 --- a/pkg/kubelet/apis/kubeletconfig/types.go +++ b/pkg/kubelet/apis/kubeletconfig/types.go @@ -114,8 +114,6 @@ type KubeletConfiguration struct { EnableDebuggingHandlers bool // enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true. EnableContentionProfiling bool - // cAdvisorPort is the port of the localhost cAdvisor endpoint (set to 0 to disable) - CAdvisorPort int32 // healthzPort is the port of the localhost healthz endpoint (set to 0 to disable) HealthzPort int32 // healthzBindAddress is the IP address for the healthz server to serve diff --git a/pkg/kubelet/apis/kubeletconfig/v1alpha1/defaults.go b/pkg/kubelet/apis/kubeletconfig/v1alpha1/defaults.go index 59cdcabf7b5..ada91214d5c 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1alpha1/defaults.go +++ b/pkg/kubelet/apis/kubeletconfig/v1alpha1/defaults.go @@ -67,13 +67,9 @@ func SetDefaults_KubeletConfiguration(obj *KubeletConfiguration) { if obj.Authorization.Webhook.CacheUnauthorizedTTL == zeroDuration { obj.Authorization.Webhook.CacheUnauthorizedTTL = metav1.Duration{Duration: 30 * time.Second} } - if obj.Address == "" { obj.Address = "0.0.0.0" } - if obj.CAdvisorPort == nil { - obj.CAdvisorPort = utilpointer.Int32Ptr(4194) - } if obj.VolumeStatsAggPeriod == zeroDuration { obj.VolumeStatsAggPeriod = metav1.Duration{Duration: time.Minute} } diff --git a/pkg/kubelet/apis/kubeletconfig/v1alpha1/types.go b/pkg/kubelet/apis/kubeletconfig/v1alpha1/types.go index 09fa8608796..4b50e51b1f0 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1alpha1/types.go +++ b/pkg/kubelet/apis/kubeletconfig/v1alpha1/types.go @@ -114,8 +114,6 @@ type KubeletConfiguration struct { EnableDebuggingHandlers *bool `json:"enableDebuggingHandlers"` // enableContentionProfiling enables lock contention profiling, if enableDebuggingHandlers is true. EnableContentionProfiling bool `json:"enableContentionProfiling"` - // cAdvisorPort is the port of the localhost cAdvisor endpoint (set to 0 to disable) - CAdvisorPort *int32 `json:"cAdvisorPort"` // healthzPort is the port of the localhost healthz endpoint (set to 0 to disable) HealthzPort *int32 `json:"healthzPort"` // healthzBindAddress is the IP address for the healthz server to serve diff --git a/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.conversion.go b/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.conversion.go index 5ac12aca4b1..823e08e1c8b 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.conversion.go +++ b/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.conversion.go @@ -180,9 +180,6 @@ func autoConvert_v1alpha1_KubeletConfiguration_To_kubeletconfig_KubeletConfigura return err } out.EnableContentionProfiling = in.EnableContentionProfiling - if err := v1.Convert_Pointer_int32_To_int32(&in.CAdvisorPort, &out.CAdvisorPort, s); err != nil { - return err - } if err := v1.Convert_Pointer_int32_To_int32(&in.HealthzPort, &out.HealthzPort, s); err != nil { return err } @@ -308,9 +305,6 @@ func autoConvert_kubeletconfig_KubeletConfiguration_To_v1alpha1_KubeletConfigura return err } out.EnableContentionProfiling = in.EnableContentionProfiling - if err := v1.Convert_int32_To_Pointer_int32(&in.CAdvisorPort, &out.CAdvisorPort, s); err != nil { - return err - } if err := v1.Convert_int32_To_Pointer_int32(&in.HealthzPort, &out.HealthzPort, s); err != nil { return err } diff --git a/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.deepcopy.go b/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.deepcopy.go index 8566133c1c0..6a44b4c1b19 100644 --- a/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/kubelet/apis/kubeletconfig/v1alpha1/zz_generated.deepcopy.go @@ -166,15 +166,6 @@ func (in *KubeletConfiguration) DeepCopyInto(out *KubeletConfiguration) { **out = **in } } - if in.CAdvisorPort != nil { - in, out := &in.CAdvisorPort, &out.CAdvisorPort - if *in == nil { - *out = nil - } else { - *out = new(int32) - **out = **in - } - } if in.HealthzPort != nil { in, out := &in.HealthzPort, &out.HealthzPort if *in == nil { diff --git a/pkg/kubelet/apis/kubeletconfig/validation/validation.go b/pkg/kubelet/apis/kubeletconfig/validation/validation.go index a31e72753fa..3f3e354be82 100644 --- a/pkg/kubelet/apis/kubeletconfig/validation/validation.go +++ b/pkg/kubelet/apis/kubeletconfig/validation/validation.go @@ -35,9 +35,6 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration) error if kc.SystemCgroups != "" && kc.CgroupRoot == "" { allErrors = append(allErrors, fmt.Errorf("invalid configuration: SystemCgroups (--system-cgroups) was specified and CgroupRoot (--cgroup-root) was not specified")) } - if kc.CAdvisorPort != 0 && utilvalidation.IsValidPortNum(int(kc.CAdvisorPort)) != nil { - allErrors = append(allErrors, fmt.Errorf("invalid configuration: CAdvisorPort (--cadvisor-port) %v must be between 0 and 65535, inclusive", kc.CAdvisorPort)) - } if kc.EventBurst < 0 { allErrors = append(allErrors, fmt.Errorf("invalid configuration: EventBurst (--event-burst) %v must not be a negative number", kc.EventBurst)) } diff --git a/pkg/kubelet/apis/kubeletconfig/validation/validation_test.go b/pkg/kubelet/apis/kubeletconfig/validation/validation_test.go index 134771fcfb0..743508b315d 100644 --- a/pkg/kubelet/apis/kubeletconfig/validation/validation_test.go +++ b/pkg/kubelet/apis/kubeletconfig/validation/validation_test.go @@ -29,7 +29,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { EnforceNodeAllocatable: []string{"pods", "system-reserved", "kube-reserved"}, SystemCgroups: "", CgroupRoot: "", - CAdvisorPort: 0, EventBurst: 10, EventRecordQPS: 5, HealthzPort: 10248, @@ -58,7 +57,6 @@ func TestValidateKubeletConfiguration(t *testing.T) { EnforceNodeAllocatable: []string{"pods", "system-reserved", "kube-reserved", "illegal-key"}, SystemCgroups: "/", CgroupRoot: "", - CAdvisorPort: -10, EventBurst: -10, EventRecordQPS: -10, HealthzPort: -10, @@ -78,7 +76,7 @@ func TestValidateKubeletConfiguration(t *testing.T) { RegistryPullQPS: -10, HairpinMode: "foo", } - if allErrors := ValidateKubeletConfiguration(errorCase); len(allErrors.(utilerrors.Aggregate).Errors()) != 22 { - t.Errorf("expect 22 errors got %v", len(allErrors.(utilerrors.Aggregate).Errors())) + if allErrors := ValidateKubeletConfiguration(errorCase); len(allErrors.(utilerrors.Aggregate).Errors()) != 21 { + t.Errorf("expect 21 errors got %v", len(allErrors.(utilerrors.Aggregate).Errors())) } }