Skip to content

Commit 98a2cb7

Browse files
committed
MON-4036: Add NodeExporterConfig to ClusterMonitoring API
Add NodeExporterConfig to ClusterMonitoringSpec with support for nodeSelector, resources, tolerations, collectors (10 individual toggles with per-collector options), maxProcs, and ignoredNetworkDevices. Signed-off-by: Daniel Mellado <dmellado@fedoraproject.org>
1 parent 0608f61 commit 98a2cb7

9 files changed

Lines changed: 10588 additions & 48770 deletions

File tree

config/v1alpha1/tests/clustermonitorings.config.openshift.io/ClusterMonitoringConfig.yaml

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,3 +577,234 @@ tests:
577577
prometheusOperatorAdmissionWebhookConfig:
578578
resources: []
579579
expectedError: 'spec.prometheusOperatorAdmissionWebhookConfig.resources: Invalid value: 0: spec.prometheusOperatorAdmissionWebhookConfig.resources in body should have at least 1 items'
580+
- name: Should be able to create NodeExporterConfig with valid resources
581+
initial: |
582+
apiVersion: config.openshift.io/v1alpha1
583+
kind: ClusterMonitoring
584+
spec:
585+
nodeExporterConfig:
586+
resources:
587+
- name: "cpu"
588+
request: "50m"
589+
limit: "200m"
590+
- name: "memory"
591+
request: "50Mi"
592+
limit: "200Mi"
593+
expected: |
594+
apiVersion: config.openshift.io/v1alpha1
595+
kind: ClusterMonitoring
596+
spec:
597+
nodeExporterConfig:
598+
resources:
599+
- name: "cpu"
600+
request: "50m"
601+
limit: "200m"
602+
- name: "memory"
603+
request: "50Mi"
604+
limit: "200Mi"
605+
- name: Should be able to create NodeExporterConfig with valid tolerations
606+
initial: |
607+
apiVersion: config.openshift.io/v1alpha1
608+
kind: ClusterMonitoring
609+
spec:
610+
nodeExporterConfig:
611+
tolerations:
612+
- operator: "Exists"
613+
expected: |
614+
apiVersion: config.openshift.io/v1alpha1
615+
kind: ClusterMonitoring
616+
spec:
617+
nodeExporterConfig:
618+
tolerations:
619+
- operator: "Exists"
620+
- name: Should be able to create NodeExporterConfig with collectors
621+
initial: |
622+
apiVersion: config.openshift.io/v1alpha1
623+
kind: ClusterMonitoring
624+
spec:
625+
nodeExporterConfig:
626+
collectors:
627+
cpuFreq:
628+
enabled: Enabled
629+
tcpStat:
630+
enabled: Disabled
631+
netDev:
632+
enabled: Enabled
633+
netClass:
634+
enabled: Enabled
635+
useNetlink: Enabled
636+
systemd:
637+
enabled: Enabled
638+
units:
639+
- "kubelet.service"
640+
- "crio.service"
641+
expected: |
642+
apiVersion: config.openshift.io/v1alpha1
643+
kind: ClusterMonitoring
644+
spec:
645+
nodeExporterConfig:
646+
collectors:
647+
cpuFreq:
648+
enabled: Enabled
649+
tcpStat:
650+
enabled: Disabled
651+
netDev:
652+
enabled: Enabled
653+
netClass:
654+
enabled: Enabled
655+
useNetlink: Enabled
656+
systemd:
657+
enabled: Enabled
658+
units:
659+
- "kubelet.service"
660+
- "crio.service"
661+
- name: Should be able to create NodeExporterConfig with all fields
662+
initial: |
663+
apiVersion: config.openshift.io/v1alpha1
664+
kind: ClusterMonitoring
665+
spec:
666+
nodeExporterConfig:
667+
nodeSelector:
668+
kubernetes.io/os: linux
669+
resources:
670+
- name: "cpu"
671+
request: "50m"
672+
limit: "200m"
673+
tolerations:
674+
- operator: "Exists"
675+
collectors:
676+
cpuFreq:
677+
enabled: Enabled
678+
buddyInfo:
679+
enabled: Disabled
680+
maxProcs: 4
681+
ignoredNetworkDevices:
682+
- "^veth.*$"
683+
- "^docker.*$"
684+
expected: |
685+
apiVersion: config.openshift.io/v1alpha1
686+
kind: ClusterMonitoring
687+
spec:
688+
nodeExporterConfig:
689+
nodeSelector:
690+
kubernetes.io/os: linux
691+
resources:
692+
- name: "cpu"
693+
request: "50m"
694+
limit: "200m"
695+
tolerations:
696+
- operator: "Exists"
697+
collectors:
698+
cpuFreq:
699+
enabled: Enabled
700+
buddyInfo:
701+
enabled: Disabled
702+
maxProcs: 4
703+
ignoredNetworkDevices:
704+
- "^veth.*$"
705+
- "^docker.*$"
706+
- name: Should reject NodeExporterConfig with empty object
707+
initial: |
708+
apiVersion: config.openshift.io/v1alpha1
709+
kind: ClusterMonitoring
710+
spec:
711+
nodeExporterConfig: {}
712+
expectedError: 'spec.nodeExporterConfig: Invalid value: 0: spec.nodeExporterConfig in body should have at least 1 properties'
713+
- name: Should reject NodeExporterConfig with too many resources
714+
initial: |
715+
apiVersion: config.openshift.io/v1alpha1
716+
kind: ClusterMonitoring
717+
spec:
718+
nodeExporterConfig:
719+
resources:
720+
- name: "cpu"
721+
request: "100m"
722+
- name: "memory"
723+
request: "64Mi"
724+
- name: "hugepages-2Mi"
725+
request: "32Mi"
726+
- name: "hugepages-1Gi"
727+
request: "1Gi"
728+
- name: "ephemeral-storage"
729+
request: "1Gi"
730+
- name: "nvidia.com/gpu"
731+
request: "1"
732+
- name: "example.com/foo"
733+
request: "1"
734+
- name: "example.com/bar"
735+
request: "1"
736+
- name: "example.com/baz"
737+
request: "1"
738+
- name: "example.com/qux"
739+
request: "1"
740+
- name: "example.com/quux"
741+
request: "1"
742+
expectedError: 'spec.nodeExporterConfig.resources: Too many: 11: must have at most 10 items'
743+
- name: Should reject NodeExporterConfig with duplicate resource names
744+
initial: |
745+
apiVersion: config.openshift.io/v1alpha1
746+
kind: ClusterMonitoring
747+
spec:
748+
nodeExporterConfig:
749+
resources:
750+
- name: "cpu"
751+
request: "100m"
752+
- name: "cpu"
753+
request: "200m"
754+
expectedError: 'spec.nodeExporterConfig.resources[1]: Duplicate value: map[string]interface {}{"name":"cpu"}'
755+
- name: Should reject NodeExporterConfig with limit less than request
756+
initial: |
757+
apiVersion: config.openshift.io/v1alpha1
758+
kind: ClusterMonitoring
759+
spec:
760+
nodeExporterConfig:
761+
resources:
762+
- name: "cpu"
763+
request: "500m"
764+
limit: "200m"
765+
expectedError: 'spec.nodeExporterConfig.resources[0]: Invalid value: "object": limit must be greater than or equal to request'
766+
- name: Should reject NodeExporterConfig with empty resources array
767+
initial: |
768+
apiVersion: config.openshift.io/v1alpha1
769+
kind: ClusterMonitoring
770+
spec:
771+
nodeExporterConfig:
772+
resources: []
773+
expectedError: 'spec.nodeExporterConfig.resources: Invalid value: 0: spec.nodeExporterConfig.resources in body should have at least 1 items'
774+
- name: Should reject NodeExporterConfig with empty collectors object
775+
initial: |
776+
apiVersion: config.openshift.io/v1alpha1
777+
kind: ClusterMonitoring
778+
spec:
779+
nodeExporterConfig:
780+
collectors: {}
781+
expectedError: 'spec.nodeExporterConfig.collectors: Invalid value: 0: spec.nodeExporterConfig.collectors in body should have at least 1 properties'
782+
- name: Should accept NodeExporterConfig with empty ignoredNetworkDevices list
783+
initial: |
784+
apiVersion: config.openshift.io/v1alpha1
785+
kind: ClusterMonitoring
786+
spec:
787+
nodeExporterConfig:
788+
ignoredNetworkDevices: []
789+
expected: |
790+
apiVersion: config.openshift.io/v1alpha1
791+
kind: ClusterMonitoring
792+
spec:
793+
nodeExporterConfig:
794+
ignoredNetworkDevices: []
795+
- name: Should reject NodeExporterConfig with maxProcs below minimum
796+
initial: |
797+
apiVersion: config.openshift.io/v1alpha1
798+
kind: ClusterMonitoring
799+
spec:
800+
nodeExporterConfig:
801+
maxProcs: -1
802+
expectedError: 'spec.nodeExporterConfig.maxProcs'
803+
- name: Should reject NodeExporterConfig with maxProcs exceeding maximum
804+
initial: |
805+
apiVersion: config.openshift.io/v1alpha1
806+
kind: ClusterMonitoring
807+
spec:
808+
nodeExporterConfig:
809+
maxProcs: 1025
810+
expectedError: 'spec.nodeExporterConfig.maxProcs'

0 commit comments

Comments
 (0)