Skip to content

Commit 5f3d940

Browse files
Merge pull request #780 from vyzigold/fix_rabbit
[OSPRH-21020] Scrape all rabbitmq pods
2 parents 8d248f6 + adc44e0 commit 5f3d940

11 files changed

Lines changed: 330 additions & 189 deletions

File tree

ci/increase-rabbitmq-replicas.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
- name: "Create the kustomization for increasing rabbitmq replicas"
3+
hosts: "{{ cifmw_target_hook_host | default('localhost') }}"
4+
gather_facts: false
5+
environment:
6+
KUBECONFIG: "{{ cifmw_openshift_kubeconfig }}"
7+
PATH: "{{ cifmw_path }}"
8+
tasks:
9+
- name: Copy controlplane kustomization
10+
ansible.builtin.copy:
11+
dest: "{{ cifmw_basedir }}/artifacts/manifests/kustomizations/controlplane/91-kustomize-controlplane-increase-rabbit-replicas.yaml"
12+
content: |-
13+
apiVersion: kustomize.config.k8s.io/v1beta1
14+
kind: Kustomization
15+
namespace: openstack
16+
patches:
17+
- patch: |-
18+
apiVersion: core.openstack.org/v1beta1
19+
kind: OpenStackControlPlane
20+
metadata:
21+
name: unused
22+
spec:
23+
# By increasing the rabbitmq replicas, the CI jobs by default
24+
# run out of PVs. This storage class will create PVs
25+
# dynamically, but works only on CRC based environments.
26+
storageClass: crc-csi-hostpath-provisioner
27+
rabbitmq:
28+
templates:
29+
rabbitmq:
30+
replicas: 3
31+
target:
32+
kind: OpenStackControlPlane

ci/vars-autoscaling.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,7 @@ cifmw_openshift_obs_definition:
1818
pre_deploy_kustomize_autoscaling:
1919
source: "{{ ansible_user_dir }}/{{ zuul.projects['github.com/openstack-k8s-operators/telemetry-operator'].src_dir }}/ci/configure-autoscaling.yml"
2020
type: playbook
21+
22+
pre_deploy_kustomize_increase_rabbitmq_replicas:
23+
source: "{{ ansible_user_dir }}/{{ zuul.projects['github.com/openstack-k8s-operators/telemetry-operator'].src_dir }}/ci/increase-rabbitmq-replicas.yml"
24+
type: playbook

config/rbac/role.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,14 @@ rules:
108108
- get
109109
- patch
110110
- update
111+
- apiGroups:
112+
- discovery.k8s.io
113+
resources:
114+
- endpointslices
115+
verbs:
116+
- get
117+
- list
118+
- watch
111119
- apiGroups:
112120
- heat.openstack.org
113121
resources:

internal/controller/metricstorage_controller.go

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ func (r *MetricStorageReconciler) GetLogger(ctx context.Context) logr.Logger {
111111
//+kubebuilder:rbac:groups=ovn.openstack.org,resources=ovnnorthds,verbs=get;list;watch
112112
//+kubebuilder:rbac:groups=observability.openshift.io,resources=uiplugins,verbs=get;list;watch;create;patch
113113
//+kubebuilder:rbac:groups=core,resources=configmaps,verbs=get;list;watch;create;update;patch;delete
114+
//+kubebuilder:rbac:groups=discovery.k8s.io,resources=endpointslices,verbs=get;list;watch
114115
//+kubebuilder:rbac:groups=k8s.cni.cncf.io,resources=network-attachment-definitions,verbs=get;list;watch
115116

116117
// Reconcile reconciles MetricStorage
@@ -765,9 +766,6 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
765766
}
766767

767768
// ScrapeConfigs for RabbitMQ monitoring
768-
// NOTE: We're watching Rabbits and reconciling with each of their change
769-
// that should keep the targets inside the ScrapeConfig always
770-
// up to date.
771769
rabbitList := &rabbitmqv1.RabbitmqClusterList{}
772770
listOpts := []client.ListOption{
773771
client.InNamespace(instance.GetNamespace()),
@@ -776,22 +774,25 @@ func (r *MetricStorageReconciler) createScrapeConfigs(
776774
if err != nil && !k8s_errors.IsNotFound(err) {
777775
return ctrl.Result{}, err
778776
}
779-
rabbitTargets := []string{}
780777
for _, rabbit := range rabbitList.Items {
781-
rabbitServerName := fmt.Sprintf("%s.%s.svc", rabbit.Name, rabbit.Namespace)
782-
rabbitTargets = append(rabbitTargets, net.JoinHostPort(rabbitServerName, strconv.Itoa(metricstorage.RabbitMQPrometheusPort)))
783-
}
784-
rabbitCfgName := fmt.Sprintf("%s-rabbitmq", telemetry.ServiceName)
785-
desiredScrapeConfig = metricstorage.ScrapeConfig(
786-
instance,
787-
serviceLabels,
788-
rabbitTargets,
789-
instance.Spec.PrometheusTLS.Enabled(),
790-
)
791-
err = r.createServiceScrapeConfig(ctx, instance, Log, "RabbitMQ",
792-
rabbitCfgName, desiredScrapeConfig)
793-
if err != nil {
794-
return ctrl.Result{}, err
778+
desiredScrapeConfig, err = metricstorage.ScrapeConfigRabbitMQ(
779+
ctx,
780+
instance,
781+
serviceLabels,
782+
helper,
783+
rabbit,
784+
instance.Spec.PrometheusTLS.Enabled(),
785+
)
786+
if err != nil {
787+
Log.Info(fmt.Sprintf("Cannot build rabbitMQ scrape config. Scrape configs not created. Error: %s", err))
788+
return ctrl.Result{}, err
789+
}
790+
rabbitCfgName := fmt.Sprintf("%s-%s", telemetry.ServiceName, rabbit.Name)
791+
err = r.createServiceScrapeConfig(ctx, instance, Log, "RabbitMQ",
792+
rabbitCfgName, desiredScrapeConfig)
793+
if err != nil {
794+
return ctrl.Result{}, err
795+
}
795796
}
796797

797798
// mysqld exporter
@@ -1597,10 +1598,6 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
15971598
handler.EnqueueRequestsFromMapFunc(r.nodeSetWatchFn),
15981599
builder.WithPredicates(inventoryPredicator),
15991600
).
1600-
Watches(
1601-
&rabbitmqv1.RabbitmqCluster{},
1602-
handler.EnqueueRequestsFromMapFunc(reconcileAllMetricStoragesWatchFn),
1603-
).
16041601
Watches(
16051602
&ovnv1.OVNNorthd{},
16061603
handler.EnqueueRequestsFromMapFunc(reconcileAllMetricStoragesWatchFn),
@@ -1611,6 +1608,18 @@ func (r *MetricStorageReconciler) SetupWithManager(ctx context.Context, mgr ctrl
16111608
handler.EnqueueRequestsFromMapFunc(reconcileAllMetricStoragesWatchFn),
16121609
builder.WithPredicates(predicate.ResourceVersionChangedPredicate{}),
16131610
).
1611+
Watches(
1612+
&discoveryv1.EndpointSlice{},
1613+
handler.EnqueueRequestsFromMapFunc(reconcileAllMetricStoragesWatchFn),
1614+
builder.WithPredicates(
1615+
predicate.ResourceVersionChangedPredicate{},
1616+
// Don't call the WatchFn on unrelated Endpointslices changes
1617+
predicate.NewPredicateFuncs(func(o client.Object) bool {
1618+
labels := o.GetLabels()
1619+
return labels["app.kubernetes.io/component"] == "rabbitmq"
1620+
}),
1621+
),
1622+
).
16141623
Build(r)
16151624
r.Controller = control
16161625
return err

0 commit comments

Comments
 (0)