From d44d5b35f3d5ca2ce0bcc8865e299a013d294f47 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Thu, 14 Nov 2019 14:38:14 +0100 Subject: [PATCH] Add show-hidden-metrics-for-version to kubelet --- cmd/kubelet/app/BUILD | 1 + cmd/kubelet/app/server.go | 5 +++++ pkg/kubelet/apis/config/helpers_test.go | 1 + pkg/kubelet/apis/config/types.go | 6 ++++++ .../apis/config/v1beta1/zz_generated.conversion.go | 2 ++ pkg/kubelet/apis/config/validation/BUILD | 1 + pkg/kubelet/apis/config/validation/validation.go | 2 ++ staging/src/k8s.io/kubelet/config/v1beta1/types.go | 8 ++++++++ 8 files changed, 26 insertions(+) diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index 2bb87eeea7f..1bc274fc631 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -139,6 +139,7 @@ go_library( "//staging/src/k8s.io/cloud-provider:go_default_library", "//staging/src/k8s.io/component-base/cli/flag:go_default_library", "//staging/src/k8s.io/component-base/featuregate:go_default_library", + "//staging/src/k8s.io/component-base/metrics:go_default_library", "//staging/src/k8s.io/component-base/version:go_default_library", "//staging/src/k8s.io/component-base/version/verflag:go_default_library", "//staging/src/k8s.io/csi-translation-lib/plugins:go_default_library", diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index ba32570fd2f..7f21273774a 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -62,6 +62,7 @@ import ( cloudprovider "k8s.io/cloud-provider" cliflag "k8s.io/component-base/cli/flag" "k8s.io/component-base/featuregate" + "k8s.io/component-base/metrics" "k8s.io/component-base/version" "k8s.io/component-base/version/verflag" kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1" @@ -509,6 +510,10 @@ func run(s *options.KubeletServer, kubeDeps *kubelet.Dependencies, featureGate f klog.Errorf("unable to register KubeletConfiguration with configz, error: %v", err) } + if len(s.ShowHiddenMetricsForVersion) > 0 { + metrics.SetShowHidden() + } + // About to get clients and such, detect standaloneMode standaloneMode := true if len(s.KubeConfig) > 0 { diff --git a/pkg/kubelet/apis/config/helpers_test.go b/pkg/kubelet/apis/config/helpers_test.go index dae68438a95..53b5a2010d2 100644 --- a/pkg/kubelet/apis/config/helpers_test.go +++ b/pkg/kubelet/apis/config/helpers_test.go @@ -215,6 +215,7 @@ var ( "ReservedSystemCPUs", "RuntimeRequestTimeout.Duration", "SerializeImagePulls", + "ShowHiddenMetricsForVersion", "StreamingConnectionIdleTimeout.Duration", "SyncFrequency.Duration", "SystemCgroups", diff --git a/pkg/kubelet/apis/config/types.go b/pkg/kubelet/apis/config/types.go index 0e9cedc1353..818a089465d 100644 --- a/pkg/kubelet/apis/config/types.go +++ b/pkg/kubelet/apis/config/types.go @@ -335,6 +335,12 @@ type KubeletConfiguration struct { // This provide a "static" CPU list rather than the "dynamic" list by system-reserved and kube-reserved. // This option overwrites CPUs provided by system-reserved and kube-reserved. ReservedSystemCPUs string + // The previous version for which you want to show hidden metrics. + // Only the previous minor version is meaningful, other values will not be allowed. + // The format is ., e.g.: '1.16'. + // The purpose of this format is make sure you have the opportunity to notice if the next release hides additional metrics, + // rather than being surprised when they are permanently removed in the release after that. + ShowHiddenMetricsForVersion string } // KubeletAuthorizationMode denotes the authorization mode for the kubelet diff --git a/pkg/kubelet/apis/config/v1beta1/zz_generated.conversion.go b/pkg/kubelet/apis/config/v1beta1/zz_generated.conversion.go index c478e06fcf1..0ec24bd53e7 100644 --- a/pkg/kubelet/apis/config/v1beta1/zz_generated.conversion.go +++ b/pkg/kubelet/apis/config/v1beta1/zz_generated.conversion.go @@ -327,6 +327,7 @@ func autoConvert_v1beta1_KubeletConfiguration_To_config_KubeletConfiguration(in out.SystemReserved = *(*map[string]string)(unsafe.Pointer(&in.SystemReserved)) out.KubeReserved = *(*map[string]string)(unsafe.Pointer(&in.KubeReserved)) out.ReservedSystemCPUs = in.ReservedSystemCPUs + out.ShowHiddenMetricsForVersion = in.ShowHiddenMetricsForVersion out.SystemReservedCgroup = in.SystemReservedCgroup out.KubeReservedCgroup = in.KubeReservedCgroup out.EnforceNodeAllocatable = *(*[]string)(unsafe.Pointer(&in.EnforceNodeAllocatable)) @@ -464,6 +465,7 @@ func autoConvert_config_KubeletConfiguration_To_v1beta1_KubeletConfiguration(in out.KubeReservedCgroup = in.KubeReservedCgroup out.EnforceNodeAllocatable = *(*[]string)(unsafe.Pointer(&in.EnforceNodeAllocatable)) out.ReservedSystemCPUs = in.ReservedSystemCPUs + out.ShowHiddenMetricsForVersion = in.ShowHiddenMetricsForVersion return nil } diff --git a/pkg/kubelet/apis/config/validation/BUILD b/pkg/kubelet/apis/config/validation/BUILD index c50698e5aa0..36bb98442ff 100644 --- a/pkg/kubelet/apis/config/validation/BUILD +++ b/pkg/kubelet/apis/config/validation/BUILD @@ -22,6 +22,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/component-base/metrics:go_default_library", ], ) diff --git a/pkg/kubelet/apis/config/validation/validation.go b/pkg/kubelet/apis/config/validation/validation.go index 877ad7c7d29..03681306850 100644 --- a/pkg/kubelet/apis/config/validation/validation.go +++ b/pkg/kubelet/apis/config/validation/validation.go @@ -23,6 +23,7 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" utilvalidation "k8s.io/apimachinery/pkg/util/validation" utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/component-base/metrics" "k8s.io/kubernetes/pkg/features" kubeletconfig "k8s.io/kubernetes/pkg/kubelet/apis/config" "k8s.io/kubernetes/pkg/kubelet/cm/cpuset" @@ -156,5 +157,6 @@ func ValidateKubeletConfiguration(kc *kubeletconfig.KubeletConfiguration) error if err := validateKubeletOSConfiguration(kc); err != nil { allErrors = append(allErrors, err) } + allErrors = append(allErrors, metrics.ValidateShowHiddenMetricsVersion(kc.ShowHiddenMetricsForVersion)...) return utilerrors.NewAggregate(allErrors) } diff --git a/staging/src/k8s.io/kubelet/config/v1beta1/types.go b/staging/src/k8s.io/kubelet/config/v1beta1/types.go index 1c03d43162f..d35f2422730 100644 --- a/staging/src/k8s.io/kubelet/config/v1beta1/types.go +++ b/staging/src/k8s.io/kubelet/config/v1beta1/types.go @@ -714,6 +714,14 @@ type KubeletConfiguration struct { // This provide a "static" CPU list rather than the "dynamic" list by system-reserved and kube-reserved. // This option overwrites CPUs provided by system-reserved and kube-reserved. ReservedSystemCPUs string `json:"reservedSystemCPUs,omitempty"` + // The previous version for which you want to show hidden metrics. + // Only the previous minor version is meaningful, other values will not be allowed. + // The format is ., e.g.: '1.16'. + // The purpose of this format is make sure you have the opportunity to notice if the next release hides additional metrics, + // rather than being surprised when they are permanently removed in the release after that. + // Default: "" + // +optional + ShowHiddenMetricsForVersion string `json:"showHiddenMetricsForVersion,omitempty"` // This flag helps kubelet identify absolute name of top level cgroup used to enforce `SystemReserved` compute resource reservation for OS system daemons. // Refer to [Node Allocatable](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md) doc for more information. // Dynamic Kubelet Config (beta): This field should not be updated without a full node