Skip to content

Commit fb9ceb6

Browse files
author
Matt Rogers
committed
Fix controller metrics port
- Run the controller-runtime metrics (controller workload stats) on port 8383. - Remove the service endpoint for http-metrics. This was previously an additional metrics endpoint provided by operator-sdk, but was only useful for proxy programs. controller-runtime now only provides controller workqueue metrics. - Ensure the metrics service is updated on operator startup. In turn this will update the ServiceMonitor for new changes to the service endpoints.
1 parent 23cc55e commit fb9ceb6

File tree

1 file changed

+25
-15
lines changed

1 file changed

+25
-15
lines changed

cmd/manager/operator.go

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ func init() {
7777
var (
7878
metricsHost = "0.0.0.0"
7979
metricsPort int32 = 8383
80-
operatorMetricsPort int32 = 8686
8180
defaultPrometheusAlertName = "file-integrity"
8281
metricsServiceName = "metrics"
8382
leaderElectionID = "962a0cf2.openshift.io"
@@ -200,9 +199,10 @@ func RunOperator(cmd *cobra.Command, args []string) {
200199
}
201200

202201
func ensureMetricsServiceAndSecret(ctx context.Context, kClient *kubernetes.Clientset, ns string) (*v1.Service, error) {
203-
var mService *v1.Service
202+
var returnService *v1.Service
204203
var err error
205-
mService, err = kClient.CoreV1().Services(ns).Create(ctx, &v1.Service{
204+
205+
newService := &v1.Service{
206206
ObjectMeta: metav1.ObjectMeta{
207207
Labels: map[string]string{
208208
"name": "file-integrity-operator",
@@ -216,17 +216,11 @@ func ensureMetricsServiceAndSecret(ctx context.Context, kClient *kubernetes.Clie
216216
Spec: v1.ServiceSpec{
217217
Ports: []v1.ServicePort{
218218
{
219-
Name: "http-metrics",
219+
Name: "metrics",
220220
Port: metricsPort,
221221
TargetPort: intstr.FromInt(int(metricsPort)),
222222
Protocol: v1.ProtocolTCP,
223223
},
224-
{
225-
Name: "cr-metrics",
226-
Port: operatorMetricsPort,
227-
TargetPort: intstr.FromInt(int(operatorMetricsPort)),
228-
Protocol: v1.ProtocolTCP,
229-
},
230224
{
231225
Name: "metrics-fio",
232226
Port: metrics.ControllerMetricsPort,
@@ -239,15 +233,31 @@ func ensureMetricsServiceAndSecret(ctx context.Context, kClient *kubernetes.Clie
239233
},
240234
Type: v1.ServiceTypeClusterIP,
241235
},
242-
}, metav1.CreateOptions{})
236+
}
237+
238+
createdService, err := kClient.CoreV1().Services(ns).Create(ctx, newService, metav1.CreateOptions{})
243239
if err != nil && !kerr.IsAlreadyExists(err) {
244240
return nil, err
245241
}
246242
if kerr.IsAlreadyExists(err) {
247-
mService, err = kClient.CoreV1().Services(ns).Get(ctx, metricsServiceName, metav1.GetOptions{})
248-
if err != nil {
249-
return nil, err
243+
curService, getErr := kClient.CoreV1().Services(ns).Get(ctx, metricsServiceName, metav1.GetOptions{})
244+
if getErr != nil {
245+
return nil, getErr
246+
}
247+
returnService = curService
248+
249+
// Needs update?
250+
if !reflect.DeepEqual(curService.Spec, newService.Spec) {
251+
serviceCopy := curService.DeepCopy()
252+
serviceCopy.Spec = newService.Spec
253+
updatedService, updateErr := kClient.CoreV1().Services(ns).Update(ctx, serviceCopy, metav1.UpdateOptions{})
254+
if updateErr != nil {
255+
return nil, updateErr
256+
}
257+
returnService = updatedService
250258
}
259+
} else {
260+
returnService = createdService
251261
}
252262

253263
// Ensure the serving-cert secret for metrics is available, we have to exit and restart if not
@@ -259,7 +269,7 @@ func ensureMetricsServiceAndSecret(ctx context.Context, kClient *kubernetes.Clie
259269
}
260270
}
261271

262-
return mService, nil
272+
return returnService, nil
263273
}
264274

265275
func defaultPrometheusRule(alertName, namespace string) *monitoring.PrometheusRule {

0 commit comments

Comments
 (0)