diff --git a/docs/crd-benchmark-doc.md b/docs/crd-benchmark-doc.md new file mode 100644 index 0000000000000000000000000000000000000000..1e12d6ebd776b11d76241cfb530daeba9e0b5c24 --- /dev/null +++ b/docs/crd-benchmark-doc.md @@ -0,0 +1,374 @@ +# API Reference + +Packages: + +- [theodolite.com/v1](#theodolitecomv1) + +# theodolite.com/v1 + +Resource Types: + +- [benchmark](#benchmark) + + + + +## benchmark +<sup><sup>[↩ Parent](#theodolitecomv1 )</sup></sup> + + + + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>apiVersion</b></td> + <td>string</td> + <td>theodolite.com/v1</td> + <td>true</td> + </tr> + <tr> + <td><b>kind</b></td> + <td>string</td> + <td>benchmark</td> + <td>true</td> + </tr> + <tr> + <td><b><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#objectmeta-v1-meta">metadata</a></b></td> + <td>object</td> + <td>Refer to the Kubernetes API documentation for the fields of the `metadata` field.</td> + <td>true</td> + </tr><tr> + <td><b><a href="#benchmarkspec">spec</a></b></td> + <td>object</td> + <td> + <br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec +<sup><sup>[↩ Parent](#benchmark)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>name</b></td> + <td>string</td> + <td> + This field exists only for technical reasons and should not be set by the user. The value of the field will be overwritten.<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>appResource</b></td> + <td>[]string</td> + <td> + A list of file names that reference Kubernetes resources that are deployed on the cluster for the system under test (SUT).<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#benchmarkspeckafkaconfig">kafkaConfig</a></b></td> + <td>object</td> + <td> + Contains the Kafka configuration.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>loadGenResource</b></td> + <td>[]string</td> + <td> + A list of file names that reference Kubernetes resources that are deployed on the cluster for the load generator.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#benchmarkspecloadtypesindex">loadTypes</a></b></td> + <td>[]object</td> + <td> + A list of load types that can be scaled for this benchmark. For each load type the concrete values are defined in the execution object.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#benchmarkspecresourcetypesindex">resourceTypes</a></b></td> + <td>[]object</td> + <td> + A list of resource types that can be scaled for this `benchmark` resource. For each resource type the concrete values are defined in the `execution` object.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec.kafkaConfig +<sup><sup>[↩ Parent](#benchmarkspec)</sup></sup> + + + +Contains the Kafka configuration. + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>bootstrapServer</b></td> + <td>string</td> + <td> + The bootstrap servers connection string.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#benchmarkspeckafkaconfigtopicsindex">topics</a></b></td> + <td>[]object</td> + <td> + List of topics to be created for each experiment. Alternative theodolite offers the possibility to remove certain topics after each experiment.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec.kafkaConfig.topics[index] +<sup><sup>[↩ Parent](#benchmarkspeckafkaconfig)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>removeOnly</b></td> + <td>boolean</td> + <td> + Determines if this topic should only be deleted after each experiement. For removeOnly topics the name can be a RegEx describing the topic.<br/> + <br/> + <i>Default</i>: false<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>name</b></td> + <td>string</td> + <td> + The name of the topic.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr><tr> + <td><b>numPartitions</b></td> + <td>integer</td> + <td> + The number of partitions of the topic.<br/> + <br/> + <i>Default</i>: 0<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>replicationFactor</b></td> + <td>integer</td> + <td> + The replication factor of the topic.<br/> + <br/> + <i>Default</i>: 0<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec.loadTypes[index] +<sup><sup>[↩ Parent](#benchmarkspec)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b><a href="#benchmarkspecloadtypesindexpatchersindex">patchers</a></b></td> + <td>[]object</td> + <td> + List of patchers used to scale this resource type.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>typeName</b></td> + <td>string</td> + <td> + Name of the load type.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec.loadTypes[index].patchers[index] +<sup><sup>[↩ Parent](#benchmarkspecloadtypesindex)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>properties</b></td> + <td>object</td> + <td> + (Optional) Patcher specific additional arguments.<br/> + <br/> + <i>Default</i>: map[]<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>resource</b></td> + <td>string</td> + <td> + Specifies the Kubernetes resource to be patched.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr><tr> + <td><b>type</b></td> + <td>string</td> + <td> + Type of the Patcher.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec.resourceTypes[index] +<sup><sup>[↩ Parent](#benchmarkspec)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b><a href="#benchmarkspecresourcetypesindexpatchersindex">patchers</a></b></td> + <td>[]object</td> + <td> + List of patchers used to scale this resource type.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>typeName</b></td> + <td>string</td> + <td> + Name of the resource type.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### benchmark.spec.resourceTypes[index].patchers[index] +<sup><sup>[↩ Parent](#benchmarkspecresourcetypesindex)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>properties</b></td> + <td>object</td> + <td> + (Optional) Patcher specific additional arguments.<br/> + <br/> + <i>Default</i>: map[]<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>resource</b></td> + <td>string</td> + <td> + Specifies the Kubernetes resource to be patched.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr><tr> + <td><b>type</b></td> + <td>string</td> + <td> + Type of the patcher.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr></tbody> +</table> \ No newline at end of file diff --git a/docs/crd-execution-doc.md b/docs/crd-execution-doc.md new file mode 100644 index 0000000000000000000000000000000000000000..21b5cdecabd4a247df9f2c0c8d376ad578f4032f --- /dev/null +++ b/docs/crd-execution-doc.md @@ -0,0 +1,438 @@ +# API Reference + +Packages: + +- [theodolite.com/v1](#theodolitecomv1) + +# theodolite.com/v1 + +Resource Types: + +- [execution](#execution) + + + + +## execution +<sup><sup>[↩ Parent](#theodolitecomv1 )</sup></sup> + + + + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>apiVersion</b></td> + <td>string</td> + <td>theodolite.com/v1</td> + <td>true</td> + </tr> + <tr> + <td><b>kind</b></td> + <td>string</td> + <td>execution</td> + <td>true</td> + </tr> + <tr> + <td><b><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.20/#objectmeta-v1-meta">metadata</a></b></td> + <td>object</td> + <td>Refer to the Kubernetes API documentation for the fields of the `metadata` field.</td> + <td>true</td> + </tr><tr> + <td><b><a href="#executionstatus">status</a></b></td> + <td>object</td> + <td> + <br/> + </td> + <td>false</td> + </tr><tr> + <td><b><a href="#executionspec">spec</a></b></td> + <td>object</td> + <td> + <br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### execution.status +<sup><sup>[↩ Parent](#execution)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>executionDuration</b></td> + <td>string</td> + <td> + Duration of the execution in seconds<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>executionState</b></td> + <td>string</td> + <td> + <br/> + </td> + <td>false</td> + </tr></tbody> +</table> + + +### execution.spec +<sup><sup>[↩ Parent](#execution)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>name</b></td> + <td>string</td> + <td> + This field exists only for technical reasons and should not be set by the user. The value of the field will be overwritten.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>false</td> + </tr><tr> + <td><b>benchmark</b></td> + <td>string</td> + <td> + The name of the benchmark this execution is referring to.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#executionspecconfigoverridesindex">configOverrides</a></b></td> + <td>[]object</td> + <td> + List of patchers that are used to override existing configurations.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#executionspecexecution">execution</a></b></td> + <td>object</td> + <td> + Defines the overall parameter for the execution.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#executionspecload">load</a></b></td> + <td>object</td> + <td> + Specifies the load values that are benchmarked.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#executionspecresources">resources</a></b></td> + <td>object</td> + <td> + Specifies the scaling resource that is benchmarked.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b><a href="#executionspecslosindex">slos</a></b></td> + <td>[]object</td> + <td> + List of resource values for the specified resource type.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### execution.spec.configOverrides[index] +<sup><sup>[↩ Parent](#executionspec)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b><a href="#executionspecconfigoverridesindexpatcher">patcher</a></b></td> + <td>object</td> + <td> + Patcher used to patch a resource<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>value</b></td> + <td>string</td> + <td> + <br/> + </td> + <td>false</td> + </tr></tbody> +</table> + + +### execution.spec.configOverrides[index].patcher +<sup><sup>[↩ Parent](#executionspecconfigoverridesindex)</sup></sup> + + + +Patcher used to patch a resource + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>properties</b></td> + <td>object</td> + <td> + (Optional) Patcher specific additional arguments.<br/> + <br/> + <i>Default</i>: map[]<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>resource</b></td> + <td>string</td> + <td> + Specifies the Kubernetes resource to be patched.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr><tr> + <td><b>type</b></td> + <td>string</td> + <td> + Type of the Patcher.<br/> + <br/> + <i>Default</i>: <br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### execution.spec.execution +<sup><sup>[↩ Parent](#executionspec)</sup></sup> + + + +Defines the overall parameter for the execution. + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>loadGenerationDelay</b></td> + <td>integer</td> + <td> + Seconds to wait between the start of the SUT and the load generator.<br/> + </td> + <td>false</td> + </tr><tr> + <td><b>duration</b></td> + <td>integer</td> + <td> + Defines the duration of each experiment in seconds.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>repetitions</b></td> + <td>integer</td> + <td> + Numper of repititions for each experiments.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>restrictions</b></td> + <td>[]string</td> + <td> + List of restriction strategys used to delimit the search space.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>strategy</b></td> + <td>string</td> + <td> + Defines the used strategy for the execution, either 'LinearSearch' or 'BinarySearch'<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### execution.spec.load +<sup><sup>[↩ Parent](#executionspec)</sup></sup> + + + +Specifies the load values that are benchmarked. + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>loadType</b></td> + <td>string</td> + <td> + The type of the load. It must match one of the load types specified in the referenced benchmark.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>loadValues</b></td> + <td>[]integer</td> + <td> + List of load values for the specified load type.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### execution.spec.resources +<sup><sup>[↩ Parent](#executionspec)</sup></sup> + + + +Specifies the scaling resource that is benchmarked. + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>resourceType</b></td> + <td>string</td> + <td> + The type of the resource. It must match one of the resource types specified in the referenced benchmark.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>resourceValues</b></td> + <td>[]integer</td> + <td> + <br/> + </td> + <td>true</td> + </tr></tbody> +</table> + + +### execution.spec.slos[index] +<sup><sup>[↩ Parent](#executionspec)</sup></sup> + + + + + +<table> + <thead> + <tr> + <th>Name</th> + <th>Type</th> + <th>Description</th> + <th>Required</th> + </tr> + </thead> + <tbody><tr> + <td><b>externalSloUrl</b></td> + <td>string</td> + <td> + Connection string for a external slo analysis.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>offset</b></td> + <td>integer</td> + <td> + Hours by which the start and end timestamp will be shifted (for different timezones).<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>prometheusUrl</b></td> + <td>string</td> + <td> + Connection string for Promehteus.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>sloType</b></td> + <td>string</td> + <td> + The type of the SLO. It must match 'lag trend'.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>threshold</b></td> + <td>integer</td> + <td> + The threshold the SUT should meet for a sucessful experiment.<br/> + </td> + <td>true</td> + </tr><tr> + <td><b>warmup</b></td> + <td>integer</td> + <td> + Seconds of time that are ignored in the analysis.<br/> + </td> + <td>true</td> + </tr></tbody> +</table> \ No newline at end of file diff --git a/helm/benchmark-definitions b/helm/benchmark-definitions new file mode 120000 index 0000000000000000000000000000000000000000..e25d86a1f35f9815225c23d78b8524f9df81f9b5 --- /dev/null +++ b/helm/benchmark-definitions @@ -0,0 +1 @@ +../theodolite-benchmarks/definitions/ \ No newline at end of file diff --git a/helm/templates/theodolite/benchmark-resources-config-map.yaml b/helm/templates/theodolite/benchmark-resources-config-map.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4ec1c1bd9c3b9c05cb77920c20b9b573d413c94a --- /dev/null +++ b/helm/templates/theodolite/benchmark-resources-config-map.yaml @@ -0,0 +1,19 @@ +{{- $processedDict := dict -}} +{{- range $path, $bytes := .Files.Glob "benchmark-definitions/**/resources/**" }} +{{- $name := base (dir (dir $path)) }} +{{- if not (hasKey $processedDict $name) -}} +{{ $_ := set $processedDict $name "true" }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: benchmark-resources-{{ $name }} +data: +{{ ($.Files.Glob (printf "benchmark-definitions/%s/resources/*" $name)).AsConfig | indent 2 }} +--- +{{- end }} +{{- end }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: benchmark-resources-custom +data: {} diff --git a/helm/templates/theodolite/random-scheduler/cluster-role-binding.yaml b/helm/templates/theodolite/random-scheduler/cluster-role-binding.yaml index 658f75c8c5018fe5b9f47cf9619bb4ee5b26b8e5..605159e1b941730d9baddac679c3c1b91e8a88b6 100644 --- a/helm/templates/theodolite/random-scheduler/cluster-role-binding.yaml +++ b/helm/templates/theodolite/random-scheduler/cluster-role-binding.yaml @@ -1,4 +1,4 @@ -{{- if .Values.randomScheduler.rbac.create -}} +{{- if and .Values.randomScheduler.enabled .Values.randomScheduler.rbac.create -}} apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: diff --git a/helm/templates/theodolite/random-scheduler/service-account.yaml b/helm/templates/theodolite/random-scheduler/service-account.yaml index babfff17b46d62e7e820fcb9dc8a35d73b4e6538..593d9589de53b0c3ad9f826ea560c77acaf54a25 100644 --- a/helm/templates/theodolite/random-scheduler/service-account.yaml +++ b/helm/templates/theodolite/random-scheduler/service-account.yaml @@ -1,4 +1,4 @@ -{{- if .Values.randomScheduler.serviceAccount.create -}} +{{- if and .Values.randomScheduler.enabled .Values.randomScheduler.serviceAccount.create -}} apiVersion: v1 kind: ServiceAccount metadata: diff --git a/helm/templates/theodolite/theodolite-operator.yaml b/helm/templates/theodolite/theodolite-operator.yaml index 7e9194fb47956e9dfa447a5bf7f820f34bbd50d4..3487b9a4fabb16897b302d8be65f065a647ffb16 100644 --- a/helm/templates/theodolite/theodolite-operator.yaml +++ b/helm/templates/theodolite/theodolite-operator.yaml @@ -29,14 +29,30 @@ spec: - name: THEODOLITE_APP_RESOURCES value: "./benchmark-resources" - name: RESULTS_FOLDER - value: "results" + value: "./results" volumeMounts: {{- if .Values.operator.resultsVolume.enabled }} - name: theodolite-pv-storage mountPath: "/deployments/results" {{- end }} - - name: benchmark-resources - mountPath: /work/benchmark-resources + - name: benchmark-resources-uc1-kstreams + mountPath: /deployments/benchmark-resources/uc1-kstreams + - name: benchmark-resources-uc2-kstreams + mountPath: /deployments/benchmark-resources/uc2-kstreams + - name: benchmark-resources-uc3-kstreams + mountPath: /deployments/benchmark-resources/uc3-kstreams + - name: benchmark-resources-uc4-kstreams + mountPath: /deployments/benchmark-resources/uc4-kstreams + - name: benchmark-resources-uc1-flink + mountPath: /deployments/benchmark-resources/uc1-flink + - name: benchmark-resources-uc2-flink + mountPath: /deployments/benchmark-resources/uc2-flink + - name: benchmark-resources-uc3-flink + mountPath: /deployments/benchmark-resources/uc3-flink + - name: benchmark-resources-uc4-flink + mountPath: /deployments/benchmark-resources/uc4-flink + - name: benchmark-resources-custom + mountPath: /deployments/benchmark-resources/custom {{- if .Values.operator.sloChecker.lagTrend.enabled }} - name: lag-trend-slo-checker image: "{{ .Values.operator.sloChecker.lagTrend.image }}:{{ .Values.operator.sloChecker.lagTrend.imageTag }}" @@ -67,8 +83,40 @@ spec: persistentVolumeClaim: claimName: {{ .Values.operator.resultsVolume.persistentVolumeClaim.name | quote }} {{- end }} - - name: benchmark-resources + - name: benchmark-resources-uc1-kstreams configMap: - name: benchmark-resources + name: benchmark-resources-uc1-kstreams + optional: true + - name: benchmark-resources-uc2-kstreams + configMap: + name: benchmark-resources-uc2-kstreams + optional: true + - name: benchmark-resources-uc3-kstreams + configMap: + name: benchmark-resources-uc3-kstreams + optional: true + - name: benchmark-resources-uc4-kstreams + configMap: + name: benchmark-resources-uc4-kstreams + optional: true + - name: benchmark-resources-uc1-flink + configMap: + name: benchmark-resources-uc1-flink + optional: true + - name: benchmark-resources-uc2-flink + configMap: + name: benchmark-resources-uc2-flink + optional: true + - name: benchmark-resources-uc3-flink + configMap: + name: benchmark-resources-uc3-flink + optional: true + - name: benchmark-resources-uc4-flink + configMap: + name: benchmark-resources-uc4-flink + optional: true + - name: benchmark-resources-custom + configMap: + name: benchmark-resources-custom optional: true {{- end }} diff --git a/theodolite-benchmarks/definitions/install-configmaps.sh b/theodolite-benchmarks/definitions/install-configmaps.sh new file mode 100755 index 0000000000000000000000000000000000000000..7ddd606a162185993ce402ef4d3b84d8d00eb82c --- /dev/null +++ b/theodolite-benchmarks/definitions/install-configmaps.sh @@ -0,0 +1,8 @@ +kubectl create configmap benchmark-resources-uc1-flink --from-file uc1-flink/resources +kubectl create configmap benchmark-resources-uc2-flink --from-file uc2-flink/resources +kubectl create configmap benchmark-resources-uc3-flink --from-file uc3-flink/resources +kubectl create configmap benchmark-resources-uc4-flink --from-file uc4-flink/resources +kubectl create configmap benchmark-resources-uc1-kstreams --from-file uc1-kstreams/resources +kubectl create configmap benchmark-resources-uc2-kstreams --from-file uc2-kstreams/resources +kubectl create configmap benchmark-resources-uc3-kstreams --from-file uc3-kstreams/resources +kubectl create configmap benchmark-resources-uc4-kstreams --from-file uc4-kstreams/resources \ No newline at end of file diff --git a/theodolite-benchmarks/definitions/uc1-flink/flink-configuration-configmap.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/flink-configuration-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/flink-configuration-configmap.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/flink-configuration-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/jobmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/jobmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/jobmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/jobmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/jobmanager-rest-service.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/jobmanager-rest-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/jobmanager-rest-service.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/jobmanager-rest-service.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/jobmanager-service.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/jobmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/jobmanager-service.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/jobmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/service-monitor.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/service-monitor.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/taskmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/taskmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/taskmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/taskmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/taskmanager-service.yaml b/theodolite-benchmarks/definitions/uc1-flink/resources/taskmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-flink/taskmanager-service.yaml rename to theodolite-benchmarks/definitions/uc1-flink/resources/taskmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc1-flink/uc1-flink-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc1-flink/uc1-flink-benchmark-operator.yaml new file mode 100644 index 0000000000000000000000000000000000000000..30e2d6bcae0156d08aa71c428934f420b4085e38 --- /dev/null +++ b/theodolite-benchmarks/definitions/uc1-flink/uc1-flink-benchmark-operator.yaml @@ -0,0 +1,47 @@ +apiVersion: theodolite.com/v1 +kind: benchmark +metadata: + name: uc1-flink +spec: + appResource: + - "uc1-flink/flink-configuration-configmap.yaml" + - "uc1-flink/taskmanager-deployment.yaml" + - "uc1-flink/taskmanager-service.yaml" + - "uc1-flink/service-monitor.yaml" + - "uc1-flink/jobmanager-service.yaml" + - "uc1-flink/jobmanager-deployment.yaml" + #- "uc1-flink/jobmanager-rest-service.yaml" + loadGenResource: + - "uc1-kstreams/uc1-load-generator-deployment.yaml" + - "uc1-kstreams/uc1-load-generator-service.yaml" + resourceTypes: + - typeName: "Instances" + patchers: + - type: "ReplicaPatcher" + resource: "uc1-flink/taskmanager-deployment.yaml" + - type: "EnvVarPatcher" + resource: "uc1-flink/jobmanager-deployment.yaml" + properties: + container: "jobmanager" + variableName: "PARALLELISM" + - type: "EnvVarPatcher" # required? + resource: "uc1-flink/taskmanager-deployment.yaml" + properties: + container: "taskmanager" + variableName: "PARALLELISM" + loadTypes: + - typeName: "NumSensors" + patchers: + - type: "EnvVarPatcher" + resource: "uc1-kstreams/uc1-load-generator-deployment.yaml" + properties: + container: "workload-generator" + variableName: "NUM_SENSORS" + - type: NumSensorsLoadGeneratorReplicaPatcher + resource: "uc1-kstreams/uc1-load-generator-deployment.yaml" + kafkaConfig: + bootstrapServer: "theodolite-cp-kafka:9092" + topics: + - name: "input" + numPartitions: 40 + replicationFactor: 1 \ No newline at end of file diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-jmx-configmap.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-jmx-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-kstreams/uc1-jmx-configmap.yaml rename to theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-jmx-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-kstreams-deployment.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-kstreams-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-kstreams/uc1-kstreams-deployment.yaml rename to theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-kstreams-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-kstreams-service.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-kstreams-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-kstreams/uc1-kstreams-service.yaml rename to theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-kstreams-service.yaml diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-load-generator-deployment.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-load-generator-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-kstreams/uc1-load-generator-deployment.yaml rename to theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-load-generator-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-load-generator-service.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-load-generator-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-kstreams/uc1-load-generator-service.yaml rename to theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-load-generator-service.yaml diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-service-monitor.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc1-kstreams/uc1-service-monitor.yaml rename to theodolite-benchmarks/definitions/uc1-kstreams/resources/uc1-service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc1-kstreams/uc1-benchmark-operator.yaml index b80b572dfd30e9c056d3c01ba17cc662d70fc749..4ec3b08d8f20b6b4e4f108b43c9375179b7aee81 100644 --- a/theodolite-benchmarks/definitions/uc1-kstreams/uc1-benchmark-operator.yaml +++ b/theodolite-benchmarks/definitions/uc1-kstreams/uc1-benchmark-operator.yaml @@ -4,28 +4,28 @@ metadata: name: uc1-kstreams spec: appResource: - - "uc1-kstreams-deployment.yaml" - - "uc1-kstreams-service.yaml" - - "uc1-jmx-configmap.yaml" - - "uc1-service-monitor.yaml" + - "uc1-kstreams/uc1-kstreams-deployment.yaml" + - "uc1-kstreams/uc1-kstreams-service.yaml" + - "uc1-kstreams/uc1-jmx-configmap.yaml" + - "uc1-kstreams/uc1-service-monitor.yaml" loadGenResource: - - "uc1-load-generator-deployment.yaml" - - "uc1-load-generator-service.yaml" + - "uc1-kstreams/uc1-load-generator-deployment.yaml" + - "uc1-kstreams/uc1-load-generator-service.yaml" resourceTypes: - typeName: "Instances" patchers: - type: "ReplicaPatcher" - resource: "uc1-kstreams-deployment.yaml" + resource: "uc1-kstreams/uc1-kstreams-deployment.yaml" loadTypes: - typeName: "NumSensors" patchers: - type: "EnvVarPatcher" - resource: "uc1-load-generator-deployment.yaml" + resource: "uc1-kstreams/uc1-load-generator-deployment.yaml" properties: container: "workload-generator" variableName: "NUM_SENSORS" - type: "NumSensorsLoadGeneratorReplicaPatcher" - resource: "uc1-load-generator-deployment.yaml" + resource: "uc1-kstreams/uc1-load-generator-deployment.yaml" properties: loadGenMaxRecords: "15000" kafkaConfig: @@ -34,5 +34,3 @@ spec: - name: "input" numPartitions: 40 replicationFactor: 1 - - name: "theodolite-.*" - removeOnly: True diff --git a/theodolite-benchmarks/definitions/uc2-flink/flink-configuration-configmap.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/flink-configuration-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/flink-configuration-configmap.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/flink-configuration-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/jobmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/jobmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/jobmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/jobmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/jobmanager-rest-service.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/jobmanager-rest-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/jobmanager-rest-service.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/jobmanager-rest-service.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/jobmanager-service.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/jobmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/jobmanager-service.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/jobmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/service-monitor.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/service-monitor.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/taskmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/taskmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/taskmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/taskmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/taskmanager-service.yaml b/theodolite-benchmarks/definitions/uc2-flink/resources/taskmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-flink/taskmanager-service.yaml rename to theodolite-benchmarks/definitions/uc2-flink/resources/taskmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc2-flink/uc2-flink-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc2-flink/uc2-flink-benchmark-operator.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4bc67808c5f4ba391650a2f9884444c2dca20cc6 --- /dev/null +++ b/theodolite-benchmarks/definitions/uc2-flink/uc2-flink-benchmark-operator.yaml @@ -0,0 +1,52 @@ +apiVersion: theodolite.com/v1 +kind: benchmark +metadata: + name: uc2-flink +spec: + appResource: + - "uc2-flink/flink-configuration-configmap.yaml" + - "uc2-flink/taskmanager-deployment.yaml" + - "uc2-flink/taskmanager-service.yaml" + - "uc2-flink/service-monitor.yaml" + - "uc2-flink/jobmanager-service.yaml" + - "uc2-flink/jobmanager-deployment.yaml" + #- "uc2-flink/jobmanager-rest-service.yaml" + loadGenResource: + - "uc2-kstreams/uc2-load-generator-deployment.yaml" + - "uc2-kstreams/uc2-load-generator-service.yaml" + resourceTypes: + - typeName: "Instances" + patchers: + - type: "ReplicaPatcher" + resource: "uc2-flink/taskmanager-deployment.yaml" + - type: "EnvVarPatcher" + resource: "uc2-flink/jobmanager-deployment.yaml" + properties: + container: "jobmanager" + variableName: "PARALLELISM" + - type: "EnvVarPatcher" # required? + resource: "uc2-flink/taskmanager-deployment.yaml" + properties: + container: "taskmanager" + variableName: "PARALLELISM" + loadTypes: + - typeName: "NumSensors" + patchers: + - type: "EnvVarPatcher" + resource: "uc2-kstreams/uc2-load-generator-deployment.yaml" + properties: + container: "workload-generator" + variableName: "NUM_SENSORS" + - type: NumSensorsLoadGeneratorReplicaPatcher + resource: "uc2-kstreams/uc2-load-generator-deployment.yaml" + kafkaConfig: + bootstrapServer: "theodolite-cp-kafka:9092" + topics: + - name: "input" + numPartitions: 40 + replicationFactor: 1 + - name: "output" + numPartitions: 40 + replicationFactor: 1 + - name: "theodolite-.*" + removeOnly: True diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-jmx-configmap.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-jmx-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-kstreams/uc2-jmx-configmap.yaml rename to theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-jmx-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-kstreams-deployment.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-kstreams-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-kstreams/uc2-kstreams-deployment.yaml rename to theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-kstreams-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-kstreams-service.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-kstreams-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-kstreams/uc2-kstreams-service.yaml rename to theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-kstreams-service.yaml diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-load-generator-deployment.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-load-generator-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-kstreams/uc2-load-generator-deployment.yaml rename to theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-load-generator-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-load-generator-service.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-load-generator-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-kstreams/uc2-load-generator-service.yaml rename to theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-load-generator-service.yaml diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-service-monitor.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc2-kstreams/uc2-service-monitor.yaml rename to theodolite-benchmarks/definitions/uc2-kstreams/resources/uc2-service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc2-kstreams/uc2-benchmark-operator.yaml index b65bbdedb055c206c1ebcd7ab6a450318ee8c00f..aa25c53d793fd319ba16e15f8e8a152f177e799e 100644 --- a/theodolite-benchmarks/definitions/uc2-kstreams/uc2-benchmark-operator.yaml +++ b/theodolite-benchmarks/definitions/uc2-kstreams/uc2-benchmark-operator.yaml @@ -1,31 +1,31 @@ apiVersion: theodolite.com/v1 kind: benchmark +metadata: + name: uc2-kstreams spec: - metadata: - name: uc2-kstreams appResource: - - "uc2-kstreams-deployment.yaml" - - "uc2-kstreams-service.yaml" - - "uc2-jmx-configmap.yaml" - - "uc2-service-monitor.yaml" + - "uc2-kstreams/uc2-kstreams-deployment.yaml" + - "uc2-kstreams/uc2-kstreams-service.yaml" + - "uc2-kstreams/uc2-jmx-configmap.yaml" + - "uc2-kstreams/uc2-service-monitor.yaml" loadGenResource: - - "uc2-load-generator-deployment.yaml" - - "uc2-load-generator-service.yaml" + - "uc2-kstreams/uc2-load-generator-deployment.yaml" + - "uc2-kstreams/uc2-load-generator-service.yaml" resourceTypes: - typeName: "Instances" patchers: - type: "ReplicaPatcher" - resource: "uc2-kstreams-deployment.yaml" + resource: "uc2-kstreams/uc2-kstreams-deployment.yaml" loadTypes: - typeName: "NumSensors" patchers: - type: "EnvVarPatcher" - resource: "uc2-load-generator-deployment.yaml" + resource: "uc2-kstreams/uc2-load-generator-deployment.yaml" properties: container: "workload-generator" variableName: "NUM_SENSORS" - type: NumSensorsLoadGeneratorReplicaPatcher - resource: "uc2-load-generator-deployment.yaml" + resource: "uc2-kstreams/uc2-load-generator-deployment.yaml" properties: loadGenMaxRecords: "15000" kafkaConfig: diff --git a/theodolite-benchmarks/definitions/uc3-flink/flink-configuration-configmap.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/flink-configuration-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/flink-configuration-configmap.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/flink-configuration-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/jobmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/jobmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/jobmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/jobmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/jobmanager-rest-service.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/jobmanager-rest-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/jobmanager-rest-service.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/jobmanager-rest-service.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/jobmanager-service.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/jobmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/jobmanager-service.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/jobmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/service-monitor.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/service-monitor.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/taskmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/taskmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/taskmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/taskmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/taskmanager-service.yaml b/theodolite-benchmarks/definitions/uc3-flink/resources/taskmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-flink/taskmanager-service.yaml rename to theodolite-benchmarks/definitions/uc3-flink/resources/taskmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc3-flink/uc3-flink-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc3-flink/uc3-flink-benchmark-operator.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f7a05c1371089126d5e39b91f48ac9df42ef05e1 --- /dev/null +++ b/theodolite-benchmarks/definitions/uc3-flink/uc3-flink-benchmark-operator.yaml @@ -0,0 +1,52 @@ +apiVersion: theodolite.com/v1 +kind: benchmark +metadata: + name: uc3-flink +spec: + appResource: + - "uc3-flink/flink-configuration-configmap.yaml" + - "uc3-flink/taskmanager-deployment.yaml" + - "uc3-flink/taskmanager-service.yaml" + - "uc3-flink/service-monitor.yaml" + - "uc3-flink/jobmanager-service.yaml" + - "uc3-flink/jobmanager-deployment.yaml" + #- "uc3-flink/jobmanager-rest-service.yaml" + loadGenResource: + - "uc3-kstreams/uc3-load-generator-deployment.yaml" + - "uc3-kstreams/uc3-load-generator-service.yaml" + resourceTypes: + - typeName: "Instances" + patchers: + - type: "ReplicaPatcher" + resource: "uc3-flink/taskmanager-deployment.yaml" + - type: "EnvVarPatcher" + resource: "uc3-flink/jobmanager-deployment.yaml" + properties: + container: "jobmanager" + variableName: "PARALLELISM" + - type: "EnvVarPatcher" # required? + resource: "uc3-flink/taskmanager-deployment.yaml" + properties: + container: "taskmanager" + variableName: "PARALLELISM" + loadTypes: + - typeName: "NumSensors" + patchers: + - type: "EnvVarPatcher" + resource: "uc3-kstreams/uc3-load-generator-deployment.yaml" + properties: + container: "workload-generator" + variableName: "NUM_SENSORS" + - type: NumSensorsLoadGeneratorReplicaPatcher + resource: "uc3-kstreams/uc3-load-generator-deployment.yaml" + kafkaConfig: + bootstrapServer: "theodolite-cp-kafka:9092" + topics: + - name: "input" + numPartitions: 40 + replicationFactor: 1 + - name: "output" + numPartitions: 40 + replicationFactor: 1 + - name: "theodolite-.*" + removeOnly: True diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-jmx-configmap.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-jmx-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-kstreams/uc3-jmx-configmap.yaml rename to theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-jmx-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-kstreams-deployment.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-kstreams-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-kstreams/uc3-kstreams-deployment.yaml rename to theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-kstreams-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-kstreams-service.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-kstreams-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-kstreams/uc3-kstreams-service.yaml rename to theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-kstreams-service.yaml diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-load-generator-deployment.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-load-generator-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-kstreams/uc3-load-generator-deployment.yaml rename to theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-load-generator-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-load-generator-service.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-load-generator-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-kstreams/uc3-load-generator-service.yaml rename to theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-load-generator-service.yaml diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-service-monitor.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc3-kstreams/uc3-service-monitor.yaml rename to theodolite-benchmarks/definitions/uc3-kstreams/resources/uc3-service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc3-kstreams/uc3-benchmark-operator.yaml index bfbd7191c5f4a315db29100bcc05341f88cffec2..e2679ed864d4b8673bf0d44a96683ccb86f44090 100644 --- a/theodolite-benchmarks/definitions/uc3-kstreams/uc3-benchmark-operator.yaml +++ b/theodolite-benchmarks/definitions/uc3-kstreams/uc3-benchmark-operator.yaml @@ -1,31 +1,31 @@ apiVersion: theodolite.com/v1 kind: benchmark +metadata: + name: uc3-kstreams spec: - metadata: - name: uc3-kstreams appResource: - - "uc3-kstreams-deployment.yaml" - - "uc3-kstreams-service.yaml" - - "uc3-jmx-configmap.yaml" - - "uc3-service-monitor.yaml" + - "uc3-kstreams/uc3-kstreams-deployment.yaml" + - "uc3-kstreams/uc3-kstreams-service.yaml" + - "uc3-kstreams/uc3-jmx-configmap.yaml" + - "uc3-kstreams/uc3-service-monitor.yaml" loadGenResource: - - "uc3-load-generator-deployment.yaml" - - "uc3-load-generator-service.yaml" + - "uc3-kstreams/uc3-load-generator-deployment.yaml" + - "uc3-kstreams/uc3-load-generator-service.yaml" resourceTypes: - typeName: "Instances" patchers: - type: "ReplicaPatcher" - resource: "uc3-kstreams-deployment.yaml" + resource: "uc3-kstreams/uc3-kstreams-deployment.yaml" loadTypes: - typeName: "NumSensors" patchers: - type: "EnvVarPatcher" - resource: "uc3-load-generator-deployment.yaml" + resource: "uc3-kstreams/uc3-load-generator-deployment.yaml" properties: container: "workload-generator" variableName: "NUM_SENSORS" - type: NumSensorsLoadGeneratorReplicaPatcher - resource: "uc3-load-generator-deployment.yaml" + resource: "uc3-kstreams/uc3-load-generator-deployment.yaml" properties: loadGenMaxRecords: "15000" kafkaConfig: diff --git a/theodolite-benchmarks/definitions/uc4-flink/flink-configuration-configmap.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/flink-configuration-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/flink-configuration-configmap.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/flink-configuration-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/jobmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/jobmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/jobmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/jobmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/jobmanager-rest-service.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/jobmanager-rest-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/jobmanager-rest-service.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/jobmanager-rest-service.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/jobmanager-service.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/jobmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/jobmanager-service.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/jobmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/service-monitor.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/service-monitor.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/taskmanager-deployment.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/taskmanager-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/taskmanager-deployment.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/taskmanager-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/taskmanager-service.yaml b/theodolite-benchmarks/definitions/uc4-flink/resources/taskmanager-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-flink/taskmanager-service.yaml rename to theodolite-benchmarks/definitions/uc4-flink/resources/taskmanager-service.yaml diff --git a/theodolite-benchmarks/definitions/uc4-flink/uc4-flink-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc4-flink/uc4-flink-benchmark-operator.yaml new file mode 100644 index 0000000000000000000000000000000000000000..523167286f04e3ec0a66a43eabda618908ae3f11 --- /dev/null +++ b/theodolite-benchmarks/definitions/uc4-flink/uc4-flink-benchmark-operator.yaml @@ -0,0 +1,58 @@ +apiVersion: theodolite.com/v1 +kind: benchmark +metadata: + name: uc4-flink +spec: + appResource: + - "uc4-flink/flink-configuration-configmap.yaml" + - "uc4-flink/taskmanager-deployment.yaml" + - "uc4-flink/taskmanager-service.yaml" + - "uc4-flink/service-monitor.yaml" + - "uc4-flink/jobmanager-service.yaml" + - "uc4-flink/jobmanager-deployment.yaml" + #- "uc4-flink/jobmanager-rest-service.yaml" + loadGenResource: + - "uc4-kstreams/uc4-load-generator-deployment.yaml" + - "uc4-kstreams/uc4-load-generator-service.yaml" + resourceTypes: + - typeName: "Instances" + patchers: + - type: "ReplicaPatcher" + resource: "uc4-flink/taskmanager-deployment.yaml" + - type: "EnvVarPatcher" + resource: "uc4-flink/jobmanager-deployment.yaml" + properties: + container: "jobmanager" + variableName: "PARALLELISM" + - type: "EnvVarPatcher" # required? + resource: "uc4-flink/taskmanager-deployment.yaml" + properties: + container: "taskmanager" + variableName: "PARALLELISM" + loadTypes: + - typeName: "NumNestedGroups" + patchers: + - type: "EnvVarPatcher" + resource: "uc4-kstreams/uc4-load-generator-deployment.yaml" + properties: + container: "workload-generator" + variableName: "NUM_NESTED_GROUPS" + - type: "NumNestedGroupsLoadGeneratorReplicaPatcher" + resource: "uc4-kstreams/uc4-load-generator-deployment.yaml" + kafkaConfig: + bootstrapServer: "theodolite-cp-kafka:9092" + topics: + - name: "input" + numPartitions: 40 + replicationFactor: 1 + - name: "output" + numPartitions: 40 + replicationFactor: 1 + - name: "configuration" + numPartitions: 40 + replicationFactor: 1 + - name: "aggregation-feedback" + numPartitions: 40 + replicationFactor: 1 + - name: "theodolite-.*" + removeOnly: True diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-jmx-configmap.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-jmx-configmap.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-kstreams/uc4-jmx-configmap.yaml rename to theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-jmx-configmap.yaml diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-kstreams-deployment.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-kstreams-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-kstreams/uc4-kstreams-deployment.yaml rename to theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-kstreams-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-kstreams-service.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-kstreams-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-kstreams/uc4-kstreams-service.yaml rename to theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-kstreams-service.yaml diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-load-generator-deployment.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-load-generator-deployment.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-kstreams/uc4-load-generator-deployment.yaml rename to theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-load-generator-deployment.yaml diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-load-generator-service.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-load-generator-service.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-kstreams/uc4-load-generator-service.yaml rename to theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-load-generator-service.yaml diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-service-monitor.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-service-monitor.yaml similarity index 100% rename from theodolite-benchmarks/definitions/uc4-kstreams/uc4-service-monitor.yaml rename to theodolite-benchmarks/definitions/uc4-kstreams/resources/uc4-service-monitor.yaml diff --git a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-benchmark-operator.yaml b/theodolite-benchmarks/definitions/uc4-kstreams/uc4-benchmark-operator.yaml index 0ed48c9afd0d8d02493f7afc2df3e440d0ffabdd..3e10fd1aebf071e854cb31501030a50c11eab01d 100644 --- a/theodolite-benchmarks/definitions/uc4-kstreams/uc4-benchmark-operator.yaml +++ b/theodolite-benchmarks/definitions/uc4-kstreams/uc4-benchmark-operator.yaml @@ -1,31 +1,31 @@ apiVersion: theodolite.com/v1 kind: benchmark +metadata: + name: uc4-kstreams spec: - metadata: - name: uc4-kstreams appResource: - - "uc4-kstreams-deployment.yaml" - - "uc4-kstreams-service.yaml" - - "uc4-jmx-configmap.yaml" - - "uc4-service-monitor.yaml" + - "uc4-kstreams/uc4-kstreams-deployment.yaml" + - "uc4-kstreams/uc4-kstreams-service.yaml" + - "uc4-kstreams/uc4-jmx-configmap.yaml" + - "uc4-kstreams/uc4-service-monitor.yaml" loadGenResource: - - "uc4-load-generator-deployment.yaml" - - "uc4-load-generator-service.yaml" + - "uc4-kstreams/uc4-load-generator-deployment.yaml" + - "uc4-kstreams/uc4-load-generator-service.yaml" resourceTypes: - typeName: "Instances" patchers: - type: "ReplicaPatcher" - resource: "uc4-kstreams-deployment.yaml" + resource: "uc4-kstreams/uc4-kstreams-deployment.yaml" loadTypes: - typeName: "NumNestedGroups" patchers: - type: "EnvVarPatcher" - resource: "uc4-load-generator-deployment.yaml" + resource: "uc4-kstreams/uc4-load-generator-deployment.yaml" properties: container: "workload-generator" variableName: "NUM_SENSORS" - type: NumNestedGroupsLoadGeneratorReplicaPatcher - resource: "uc4-load-generator-deployment.yaml" + resource: "uc4-kstreams/uc4-load-generator-deployment.yaml" properties: loadGenMaxRecords: "15000" numSensors: "4.0" diff --git a/theodolite/config/example-execution-yaml-resource.yaml b/theodolite/config/example-execution-yaml-resource.yaml deleted file mode 100644 index e46a6cf417442b851650fe9699f73e1367dcc794..0000000000000000000000000000000000000000 --- a/theodolite/config/example-execution-yaml-resource.yaml +++ /dev/null @@ -1,53 +0,0 @@ -name: example-execution -benchmark: "uc1-kstreams" -load: - loadType: "NumSensors" - loadValues: [25000, 50000, 75000, 100000, 125000, 150000] -resources: - resourceType: "Instances" - resourceValues: [1, 2, 3, 4, 5] -slos: - - sloType: "lag trend" - threshold: 2000 - prometheusUrl: "http://prometheus-operated:9090" - externalSloUrl: "http://localhost:80/evaluate-slope" - offset: 0 - warmup: 60 # in seconds -execution: - strategy: "LinearSearch" - duration: 300 # in seconds - repetitions: 1 - loadGenerationDelay: 30 # in seconds, optional field, default is 0 seconds - restrictions: - - "LowerBound" -configOverrides: - - patcher: - type: "NodeSelectorPatcher" - resource: "uc1-load-generator-deployment.yaml" - properties: - variableName: "env" - value: "prod" - - patcher: - type: "NodeSelectorPatcher" - resource: "uc1-kstreams-deployment.yaml" - properties: - variableName: "env" - value: "prod" - - patcher: - type: "ResourceLimitPatcher" - resource: "uc1-kstreams-deployment.yaml" - properties: - container: "uc-application" - limitedResource: "cpu" - value: "1000m" - - patcher: - type: "ResourceLimitPatcher" - resource: "uc1-kstreams-deployment.yaml" - properties: - container: "uc-application" - limitedResource: "memory" - value: "2Gi" -# - patcher: -# type: "SchedulerNamePatcher" -# resource: "uc1-kstreams-deployment.yaml" -# value: "random-scheduler" diff --git a/theodolite/config/example-operator-execution.yaml b/theodolite/config/example-operator-execution.yaml deleted file mode 100644 index 9b2a1facbd8be3411407dfcf3cad39fd9f3de6b6..0000000000000000000000000000000000000000 --- a/theodolite/config/example-operator-execution.yaml +++ /dev/null @@ -1,57 +0,0 @@ -apiVersion: theodolite.com/v1 -kind: execution -metadata: - name: example-execution -spec: - benchmark: "uc1-kstreams" - load: - loadType: "NumSensors" - loadValues: [25000, 50000, 75000, 100000, 125000, 150000] - resources: - resourceType: "Instances" - resourceValues: [1, 2, 3, 4, 5] - slos: - - sloType: "lag trend" - threshold: 2000 - prometheusUrl: "http://prometheus-operated:9090" - externalSloUrl: "http://localhost:80/evaluate-slope" - offset: 0 - warmup: 60 # in seconds - execution: - strategy: "LinearSearch" - duration: 300 # in seconds - repetitions: 1 - loadGenerationDelay: 30 # in seconds - restrictions: - - "LowerBound" - configOverrides: - # - patcher: - # type: "NodeSelectorPatcher" - # resource: "uc1-load-generator-deployment.yaml" - # properties: - # variableName: "env" - # value: "prod" - # - patcher: - # type: "NodeSelectorPatcher" - # resource: "uc1-kstreams-deployment.yaml" - # properties: - # variableName: "env" - # value: "prod" - # - patcher: - # type: "ResourceLimitPatcher" - # resource: "uc1-kstreams-deployment.yaml" - # properties: - # container: "uc-application" - # limitedResource: "cpu" - # value: "1000m" - # - patcher: - # type: "ResourceLimitPatcher" - # resource: "uc1-kstreams-deployment.yaml" - # properties: - # container: "uc-application" - # limitedResource: "memory" - # value: "2Gi" - # - patcher: - # type: "SchedulerNamePatcher" - # resource: "uc1-kstreams-deployment.yaml" - # value: "random-scheduler" diff --git a/theodolite/crd/crd-benchmark.yaml b/theodolite/crd/crd-benchmark.yaml index 0457e041d7874912ac7d19edb9b372d4580228a5..9de29fc031e26b9e4e16517492740b0805fd4af9 100644 --- a/theodolite/crd/crd-benchmark.yaml +++ b/theodolite/crd/crd-benchmark.yaml @@ -23,89 +23,117 @@ spec: required: ["appResource", "loadGenResource", "resourceTypes", "loadTypes", "kafkaConfig"] properties: name: + description: This field exists only for technical reasons and should not be set by the user. The value of the field will be overwritten. type: string appResource: + description: A list of file names that reference Kubernetes resources that are deployed on the cluster for the system under test (SUT). type: array minItems: 1 items: type: string loadGenResource: + description: A list of file names that reference Kubernetes resources that are deployed on the cluster for the load generator. type: array minItems: 1 items: type: string resourceTypes: + description: A list of resource types that can be scaled for this `benchmark` resource. For each resource type the concrete values are defined in the `execution` object. type: array minItems: 1 items: type: object + required: ["typeName", "patchers"] properties: typeName: + description: Name of the resource type. type: string patchers: + description: List of patchers used to scale this resource type. + examples: test test test type: array minItems: 1 items: type: object + required: ["type", "resource"] properties: type: + description: Type of the patcher. type: string default: "" resource: + description: Specifies the Kubernetes resource to be patched. type: string default: "" properties: + description: (Optional) Patcher specific additional arguments. type: object additionalProperties: true x-kubernetes-map-type: "granular" default: {} loadTypes: + description: A list of load types that can be scaled for this benchmark. For each load type the concrete values are defined in the execution object. type: array minItems: 1 items: type: object + required: ["typeName","patchers"] properties: typeName: + description: Name of the load type. type: string patchers: + description: List of patchers used to scale this resource type. type: array minItems: 1 items: type: object + required: ["type", "resource"] properties: type: + description: Type of the Patcher. type: string default: "" resource: + description: Specifies the Kubernetes resource to be patched. type: string default: "" properties: + description: (Optional) Patcher specific additional arguments. type: object additionalProperties: true x-kubernetes-map-type: "granular" default: {} kafkaConfig: + description: Contains the Kafka configuration. type: object + required: ["bootstrapServer", "topics"] properties: bootstrapServer: + description: The bootstrap servers connection string. type: string topics: + description: List of topics to be created for each experiment. Alternative theodolite offers the possibility to remove certain topics after each experiment. type: array minItems: 1 items: type: object - required: [] + required: ["name", "numPartitions", "replicationFactor"] properties: name: + description: The name of the topic. type: string default: "" numPartitions: + description: The number of partitions of the topic. type: integer default: 0 replicationFactor: + description: The replication factor of the topic. type: integer default: 0 removeOnly: + description: Determines if this topic should only be deleted after each experiement. For removeOnly topics the name can be a RegEx describing the topic. type: boolean default: false additionalPrinterColumns: diff --git a/theodolite/crd/crd-execution.yaml b/theodolite/crd/crd-execution.yaml index b984f3ebe5ca7c8868adb9d3593e5d87d73fc2bd..f0588ecf98d40aadc10c1804f32d4bce72d22b03 100644 --- a/theodolite/crd/crd-execution.yaml +++ b/theodolite/crd/crd-execution.yaml @@ -23,79 +23,106 @@ spec: required: ["benchmark", "load", "resources", "slos", "execution", "configOverrides"] properties: name: + description: This field exists only for technical reasons and should not be set by the user. The value of the field will be overwritten. type: string default: "" benchmark: + description: The name of the benchmark this execution is referring to. type: string load: # definition of the load dimension + description: Specifies the load values that are benchmarked. type: object required: ["loadType", "loadValues"] properties: loadType: - type: string + description: The type of the load. It must match one of the load types specified in the referenced benchmark. + type: string loadValues: + description: List of load values for the specified load type. type: array items: type: integer resources: # definition of the resource dimension + description: Specifies the scaling resource that is benchmarked. type: object required: ["resourceType", "resourceValues"] properties: resourceType: + description: The type of the resource. It must match one of the resource types specified in the referenced benchmark. type: string resourceValues: + descriptoin: List of resource values for the specified resource type. type: array items: type: integer slos: # def of service level objectives + description: List of resource values for the specified resource type. type: array items: type: object required: ["sloType", "threshold", "prometheusUrl", "externalSloUrl", "offset", "warmup"] properties: sloType: + description: The type of the SLO. It must match 'lag trend'. type: string threshold: + description: The threshold the SUT should meet for a sucessful experiment. type: integer prometheusUrl: + description: Connection string for Promehteus. type: string externalSloUrl: + description: Connection string for a external slo analysis. type: string offset: + description: Hours by which the start and end timestamp will be shifted (for different timezones). type: integer warmup: + description: Seconds of time that are ignored in the analysis. type: integer execution: # def execution config + description: Defines the overall parameter for the execution. type: object required: ["strategy", "duration", "repetitions", "restrictions"] properties: strategy: + description: Defines the used strategy for the execution, either 'LinearSearch' or 'BinarySearch' type: string duration: + description: Defines the duration of each experiment in seconds. type: integer repetitions: + description: Numper of repititions for each experiments. type: integer loadGenerationDelay: + description: Seconds to wait between the start of the SUT and the load generator. type: integer restrictions: + description: List of restriction strategys used to delimit the search space. type: array items: type: string configOverrides: + description: List of patchers that are used to override existing configurations. type: array items: type: object properties: patcher: + description: Patcher used to patch a resource type: object + required: ["type", "resource"] properties: type: + description: Type of the Patcher. type: string default: "" resource: + description: Specifies the Kubernetes resource to be patched. type: string default: "" properties: + description: (Optional) Patcher specific additional arguments. type: object additionalProperties: true x-kubernetes-map-type: "granular"