Skip to content
This repository was archived by the owner on Jan 19, 2024. It is now read-only.

Commit 1202556

Browse files
authored
refactor: Do not delete prometheus pods after configuring ConfigMaps (#252)
There is no need to delete pods to force a reload as the configmap-reload already takes care of triggering a config reload. The code that deletes prometheus pods has been removed along with the related permission in the role for prometheus-service Signed-off-by: Paolo Chila <[email protected]>
1 parent b36493c commit 1202556

File tree

3 files changed

+71
-87
lines changed

3 files changed

+71
-87
lines changed

eventhandling/configureEvent.go

Lines changed: 18 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"gopkg.in/yaml.v2"
1212
v1 "k8s.io/api/core/v1"
1313
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
14-
"k8s.io/client-go/kubernetes"
15-
"k8s.io/client-go/rest"
1614

1715
"github.com/keptn-contrib/prometheus-service/utils"
1816

@@ -133,72 +131,41 @@ func (eh ConfigureMonitoringEventHandler) configurePrometheusAndStoreResources(e
133131
if err != nil {
134132
return err
135133
}
136-
137-
// (2.1) restart prometheus by deleting prometheus pod
138-
if err := eh.deletePod(env.PrometheusLabels, env.PrometheusNamespace); err != nil {
139-
return err
140-
}
141-
142-
// (2.1) restart prometheus alert manager by deleting prometheus alert manager pod
143-
if err := eh.deletePod(env.AlertManagerLabels, env.AlertManagerNamespace); err != nil {
144-
return err
145-
}
146134
}
147135

148136
return nil
149137
}
150138

151-
func (eh ConfigureMonitoringEventHandler) deletePod(labels string, namespace string) error {
152-
eh.logger.Info("Deleting Pod with labels " + labels + "...")
153-
154-
prometheusHelper, err := utils.NewPrometheusHelper()
155-
if err != nil {
156-
return err
157-
}
158-
159-
labelArr := strings.Split(labels, ",")
160-
161-
for _, label := range labelArr {
162-
err = prometheusHelper.DeletePod(label, namespace)
163-
if err != nil {
164-
return err
165-
}
166-
}
167-
168-
eh.logger.Info("Deleting Pod successfully")
169-
170-
return nil
171-
}
172-
173139
func (eh ConfigureMonitoringEventHandler) isPrometheusInstalled() bool {
174140
eh.logger.Debug("Check if prometheus service in " + env.PrometheusNamespace + " namespace is available")
175-
config, err := rest.InClusterConfig()
141+
svcList, err := getPrometheusServiceFromK8s()
176142
if err != nil {
177-
eh.logger.Debug(fmt.Sprintf("Could not initialize kubernetes client %s", err.Error()))
143+
eh.logger.Errorf("Error locating prometheus service in k8s: %v", err)
178144
return false
179145
}
180-
api, err := kubernetes.NewForConfig(config)
181146

182-
if err != nil {
183-
eh.logger.Debug(fmt.Sprintf("Could not initialize kubernetes client %s", err.Error()))
184-
return false
147+
if len(svcList.Items) > 0 {
148+
eh.logger.Debug("Prometheus service in " + env.PrometheusNamespace + " namespace is available")
149+
return true
185150
}
186151

187-
svc, err := api.CoreV1().Services(env.PrometheusNamespace).List(metav1.ListOptions{
188-
LabelSelector: env.PrometheusLabels,
189-
})
152+
return false
153+
}
190154

155+
func getPrometheusServiceFromK8s() (*v1.ServiceList, error) {
156+
svcList, err := utils.ListK8sServicesByLabel(env.PrometheusLabels, env.PrometheusNamespace)
191157
if err != nil {
192-
eh.logger.Debug(fmt.Sprintf("Prometheus service in %s namespace is not available. %s", env.PrometheusNamespace, err.Error()))
193-
return false
158+
return nil, fmt.Errorf("prometheus service not found: %w", err)
194159
}
160+
return svcList, err
161+
}
195162

196-
if len(svc.Items) > 0 {
197-
eh.logger.Debug("Prometheus service in " + env.PrometheusNamespace + " namespace is available")
198-
return true
163+
func getPrometheusAlertManagerServiceFromK8s() (*v1.ServiceList, error) {
164+
svcList, err := utils.ListK8sServicesByLabel(env.AlertManagerLabels, env.AlertManagerNamespace)
165+
if err != nil {
166+
return nil, fmt.Errorf("prometheus alert manager service not found: %w", err)
199167
}
200-
201-
return false
168+
return svcList, err
202169
}
203170

204171
func (eh ConfigureMonitoringEventHandler) configurePrometheusAlertManager() error {
@@ -223,7 +190,7 @@ func (eh ConfigureMonitoringEventHandler) updatePrometheusConfigMap(eventData ke
223190
return err
224191
}
225192

226-
api, err := getKubeClient()
193+
api, err := utils.GetKubeClient()
227194
if err != nil {
228195
return err
229196
}
@@ -339,18 +306,6 @@ func (eh ConfigureMonitoringEventHandler) updatePrometheusConfigMap(eventData ke
339306
return nil
340307
}
341308

342-
func getKubeClient() (*kubernetes.Clientset, error) {
343-
k8sConfig, err := rest.InClusterConfig()
344-
if err != nil {
345-
return nil, err
346-
}
347-
api, err := kubernetes.NewForConfig(k8sConfig)
348-
if err != nil {
349-
return nil, err
350-
}
351-
return api, nil
352-
}
353-
354309
func getDefaultFilterExpression(project string, stage string, service string, filters map[string]string) string {
355310
filterExpression := "job='" + service + "-" + project + "-" + stage + "-primary'"
356311
if filters != nil && len(filters) > 0 {

utils/k8s.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package utils
2+
3+
import (
4+
"fmt"
5+
6+
"k8s.io/api/core/v1"
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+
"k8s.io/client-go/kubernetes"
9+
"k8s.io/client-go/rest"
10+
)
11+
12+
// GetKubeClient returns a k8s ClientSet using the in-cluster config
13+
func GetKubeClient() (*kubernetes.Clientset, error) {
14+
k8sConfig, err := rest.InClusterConfig()
15+
if err != nil {
16+
return nil, err
17+
}
18+
api, err := kubernetes.NewForConfig(k8sConfig)
19+
if err != nil {
20+
return nil, err
21+
}
22+
return api, nil
23+
}
24+
25+
// ListK8sServicesByLabel returns a k8s service list matching the passed labelSelector in the specified namespace
26+
func ListK8sServicesByLabel(svcLabelSelector, namespace string) (*v1.ServiceList, error) {
27+
api, err := GetKubeClient()
28+
29+
if err != nil {
30+
return nil, fmt.Errorf("could not initialize kubernetes client %w", err)
31+
}
32+
33+
svcList, err := api.CoreV1().Services(namespace).List(
34+
metav1.ListOptions{
35+
LabelSelector: svcLabelSelector,
36+
},
37+
)
38+
39+
if err != nil {
40+
return nil, fmt.Errorf(
41+
"service matching LabelSelector %s in %s namespace is not available. %w", svcLabelSelector, namespace,
42+
err,
43+
)
44+
}
45+
return svcList, nil
46+
}

utils/prometheus.go

Lines changed: 7 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ import (
55
"encoding/json"
66
"errors"
77
"fmt"
8+
"io/ioutil"
9+
"math"
10+
"net/http"
11+
"net/url"
12+
"strconv"
13+
"strings"
14+
"time"
815

916
keptncommon "github.com/keptn/go-utils/pkg/lib/keptn"
1017
alertConfig "github.com/prometheus/alertmanager/config"
1118
"gopkg.in/yaml.v2"
12-
"io/ioutil"
1319
v1 "k8s.io/api/core/v1"
1420
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1521
"k8s.io/client-go/kubernetes"
1622
"k8s.io/client-go/rest"
17-
"math"
18-
"net/url"
19-
"strconv"
20-
"strings"
21-
"time"
2223

2324
keptnv2 "github.com/keptn/go-utils/pkg/lib/v0_2_0"
24-
"net/http"
2525
)
2626

2727
const Throughput = "throughput"
@@ -118,23 +118,6 @@ func (p *PrometheusHelper) CreateConfigMap(cm *v1.ConfigMap, namespace string) e
118118
return nil
119119
}
120120

121-
func (p *PrometheusHelper) DeletePod(label string, namespace string) error {
122-
pod_list, err := p.KubeApi.CoreV1().Pods(namespace).List(metav1.ListOptions{
123-
LabelSelector: label,
124-
})
125-
if err != nil {
126-
return err
127-
}
128-
129-
for _, pod := range pod_list.Items {
130-
err := p.KubeApi.CoreV1().Pods(namespace).Delete(pod.Name, &metav1.DeleteOptions{})
131-
if err != nil {
132-
return err
133-
}
134-
}
135-
return nil
136-
}
137-
138121
func (p *PrometheusHelper) UpdateAMConfigMap(name string, filename string, namespace string) error {
139122
getCM, err := p.GetConfigMap(name, namespace)
140123
if err != nil {

0 commit comments

Comments
 (0)