Skip to content

Commit 7cfaf49

Browse files
committed
Consolidate metrics new function
Signed-off-by: Jing Liu <[email protected]>
1 parent 4cc9575 commit 7cfaf49

File tree

6 files changed

+44
-37
lines changed

6 files changed

+44
-37
lines changed

examples/simple/deploy/01_simple-csi-driver.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ spec:
5959
allowPrivilegeEscalation: false
6060
capabilities: { drop: [ "ALL" ] }
6161
readOnlyRootFilesystem: true
62-
image: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.13.0
62+
image: registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.14.0
6363
args:
6464
- --v=5
6565
- --csi-address=/plugin/csi.sock
@@ -94,6 +94,10 @@ spec:
9494
fieldPath: spec.nodeName
9595
- name: CSI_ENDPOINT
9696
value: unix://plugin/csi.sock
97+
ports:
98+
- containerPort: 9402
99+
name: http-metrics
100+
protocol: TCP
97101
volumeMounts:
98102
- name: plugin-dir
99103
mountPath: /plugin

examples/simple/deploy/02_example-app.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ spec:
4848
runAsUser: 2000
4949
containers:
5050
- name: my-frontend
51-
image: busybox:1.35.0
51+
image: busybox:1.36.1
5252
volumeMounts:
5353
- mountPath: "/tls"
5454
name: tls

examples/simple/main.go

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,16 @@ func main() {
115115
ctx, cancel := context.WithCancel(context.Background())
116116
defer cancel()
117117

118-
metricsHandler, err := startMetricsServer(ctx, *nodeID, log, cmClient, store)
119-
if err != nil {
120-
panic("failed to setup metrics server: " + err.Error())
121-
}
118+
certRequestInformerFactory := externalversions.NewSharedInformerFactory(cmClient, 5*time.Second)
119+
certRequestInformer := certRequestInformerFactory.Certmanager().V1().CertificateRequests()
120+
metricsHandler := metrics.New(*nodeID, &log, prometheus.NewRegistry(), store, certRequestInformer.Lister())
121+
122+
go func() {
123+
err := startMetricsServer(ctx, log, metricsHandler, certRequestInformerFactory)
124+
if err != nil {
125+
panic("failed to setup metrics server: " + err.Error())
126+
}
127+
}()
122128

123129
d, err := driver.New(ctx, *endpoint, log, driver.Options{
124130
DriverName: "csi.cert-manager.io",
@@ -369,32 +375,20 @@ func keyUsagesFromAttributes(usagesCSV string) []cmapi.KeyUsage {
369375
return keyUsages
370376
}
371377

372-
// startMetricsServer starts a server listening on port 6443, until the supplied context is cancelled,
378+
// startMetricsServer starts a server listening on port 9402, until the supplied context is cancelled,
373379
// after which the server will gracefully shutdown (within 5 seconds).
374380
func startMetricsServer(
375381
rootCtx context.Context,
376-
nodeId string,
377382
logger logr.Logger,
378-
cmClient *cmclient.Clientset,
379-
metadataReader storage.MetadataReader,
380-
) (*metrics.Metrics, error) {
383+
metricsHandler *metrics.Metrics,
384+
certRequestInformerFactory externalversions.SharedInformerFactory,
385+
) error {
381386
g, ctx := errgroup.WithContext(rootCtx)
382-
defer func() {
383-
if err := g.Wait(); err != nil {
384-
logger.Error(err, "fail to stop metric server")
385-
}
386-
}()
387-
388-
metricsHandler := metrics.New(&logger, prometheus.NewRegistry())
389-
390-
certRequestInformerFactory := externalversions.NewSharedInformerFactory(cmClient, 5*time.Second)
391-
certRequestInformer := certRequestInformerFactory.Certmanager().V1().CertificateRequests()
392-
metricsHandler.SetupCertificateRequestCollector(nodeId, metadataReader, certRequestInformer.Lister())
393387

394388
listenConfig := &net.ListenConfig{}
395-
metricsLn, err := listenConfig.Listen(ctx, "tcp", "127.0.0.1:6443")
389+
metricsLn, err := listenConfig.Listen(ctx, "tcp", ":9402")
396390
if err != nil {
397-
return nil, err
391+
return err
398392
}
399393
metricsServer := &http.Server{
400394
Addr: metricsLn.Addr().String(),
@@ -425,5 +419,5 @@ func startMetricsServer(
425419
}
426420
return nil
427421
})
428-
return metricsHandler, nil
422+
return g.Wait()
429423
}

metrics/certificaterequest_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,6 @@ func TestCertificateRequestMetrics(t *testing.T) {
215215
for n, test := range tests {
216216
t.Run(n, func(t *testing.T) {
217217
testLog := testr.New(t)
218-
m := New(&testLog, prometheus.NewRegistry())
219218

220219
fakeClient := fake.NewSimpleClientset()
221220
factory := externalversions.NewSharedInformerFactory(fakeClient, 0)
@@ -228,7 +227,7 @@ func TestCertificateRequestMetrics(t *testing.T) {
228227
assert.NoError(t, err)
229228
fakeMetadata := storage.NewMemoryFS()
230229
fakeMetadata.RegisterMetadata(test.meta)
231-
m.SetupCertificateRequestCollector(testNodeName, fakeMetadata, certRequestInformer.Lister())
230+
m := New(testNodeName, &testLog, prometheus.NewRegistry(), fakeMetadata, certRequestInformer.Lister())
232231

233232
if err := testutil.CollectAndCompare(m.certificateRequestCollector,
234233
strings.NewReader(expiryMetadata+test.expectedExpiry),
@@ -354,8 +353,7 @@ func TestCertificateRequestCache(t *testing.T) {
354353
assert.NoError(t, err)
355354

356355
testLog := testr.New(t)
357-
m := New(&testLog, prometheus.NewRegistry())
358-
m.SetupCertificateRequestCollector(testNodeName, fakeMetadata, certRequestInformer.Lister())
356+
m := New(testNodeName, &testLog, prometheus.NewRegistry(), fakeMetadata, certRequestInformer.Lister())
359357

360358
// Check all three metrics exist
361359
if err := testutil.CollectAndCompare(m.certificateRequestCollector,

metrics/metrics.go

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@ type Metrics struct {
4545
}
4646

4747
// New creates a Metrics struct and populates it with prometheus metric types.
48-
func New(logger *logr.Logger, registry *prometheus.Registry) *Metrics {
48+
func New(
49+
nodeId string,
50+
logger *logr.Logger,
51+
registry *prometheus.Registry,
52+
metadataReader storage.MetadataReader,
53+
certificateRequestLister cmlisters.CertificateRequestLister,
54+
) *Metrics {
4955
var (
5056
// driverIssueCallCountTotal is a Prometheus counter for the number of issue() calls made by the driver.
5157
driverIssueCallCountTotal = prometheus.NewCounterVec(
@@ -71,20 +77,26 @@ func New(logger *logr.Logger, registry *prometheus.Registry) *Metrics {
7177
)
7278
)
7379

74-
registry.MustRegister(
75-
driverIssueCallCountTotal,
76-
driverIssueErrorCountTotal,
77-
)
78-
7980
// Create server and register Prometheus metrics handler
8081
m := &Metrics{
8182
log: logger.WithName("metrics"),
8283
registry: registry,
8384

8485
driverIssueCallCountTotal: driverIssueCallCountTotal,
8586
driverIssueErrorCountTotal: driverIssueErrorCountTotal,
87+
certificateRequestCollector: NewCertificateRequestCollector(
88+
internalapiutil.HashIdentifier(nodeId),
89+
metadataReader,
90+
certificateRequestLister,
91+
),
8692
}
8793

94+
m.registry.MustRegister(
95+
driverIssueCallCountTotal,
96+
driverIssueErrorCountTotal,
97+
m.certificateRequestCollector,
98+
)
99+
88100
return m
89101
}
90102

test/integration/metrics_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,14 +100,13 @@ func TestMetricsServer(t *testing.T) {
100100
testNodeId := "test-node"
101101

102102
// Build metrics handler, and start metrics server with a random available port
103-
metricsHandler := metrics.New(&testLog, prometheus.NewRegistry())
104103
store := storage.NewMemoryFS()
105104
fakeClient := fake.NewSimpleClientset()
106105
// client-go imposes a minimum resync period of 1 second, so that is the lowest we can go
107106
// https://github.com/kubernetes/client-go/blob/5a019202120ab4dd7dfb3788e5cb87269f343ebe/tools/cache/shared_informer.go#L575
108107
factory := externalversions.NewSharedInformerFactory(fakeClient, time.Second)
109108
certRequestInformer := factory.Certmanager().V1().CertificateRequests()
110-
metricsHandler.SetupCertificateRequestCollector(testNodeId, store, certRequestInformer.Lister())
109+
metricsHandler := metrics.New(testNodeId, &testLog, prometheus.NewRegistry(), store, certRequestInformer.Lister())
111110
factory.Start(ctx.Done())
112111
factory.WaitForCacheSync(ctx.Done())
113112

0 commit comments

Comments
 (0)