Skip to content

Commit b02dab7

Browse files
Merge pull request #814 from vyzigold/fix-topology-fr4
[18.0-fr4][OSPRH-22717] Topology for mysqld-exporter and ksm
2 parents 69c4e32 + c6f38a6 commit b02dab7

4 files changed

Lines changed: 112 additions & 35 deletions

File tree

controllers/ceilometer_controller.go

Lines changed: 57 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -500,55 +500,25 @@ func (r *CeilometerReconciler) reconcileNormal(ctx context.Context, instance *te
500500
return rbacResult, nil
501501
}
502502

503-
//
504-
// Handle Topology
505-
//
506-
// TODO: Either move the topology into reconcileCeilometer and use the serviceLabels defined there
507-
// or modify ceilometer CRD and the ceilometer controller to handle topology for ceilometer, ksm, mysqld-exporter
508-
// separately (each has different service labels).
509-
ceilometerServiceLabels := map[string]string{
510-
common.AppSelector: ceilometer.ServiceName,
511-
common.OwnerSelector: instance.Name,
512-
}
513-
514-
topology, err := ensureTopology(
515-
ctx,
516-
helper,
517-
instance, // topologyHandler
518-
instance.Name, // finalizer
519-
&instance.Status.Conditions,
520-
labels.GetLabelSelector(ceilometerServiceLabels),
521-
)
522-
if err != nil {
523-
instance.Status.Conditions.Set(condition.FalseCondition(
524-
condition.TopologyReadyCondition,
525-
condition.ErrorReason,
526-
condition.SeverityWarning,
527-
condition.TopologyReadyErrorMessage,
528-
err.Error()))
529-
return ctrl.Result{}, fmt.Errorf("waiting for Topology requirements: %w", err)
530-
}
531-
532-
ksmRes, err := r.reconcileKSM(ctx, instance, helper, topology)
503+
ksmRes, err := r.reconcileKSM(ctx, instance, helper)
533504
if err != nil {
534505
return ksmRes, err
535506
}
536507

537-
mysqldRes, err := r.reconcileMysqldExporter(ctx, instance, helper, topology)
508+
mysqldRes, err := r.reconcileMysqldExporter(ctx, instance, helper)
538509
if (err != nil || mysqldRes != ctrl.Result{}) {
539510
return mysqldRes, err
540511
}
541512

542513
// NOTE(mmagr): Ceilometer reconciliation has to be the last as this is the (only) place
543514
// where condition ReadyCondition is/should be evaluated
544-
return r.reconcileCeilometer(ctx, instance, helper, topology)
515+
return r.reconcileCeilometer(ctx, instance, helper)
545516
}
546517

547518
func (r *CeilometerReconciler) reconcileCeilometer(
548519
ctx context.Context,
549520
instance *telemetryv1.Ceilometer,
550521
helper *helper.Helper,
551-
topology *topologyv1.Topology,
552522
) (ctrl.Result, error) {
553523
// ConfigMap
554524
configMapVars := make(map[string]env.Setter)
@@ -760,6 +730,24 @@ func (r *CeilometerReconciler) reconcileCeilometer(
760730
common.OwnerSelector: instance.Name,
761731
}
762732

733+
topology, err := ensureTopology(
734+
ctx,
735+
helper,
736+
instance, // topologyHandler
737+
instance.Name, // finalizer
738+
&instance.Status.Conditions,
739+
labels.GetLabelSelector(serviceLabels),
740+
)
741+
if err != nil {
742+
instance.Status.Conditions.Set(condition.FalseCondition(
743+
condition.TopologyReadyCondition,
744+
condition.ErrorReason,
745+
condition.SeverityWarning,
746+
condition.TopologyReadyErrorMessage, // Topology config create error occured %s
747+
fmt.Sprintf("for ceilometer topology: %s", err.Error())))
748+
return ctrl.Result{}, fmt.Errorf("waiting for Topology requirements (ceilometer): %w", err)
749+
}
750+
763751
// Handle service init
764752
ctrlResult, err = r.reconcileInit(ctx, instance, helper, serviceLabels)
765753
if err != nil {
@@ -828,7 +816,6 @@ func (r *CeilometerReconciler) reconcileMysqldExporter(
828816
ctx context.Context,
829817
instance *telemetryv1.Ceilometer,
830818
helper *helper.Helper,
831-
topology *topologyv1.Topology,
832819
) (ctrl.Result, error) {
833820
Log := r.GetLogger(ctx)
834821
Log.Info(fmt.Sprintf(msgReconcileStart, mysqldexporter.ServiceName))
@@ -952,6 +939,24 @@ func (r *CeilometerReconciler) reconcileMysqldExporter(
952939
common.OwnerSelector: instance.Name,
953940
}
954941

942+
topology, err := ensureTopology(
943+
ctx,
944+
helper,
945+
instance, // topologyHandler
946+
instance.Name, // finalizer
947+
&instance.Status.Conditions,
948+
labels.GetLabelSelector(serviceLabels),
949+
)
950+
if err != nil {
951+
instance.Status.Conditions.Set(condition.FalseCondition(
952+
condition.TopologyReadyCondition,
953+
condition.ErrorReason,
954+
condition.SeverityWarning,
955+
condition.TopologyReadyErrorMessage, // Topology config create error occured %s
956+
fmt.Sprintf("for mysqld-exporter topology: %s", err.Error())))
957+
return ctrl.Result{}, fmt.Errorf("waiting for Topology requirements (mysqld-exporter): %w", err)
958+
}
959+
955960
// Define a new StatefulSet object
956961
sfsetDef, err := mysqldexporter.StatefulSet(instance, inputHash, serviceLabels, topology)
957962
if err != nil {
@@ -1008,7 +1013,6 @@ func (r *CeilometerReconciler) reconcileKSM(
10081013
ctx context.Context,
10091014
instance *telemetryv1.Ceilometer,
10101015
helper *helper.Helper,
1011-
topology *topologyv1.Topology,
10121016
) (ctrl.Result, error) {
10131017
Log := r.GetLogger(ctx)
10141018
Log.Info(fmt.Sprintf(msgReconcileStart, availability.KSMServiceName))
@@ -1114,6 +1118,24 @@ func (r *CeilometerReconciler) reconcileKSM(
11141118
instance.Status.KSMHash[common.InputHashName] = inputHash
11151119
instance.Status.Conditions.MarkTrue(telemetryv1.KSMServiceConfigReadyCondition, condition.InputReadyMessage)
11161120

1121+
topology, err := ensureTopology(
1122+
ctx,
1123+
helper,
1124+
instance, // topologyHandler
1125+
instance.Name, // finalizer
1126+
&instance.Status.Conditions,
1127+
labels.GetLabelSelector(serviceLabels),
1128+
)
1129+
if err != nil {
1130+
instance.Status.Conditions.Set(condition.FalseCondition(
1131+
condition.TopologyReadyCondition,
1132+
condition.ErrorReason,
1133+
condition.SeverityWarning,
1134+
condition.TopologyReadyErrorMessage, // Topology config create error occured %s
1135+
fmt.Sprintf("for kube-state-metrics topology: %s", err.Error())))
1136+
return ctrl.Result{}, fmt.Errorf("waiting for Topology requirements (kube-state-metrics): %w", err)
1137+
}
1138+
11171139
// create the kube-state-metrics statefulset
11181140
ssDef, err := availability.KSMStatefulSet(instance, tlsConfName, serviceLabels, topology)
11191141
if err != nil {

kuttl-test.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ testDirs:
2626
- tests/kuttl/suites/default/
2727
- tests/kuttl/suites/metricstorage/
2828
- tests/kuttl/suites/tls/
29+
- tests/kuttl/suites/topology/
2930
suppress:
3031
- events # Remove spammy event logs
3132
commands:

tests/kuttl/suites/topology/tests/01-assert.yaml

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,58 @@ status:
2525
---
2626
apiVersion: apps/v1
2727
kind: StatefulSet
28+
metadata:
29+
labels:
30+
service: mysqld-exporter
31+
owner: ceilometer
32+
name: mysqld-exporter
33+
ownerReferences:
34+
- kind: Ceilometer
35+
name: ceilometer
36+
spec:
37+
template:
38+
spec:
39+
topologySpreadConstraints:
40+
- maxSkew: 1
41+
topologyKey: "topology.kubernetes.io/hostname"
42+
whenUnsatisfiable: ScheduleAnyway
43+
labelSelector:
44+
matchLabels:
45+
service: mysqld-exporter
46+
owner: ceilometer
47+
status:
48+
availableReplicas: 1
49+
currentReplicas: 1
50+
readyReplicas: 1
51+
replicas: 1
52+
---
53+
apiVersion: apps/v1
54+
kind: StatefulSet
55+
metadata:
56+
labels:
57+
service: kube-state-metrics
58+
name: kube-state-metrics
59+
ownerReferences:
60+
- kind: Ceilometer
61+
name: ceilometer
62+
spec:
63+
template:
64+
spec:
65+
topologySpreadConstraints:
66+
- maxSkew: 1
67+
topologyKey: "topology.kubernetes.io/hostname"
68+
whenUnsatisfiable: ScheduleAnyway
69+
labelSelector:
70+
matchLabels:
71+
service: kube-state-metrics
72+
status:
73+
availableReplicas: 1
74+
currentReplicas: 1
75+
readyReplicas: 1
76+
replicas: 1
77+
---
78+
apiVersion: apps/v1
79+
kind: StatefulSet
2880
metadata:
2981
labels:
3082
service: aodh

tests/kuttl/suites/topology/tests/01-deploy.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ spec:
2727
ceilometer:
2828
enabled: true
2929
secret: osp-secret
30+
mysqldExporterEnabled: true
31+
ksmEnabled: true
3032
logging:
3133
enabled: false
3234
port: 10514

0 commit comments

Comments
 (0)