Skip to content

Commit 5c66073

Browse files
committed
First working version. Needs more testing.
1 parent c892b07 commit 5c66073

File tree

3 files changed

+57
-17
lines changed

3 files changed

+57
-17
lines changed

Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,10 @@ ARANGOSYNCTESTCTRLBINNAME := $(PROJECT)_sync_test_ctrl
121121
ARANGOSYNCTESTCTRLBIN := $(BINDIR)/$(ARANGOSYNCTESTCTRLBINNAME)
122122

123123
.PHONY: all
124-
all: verify-generated build
124+
all: build
125+
126+
.PHONY: allall
127+
allall: verify-generated build
125128

126129
#
127130
# Tip: Run `eval $(minikube docker-env)` before calling make if you're developing on minikube.

manifests/templates/deployment/rbac.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ rules:
4040
- apiGroups: ["storage.k8s.io"]
4141
resources: ["storageclasses"]
4242
verbs: ["get", "list"]
43+
- apiGroups: ["monitoring.coreos.com"]
44+
resources: ["servicemonitors"]
45+
verbs: ["get", "create", "delete"]
46+
4347

4448
---
4549

pkg/deployment/resources/servicemonitor.go

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,41 @@
2323
package resources
2424

2525
import (
26-
"time"
27-
2826
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
2927

3028
coreosv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
3129
clientv1 "github.com/coreos/prometheus-operator/pkg/client/versioned/typed/monitoring/v1"
3230
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33-
34-
"github.com/rs/zerolog"
31+
"k8s.io/client-go/rest"
3532
)
3633

34+
func LabelsForExporterServiceMonitor(deploymentName string) map[string]string {
35+
return map[string]string{
36+
k8sutil.LabelKeyArangoDeployment: deploymentName,
37+
k8sutil.LabelKeyApp: "arango-exporter",
38+
"context": "metrics",
39+
}
40+
}
41+
42+
func LabelsForExporterServiceMonitorSelector(deploymentName string) map[string]string {
43+
return map[string]string{
44+
k8sutil.LabelKeyArangoDeployment: deploymentName,
45+
k8sutil.LabelKeyApp: "arangodb",
46+
}
47+
}
48+
3749
// EnsureServiceMonitor creates or updates a ServiceMonitor.
38-
func (f *Resources) EnsureServiceMonitor() error {
50+
func (r *Resources) EnsureServiceMonitor() error {
3951
// Some preparations:
4052
log := r.log
41-
start := time.Now()
42-
kubecli := r.context.GetKubeCli()
4353
apiObject := r.context.GetAPIObject()
4454
deploymentName := apiObject.GetName()
4555
ns := apiObject.GetNamespace()
4656
owner := apiObject.AsOwner()
4757
spec := r.context.GetSpec()
58+
if !spec.Metrics.IsEnabled() {
59+
return nil
60+
}
4861
serviceMonitorName := deploymentName + "-exporter"
4962

5063
// First get a client:
@@ -60,19 +73,39 @@ func (f *Resources) EnsureServiceMonitor() error {
6073
}
6174

6275
// Check if ServiceMonitor already exists
63-
serviceMonitors := mClient.ServiceMonitors()
64-
var found *coreosv1.ServiceMonitor
65-
found, err = serviceMonitors.Get(serviceMonitorName, metav1.GetOptions{})
76+
serviceMonitors := mClient.ServiceMonitors(ns)
77+
_, err = serviceMonitors.Get(serviceMonitorName, metav1.GetOptions{})
6678
if err != nil {
67-
if k8serr.IsNotFound(rr) {
79+
if k8sutil.IsNotFound(err) {
6880
// Need to create one:
69-
smon := &coreosv1.ServiceMonitor{
70-
ObjectMeta: metav1.ObjectMeta{
71-
Name: serviceMonitorName,
72-
Labels: LabelsForExporterServiceMonitor(deploymentName),
81+
smon := &coreosv1.ServiceMonitor{
82+
ObjectMeta: metav1.ObjectMeta{
83+
Name: serviceMonitorName,
84+
Labels: LabelsForExporterServiceMonitor(deploymentName),
85+
OwnerReferences: []metav1.OwnerReference{owner},
7386
},
7487
Spec: coreosv1.ServiceMonitorSpec{
75-
88+
JobLabel: "k8s-app",
89+
Endpoints: []coreosv1.Endpoint{
90+
coreosv1.Endpoint{
91+
Port: "exporter",
92+
Interval: "10s",
93+
Scheme: "https",
94+
TLSConfig: &coreosv1.TLSConfig{
95+
InsecureSkipVerify: true,
96+
},
97+
},
98+
},
99+
Selector: metav1.LabelSelector{
100+
MatchLabels: LabelsForExporterServiceMonitorSelector(deploymentName),
101+
},
102+
},
103+
}
104+
smon, err = serviceMonitors.Create(smon)
105+
if err != nil {
106+
log.Error().Err(err).Msgf("Failed to create ServiceMonitor %s", serviceMonitorName)
107+
return maskAny(err)
108+
}
76109
} else {
77110
log.Error().Err(err).Msgf("Failed to get ServiceMonitor %s", serviceMonitorName)
78111
return maskAny(err)

0 commit comments

Comments
 (0)