Skip to content

Commit bdcc4c5

Browse files
synaretephlogistonjohn
authored andcommitted
resources: run metrics-exporter in same pod as smbd
When config option metrics-exporter-mode is "enabled", run the metrics-exporter container along-side smbd, within the same pod. Both containers share the same volumes. Image of smbmetrics exporter is developed within a separate repository: https://github.com/samba-in-kubernetes/smbmetrics Signed-off-by: Shachar Sharon <[email protected]>
1 parent 212894f commit bdcc4c5

File tree

4 files changed

+101
-13
lines changed

4 files changed

+101
-13
lines changed

internal/resources/deployments.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ func buildDeployment(cfg *conf.OperatorConfig,
5151
Template: corev1.PodTemplateSpec{
5252
ObjectMeta: metav1.ObjectMeta{
5353
Labels: labels,
54-
Annotations: annotationsForSmbPod(cfg.SmbdContainerName),
54+
Annotations: annotationsForSmbPod(cfg),
5555
},
5656
Spec: buildPodSpec(planner, cfg, pvcName),
5757
},
@@ -86,9 +86,20 @@ func labelValue(s ...string) string {
8686
return out
8787
}
8888

89-
func annotationsForSmbPod(name string) map[string]string {
90-
return map[string]string{
89+
func annotationsForSmbPod(cfg *conf.OperatorConfig) map[string]string {
90+
name := cfg.SmbdContainerName
91+
annotations := map[string]string{
9192
"kubectl.kubernetes.io/default-logs-container": name,
9293
"kubectl.kubernetes.io/default-container": name,
9394
}
95+
if withMetricsExporter(cfg) {
96+
for k, v := range annotationsForSmbMetricsPod() {
97+
annotations[k] = v
98+
}
99+
}
100+
return annotations
101+
}
102+
103+
func withMetricsExporter(cfg *conf.OperatorConfig) bool {
104+
return strings.ToLower(cfg.MetricsExporterMode) == "enabled"
94105
}

internal/resources/metrics.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
3+
package resources
4+
5+
import (
6+
"strconv"
7+
8+
corev1 "k8s.io/api/core/v1"
9+
"k8s.io/apimachinery/pkg/util/intstr"
10+
)
11+
12+
var (
13+
// defaultMetricsPort is the default port used to export prometheus metrics
14+
defaultMetricsPort = int(8080)
15+
// defaultMetricsPath is the default HTTP path to export prometheus metrics
16+
defaultMetricsPath = "/metrics"
17+
)
18+
19+
// annotationsForSmbMetricsPod returns the default annotation which are
20+
// required on the pod which executes the smbmetrics container, in order for
21+
// Prometheus to scrape it.
22+
func annotationsForSmbMetricsPod() map[string]string {
23+
return map[string]string{
24+
"prometheus.io/scrape": "true",
25+
"prometheus.io/port": strconv.Itoa(defaultMetricsPort),
26+
"prometheus.io/path": defaultMetricsPath,
27+
}
28+
}
29+
30+
// buildSmbMetricsContainer returns the appropriate Container definition for
31+
// smbmetrics exporter.
32+
func buildSmbMetricsContainer(image string,
33+
volmnts []corev1.VolumeMount) corev1.Container {
34+
portnum := defaultMetricsPort
35+
return corev1.Container{
36+
Image: image,
37+
Name: "samba-metrics",
38+
Command: []string{"/bin/smbmetrics"},
39+
Ports: []corev1.ContainerPort{{
40+
ContainerPort: int32(portnum),
41+
Name: "smbmetrics",
42+
}},
43+
VolumeMounts: volmnts,
44+
ReadinessProbe: &corev1.Probe{
45+
Handler: corev1.Handler{
46+
TCPSocket: &corev1.TCPSocketAction{
47+
Port: intstr.FromInt(portnum),
48+
},
49+
},
50+
},
51+
LivenessProbe: &corev1.Probe{
52+
Handler: corev1.Handler{
53+
TCPSocket: &corev1.TCPSocketAction{
54+
Port: intstr.FromInt(portnum),
55+
},
56+
},
57+
},
58+
}
59+
}

internal/resources/pods.go

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,9 @@ func buildADPodSpec(
9090
},
9191
)
9292

93-
containers := []corev1.Container{
94-
buildSmbdCtr(planner, podEnv, smbdVols),
95-
buildWinbinddCtr(planner, podEnv, smbServerVols),
96-
}
93+
containers := buildSmbdCtrs(planner, podEnv, smbdVols)
94+
containers = append(containers,
95+
buildWinbinddCtr(planner, podEnv, smbServerVols))
9796

9897
if planner.DNSRegister() != pln.DNSRegisterNever {
9998
watchVol := svcWatchVolumeAndMount(
@@ -146,9 +145,7 @@ func buildUserPodSpec(
146145
podEnv := defaultPodEnv(planner)
147146
podSpec := defaultPodSpec(planner)
148147
podSpec.Volumes = getVolumes(vols)
149-
podSpec.Containers = []corev1.Container{
150-
buildSmbdCtr(planner, podEnv, vols),
151-
}
148+
podSpec.Containers = buildSmbdCtrs(planner, podEnv, vols)
152149
return podSpec
153150
}
154151

@@ -256,7 +253,7 @@ func buildClusteredUserPodSpec(
256253
// smbd
257254
containers = append(
258255
containers,
259-
buildSmbdCtr(planner, podEnv, volumes))
256+
buildSmbdCtrs(planner, podEnv, volumes)...)
260257

261258
podSpec := defaultPodSpec(planner)
262259
podSpec.Volumes = getVolumes(volumes)
@@ -398,7 +395,7 @@ func buildClusteredADPodSpec(
398395
// smbd
399396
containers = append(
400397
containers,
401-
buildSmbdCtr(planner, podEnv, volumes))
398+
buildSmbdCtrs(planner, podEnv, volumes)...)
402399

403400
// dns-register containers
404401
if planner.DNSRegister() != pln.DNSRegisterNever {
@@ -423,6 +420,19 @@ func buildClusteredADPodSpec(
423420
return podSpec
424421
}
425422

423+
func buildSmbdCtrs(
424+
planner *pln.Planner,
425+
env []corev1.EnvVar,
426+
vols []volMount) []corev1.Container {
427+
// ---
428+
ctrs := []corev1.Container{}
429+
ctrs = append(ctrs, buildSmbdCtr(planner, env, vols))
430+
if withMetricsExporter(planner.GlobalConfig) {
431+
ctrs = append(ctrs, buildSmbdMetricsCtr(planner, vols))
432+
}
433+
return ctrs
434+
}
435+
426436
func buildSmbdCtr(
427437
planner *pln.Planner,
428438
env []corev1.EnvVar,
@@ -457,6 +467,14 @@ func buildSmbdCtr(
457467
}
458468
}
459469

470+
func buildSmbdMetricsCtr(
471+
planner *pln.Planner,
472+
vols []volMount) corev1.Container {
473+
// ---
474+
return buildSmbMetricsContainer(
475+
planner.GlobalConfig.SmbdMetricsContainerImage, getMounts(vols))
476+
}
477+
460478
func buildWinbinddCtr(
461479
planner *pln.Planner,
462480
env []corev1.EnvVar,

internal/resources/statefulsets.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func buildStatefulSet(
4747
Template: corev1.PodTemplateSpec{
4848
ObjectMeta: metav1.ObjectMeta{
4949
Labels: labels,
50-
Annotations: annotationsForSmbPod(planner.GlobalConfig.SmbdContainerName),
50+
Annotations: annotationsForSmbPod(planner.GlobalConfig),
5151
},
5252
Spec: podSpec,
5353
},

0 commit comments

Comments
 (0)