Skip to content

Commit 5bace30

Browse files
authored
Merge pull request kubernetes#91148 from liggitt/kubelet-client-metric
Add kubelet_certificate_manager_client_ttl_seconds gauge
2 parents 1911ca2 + 2408d81 commit 5bace30

File tree

3 files changed

+24
-11
lines changed

3 files changed

+24
-11
lines changed

cmd/kubelet/app/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ go_library(
6464
"//pkg/kubelet/eviction/api:go_default_library",
6565
"//pkg/kubelet/kubeletconfig:go_default_library",
6666
"//pkg/kubelet/kubeletconfig/configfiles:go_default_library",
67+
"//pkg/kubelet/metrics:go_default_library",
6768
"//pkg/kubelet/server:go_default_library",
6869
"//pkg/kubelet/stats/pidlimit:go_default_library",
6970
"//pkg/kubelet/types:go_default_library",
@@ -136,6 +137,7 @@ go_library(
136137
"//staging/src/k8s.io/component-base/configz:go_default_library",
137138
"//staging/src/k8s.io/component-base/featuregate:go_default_library",
138139
"//staging/src/k8s.io/component-base/metrics:go_default_library",
140+
"//staging/src/k8s.io/component-base/metrics/legacyregistry:go_default_library",
139141
"//staging/src/k8s.io/component-base/version:go_default_library",
140142
"//staging/src/k8s.io/component-base/version/verflag:go_default_library",
141143
"//staging/src/k8s.io/csi-translation-lib/plugins:go_default_library",

cmd/kubelet/app/server.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"crypto/tls"
2323
"errors"
2424
"fmt"
25+
"math"
2526
"net"
2627
"net/http"
2728
"os"
@@ -63,6 +64,7 @@ import (
6364
"k8s.io/component-base/configz"
6465
"k8s.io/component-base/featuregate"
6566
"k8s.io/component-base/metrics"
67+
"k8s.io/component-base/metrics/legacyregistry"
6668
"k8s.io/component-base/version"
6769
"k8s.io/component-base/version/verflag"
6870
kubeletconfigv1beta1 "k8s.io/kubelet/config/v1beta1"
@@ -87,6 +89,7 @@ import (
8789
evictionapi "k8s.io/kubernetes/pkg/kubelet/eviction/api"
8890
dynamickubeletconfig "k8s.io/kubernetes/pkg/kubelet/kubeletconfig"
8991
"k8s.io/kubernetes/pkg/kubelet/kubeletconfig/configfiles"
92+
kubeletmetrics "k8s.io/kubernetes/pkg/kubelet/metrics"
9093
"k8s.io/kubernetes/pkg/kubelet/server"
9194
"k8s.io/kubernetes/pkg/kubelet/stats/pidlimit"
9295
kubetypes "k8s.io/kubernetes/pkg/kubelet/types"
@@ -838,6 +841,23 @@ func buildKubeletClientConfig(s *options.KubeletServer, nodeName types.NodeName)
838841
return nil, nil, err
839842
}
840843

844+
legacyregistry.RawMustRegister(metrics.NewGaugeFunc(
845+
metrics.GaugeOpts{
846+
Subsystem: kubeletmetrics.KubeletSubsystem,
847+
Name: "certificate_manager_client_ttl_seconds",
848+
Help: "Gauge of the TTL (time-to-live) of the Kubelet's client certificate. " +
849+
"The value is in seconds until certificate expiry (negative if already expired). " +
850+
"If client certificate is invalid or unused, the value will be +INF.",
851+
StabilityLevel: metrics.ALPHA,
852+
},
853+
func() float64 {
854+
if c := clientCertificateManager.Current(); c != nil && c.Leaf != nil {
855+
return math.Trunc(c.Leaf.NotAfter.Sub(time.Now()).Seconds())
856+
}
857+
return math.Inf(1)
858+
},
859+
))
860+
841861
// the rotating transport will use the cert from the cert manager instead of these files
842862
transportConfig := restclient.AnonymousClientConfig(clientConfig)
843863

pkg/kubelet/certificate/kubelet.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func NewKubeletServerCertificateManager(kubeClient clientset.Interface, kubeCfg
142142
},
143143
func() float64 {
144144
if c := m.Current(); c != nil && c.Leaf != nil {
145-
return c.Leaf.NotAfter.Sub(time.Now()).Seconds()
145+
return math.Trunc(c.Leaf.NotAfter.Sub(time.Now()).Seconds())
146146
}
147147
return math.Inf(1)
148148
},
@@ -210,16 +210,6 @@ func NewKubeletClientCertificateManager(
210210
if err != nil {
211211
return nil, fmt.Errorf("failed to initialize client certificate store: %v", err)
212212
}
213-
var certificateExpiration = compbasemetrics.NewGauge(
214-
&compbasemetrics.GaugeOpts{
215-
Namespace: metrics.KubeletSubsystem,
216-
Subsystem: "certificate_manager",
217-
Name: "client_expiration_seconds",
218-
Help: "Gauge of the lifetime of a certificate. The value is the date the certificate will expire in seconds since January 1, 1970 UTC.",
219-
StabilityLevel: compbasemetrics.ALPHA,
220-
},
221-
)
222-
legacyregistry.Register(certificateExpiration)
223213
var certificateRenewFailure = compbasemetrics.NewCounter(
224214
&compbasemetrics.CounterOpts{
225215
Namespace: metrics.KubeletSubsystem,
@@ -269,5 +259,6 @@ func NewKubeletClientCertificateManager(
269259
if err != nil {
270260
return nil, fmt.Errorf("failed to initialize client certificate manager: %v", err)
271261
}
262+
272263
return m, nil
273264
}

0 commit comments

Comments
 (0)