Skip to content

Commit 5744dad

Browse files
authored
METAL-3262 proxy serviceMonitor monitoring (#124)
* METAL-3262 proxy serviceMonitor monitoring * METAL-3262 proxy serviceMonitor monitoring * METAL-3262 fix some comments * METAL-3262 change chart version, it's a feature change for db-operator * METAL-3262 change monitoring status to dbinstance
1 parent a0830c4 commit 5744dad

13 files changed

Lines changed: 154 additions & 19 deletions

File tree

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@ minidashboard: ## open minikube dashboard
6969
miniimage: build
7070
@minikube image load my-image.tar
7171

72-
k3d_setup: k3d_install k3d_image helm
72+
k3d_setup: k3d_install k3d_image helm ## create a k3d cluster locally and install db-operator
7373

7474
k3d_install:
7575
@wget -q -O - https://raw.githubusercontent.com/rancher/k3d/main/install.sh | bash
7676
@k3d cluster create myk3s -i rancher/k3s:$(K8S_VERSION)-k3s1
7777
@kubectl get pod
7878

79-
k3d_image: build
79+
k3d_image: build ## rebuild the docker images and upload into your k3d cluster
8080
@k3d image import my-image.tar -c myk3s
8181

8282
## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.

charts/db-operator/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
apiVersion: v2
22
type: application
33
kubeVersion: ">= 1.19 <= 1.22"
4-
appVersion: "1.2.0"
4+
appVersion: "1.3.0"
55
description: A Database Operator
66
name: db-operator
7-
version: 1.0.0
7+
version: 1.1.0

charts/db-operator/templates/rbac.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,27 @@ rules:
4848
verbs:
4949
- create
5050
- update
51+
- apiGroups:
52+
- "apiextensions.k8s.io"
53+
resources:
54+
- customresourcedefinitions
55+
verbs:
56+
- get
57+
- list
58+
- watch
59+
resourceNames:
60+
- servicemonitors.monitoring.coreos.com
61+
- apiGroups:
62+
- monitoring.coreos.com
63+
resources:
64+
- servicemonitors
65+
verbs:
66+
- create
67+
- update
68+
- patch
69+
- get
70+
- list
71+
- watch
5172
- apiGroups:
5273
- extensions
5374
resources:

charts/db-operator/values-stanley.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ image:
33
tag: latest
44
pullPolicy: IfNotPresent
55

6-
resources:
6+
resources:
77
limits:
88
cpu: "0.5"
99
memory: 512Mi

controllers/database_controller.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
"github.com/kloeckner-i/db-operator/pkg/utils/proxy"
3434
"github.com/sirupsen/logrus"
3535
corev1 "k8s.io/api/core/v1"
36+
crdv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
3637
k8serrors "k8s.io/apimachinery/pkg/api/errors"
3738
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3839
"k8s.io/apimachinery/pkg/runtime"
@@ -501,6 +502,40 @@ func (r *DatabaseReconciler) createProxy(ctx context.Context, dbcr *kciv1alpha1.
501502
}
502503
}
503504

505+
crdList := crdv1.CustomResourceDefinitionList{}
506+
err = r.List(ctx, &crdList)
507+
if err != nil {
508+
return err
509+
}
510+
511+
isMonitoringEnabled, err := dbcr.IsMonitoringEnabled()
512+
if err != nil {
513+
return err
514+
}
515+
516+
if isMonitoringEnabled && inCrdList(crdList, "servicemonitors.monitoring.coreos.com") {
517+
// create proxy PromServiceMonitor
518+
promSvcMon, err := proxy.BuildServiceMonitor(proxyInterface)
519+
if err != nil {
520+
return err
521+
}
522+
err = r.Create(ctx, promSvcMon)
523+
if err != nil {
524+
if k8serrors.IsAlreadyExists(err) {
525+
patch := client.MergeFrom(promSvcMon)
526+
err := r.Patch(ctx, promSvcMon, patch)
527+
if err != nil {
528+
logrus.Errorf("DB: namespace=%s, name=%s failed patching prometheus service monitor", dbcr.Namespace, dbcr.Name)
529+
return err
530+
}
531+
} else {
532+
// failed to create service
533+
logrus.Errorf("DB: namespace=%s, name=%s failed creating prometehus service monitor", dbcr.Namespace, dbcr.Name)
534+
return err
535+
}
536+
}
537+
}
538+
504539
engine, _ := dbcr.GetEngineType()
505540
dbcr.Status.ProxyStatus.ServiceName = svc.Name
506541
for _, svcPort := range svc.Spec.Ports {

controllers/helper.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121

2222
kciv1alpha1 "github.com/kloeckner-i/db-operator/api/v1alpha1"
2323
"github.com/kloeckner-i/db-operator/pkg/utils/kci"
24+
crdv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2425
)
2526

2627
func isDBSpecChanged(dbcr *kciv1alpha1.Database) bool {
@@ -78,3 +79,13 @@ func containsString(slice []string, s string) bool {
7879
}
7980
return false
8081
}
82+
83+
// inCrdList returns true if monitoring is enabled in DbInstance spec.
84+
func inCrdList(crds crdv1.CustomResourceDefinitionList, api string) bool {
85+
for _, crd := range crds.Items {
86+
if crd.Name == api {
87+
return true
88+
}
89+
}
90+
return false
91+
}

go.mod

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,16 @@ require (
1111
github.com/kloeckner-i/can-haz-password v0.1.0
1212
github.com/lib/pq v1.10.2
1313
github.com/mitchellh/hashstructure v1.1.0
14+
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.52.1
1415
github.com/prometheus/client_golang v1.11.0
1516
github.com/sirupsen/logrus v1.8.1
1617
github.com/stretchr/testify v1.7.0
1718
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c
1819
google.golang.org/api v0.47.0
1920
gopkg.in/yaml.v2 v2.4.0
20-
k8s.io/api v0.22.1
21-
k8s.io/apimachinery v0.22.1
22-
k8s.io/client-go v0.22.1
21+
k8s.io/api v0.22.3
22+
k8s.io/apimachinery v0.22.3
23+
k8s.io/client-go v0.22.3
2324
sigs.k8s.io/controller-runtime v0.10.0
2425
)
2526

@@ -74,11 +75,11 @@ require (
7475
google.golang.org/protobuf v1.26.0 // indirect
7576
gopkg.in/inf.v0 v0.9.1 // indirect
7677
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect
77-
k8s.io/apiextensions-apiserver v0.22.1 // indirect
78-
k8s.io/component-base v0.22.1 // indirect
79-
k8s.io/klog/v2 v2.9.0 // indirect
78+
k8s.io/apiextensions-apiserver v0.22.3 // indirect
79+
k8s.io/component-base v0.22.3 // indirect
80+
k8s.io/klog/v2 v2.10.0 // indirect
8081
k8s.io/kube-openapi v0.0.0-20211110013926-83f114cd0513 // indirect
81-
k8s.io/utils v0.0.0-20210802155522-efc7438f0176 // indirect
82+
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a // indirect
8283
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
8384
sigs.k8s.io/yaml v1.2.0 // indirect
8485
)

go.sum

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,8 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
399399
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
400400
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
401401
github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA=
402+
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.52.1 h1:sAQ0rZCj/PJOVxllCP6alH4a7P5TjHuqywBaHx7uZTo=
403+
github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.52.1/go.mod h1:f7HML3SGY4Bf10YMdSWKUf2BdIIzQqlAvYh84px05BQ=
402404
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
403405
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
404406
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
@@ -940,30 +942,39 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
940942
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
941943
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
942944
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
943-
k8s.io/api v0.22.1 h1:ISu3tD/jRhYfSW8jI/Q1e+lRxkR7w9UwQEZ7FgslrwY=
944945
k8s.io/api v0.22.1/go.mod h1:bh13rkTp3F1XEaLGykbyRD2QaTTzPm0e/BMd8ptFONY=
945-
k8s.io/apiextensions-apiserver v0.22.1 h1:YSJYzlFNFSfUle+yeEXX0lSQyLEoxoPJySRupepb0gE=
946+
k8s.io/api v0.22.3 h1:wOoES2GoSkUsdped2RB4zYypPqWtvprGoKCENTOOjP4=
947+
k8s.io/api v0.22.3/go.mod h1:azgiXFiXqiWyLCfI62/eYBOu19rj2LKmIhFPP4+33fs=
946948
k8s.io/apiextensions-apiserver v0.22.1/go.mod h1:HeGmorjtRmRLE+Q8dJu6AYRoZccvCMsghwS8XTUYb2c=
947-
k8s.io/apimachinery v0.22.1 h1:DTARnyzmdHMz7bFWFDDm22AM4pLWTQECMpRTFu2d2OM=
949+
k8s.io/apiextensions-apiserver v0.22.3 h1:bKku7MqawIbtTZc084BZoMV4fz0WZuvCnB5E+yrQXGM=
950+
k8s.io/apiextensions-apiserver v0.22.3/go.mod h1:f4plF+CXeqI89jAXL0Ml4LI/kSAZ54JS94+XOX1sae8=
948951
k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
952+
k8s.io/apimachinery v0.22.3 h1:mrvBG5CZnEfwgpVqWcrRKvdsYECTrhAR6cApAgdsflk=
953+
k8s.io/apimachinery v0.22.3/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
949954
k8s.io/apiserver v0.22.1/go.mod h1:2mcM6dzSt+XndzVQJX21Gx0/Klo7Aen7i0Ai6tIa400=
950-
k8s.io/client-go v0.22.1 h1:jW0ZSHi8wW260FvcXHkIa0NLxFBQszTlhiAVsU5mopw=
955+
k8s.io/apiserver v0.22.3/go.mod h1:oam7lH/F1Kto/WTamyQYrD68fS0mGUBORAFf6x/9Mxs=
951956
k8s.io/client-go v0.22.1/go.mod h1:BquC5A4UOo4qVDUtoc04/+Nxp1MeHcVc1HJm1KmG8kk=
957+
k8s.io/client-go v0.22.3 h1:6onkOSc+YNdwq5zXE0wFXicq64rrym+mXwHu/CPVGO4=
958+
k8s.io/client-go v0.22.3/go.mod h1:ElDjYf8gvZsKDYexmsmnMQ0DYO8W9RwBjfQ1PI53yow=
952959
k8s.io/code-generator v0.22.1/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
953-
k8s.io/component-base v0.22.1 h1:SFqIXsEN3v3Kkr1bS6rstrs1wd45StJqbtgbQ4nRQdo=
960+
k8s.io/code-generator v0.22.3/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
954961
k8s.io/component-base v0.22.1/go.mod h1:0D+Bl8rrnsPN9v0dyYvkqFfBeAd4u7n77ze+p8CMiPo=
962+
k8s.io/component-base v0.22.3 h1:/+hryAW03u3FpJQww+GSMsArJNUbGjH66lrgxaRynLU=
963+
k8s.io/component-base v0.22.3/go.mod h1:kuybv1miLCMoOk3ebrqF93GbQHQx6W2287FC0YEQY6s=
955964
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
956965
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
957966
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
958967
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
959-
k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
960968
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
969+
k8s.io/klog/v2 v2.10.0 h1:R2HDMDJsHVTHA2n4RjwbeYXdOcBymXdX/JRb1v0VGhE=
970+
k8s.io/klog/v2 v2.10.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
961971
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
962972
k8s.io/kube-openapi v0.0.0-20211110013926-83f114cd0513 h1:pbudjNtv90nOgR0/DUhPwKHnQ55Khz8+sNhJBIK7A5M=
963973
k8s.io/kube-openapi v0.0.0-20211110013926-83f114cd0513/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
964974
k8s.io/utils v0.0.0-20210707171843-4b05e18ac7d9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
965-
k8s.io/utils v0.0.0-20210802155522-efc7438f0176 h1:Mx0aa+SUAcNRQbs5jUzV8lkDlGFU8laZsY9jrcVX5SY=
966975
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
976+
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a h1:8dYfu/Fc9Gz2rNJKB9IQRGgQOh2clmRzNIPPY1xLY5g=
977+
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
967978
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
968979
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
969980
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
kcirocksv1alpha1 "github.com/kloeckner-i/db-operator/api/v1alpha1"
2626
"github.com/kloeckner-i/db-operator/controllers"
2727
"github.com/kloeckner-i/db-operator/pkg/config"
28+
"github.com/kloeckner-i/db-operator/pkg/utils/thirdpartyapi"
2829
"github.com/sirupsen/logrus"
2930
"k8s.io/apimachinery/pkg/runtime"
3031
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -47,6 +48,8 @@ func init() {
4748

4849
utilruntime.Must(kcirocksv1alpha1.AddToScheme(scheme))
4950
//+kubebuilder:scaffold:scheme
51+
52+
thirdpartyapi.AppendToScheme(scheme)
5053
}
5154

5255
func main() {

pkg/utils/proxy/cloudproxy.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"strconv"
2222

2323
"github.com/kloeckner-i/db-operator/pkg/config"
24+
promv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
2425
v1apps "k8s.io/api/apps/v1"
2526
v1 "k8s.io/api/core/v1"
2627
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -174,3 +175,26 @@ func (cp *CloudProxy) container() (v1.Container, error) {
174175
func (cp *CloudProxy) buildConfigMap() (*v1.ConfigMap, error) {
175176
return nil, nil
176177
}
178+
179+
func (cp *CloudProxy) buildServiceMonitor() (*promv1.ServiceMonitor, error) {
180+
Endpoint := promv1.Endpoint{
181+
Port: "metrics",
182+
}
183+
184+
return &promv1.ServiceMonitor{
185+
ObjectMeta: metav1.ObjectMeta{
186+
Name: cp.NamePrefix + "-sm",
187+
Namespace: cp.Namespace,
188+
Labels: cp.Labels,
189+
},
190+
Spec: promv1.ServiceMonitorSpec{
191+
Endpoints: []promv1.Endpoint{Endpoint},
192+
NamespaceSelector: promv1.NamespaceSelector{
193+
MatchNames: []string{cp.Namespace},
194+
},
195+
Selector: metav1.LabelSelector{
196+
MatchLabels: cp.Labels,
197+
},
198+
},
199+
}, nil
200+
}

0 commit comments

Comments
 (0)