diff --git a/manifests/autotune/layers/container-config.json b/manifests/autotune/layers/container-config.json new file mode 100644 index 000000000..67c0dbf7c --- /dev/null +++ b/manifests/autotune/layers/container-config.json @@ -0,0 +1,30 @@ +{ + "apiVersion": "recommender.com/v1", + "kind": "KruizeLayer", + "metadata": { + "name": "container" + }, + "layer_name": "container", + "layer_level": 0, + "details": "generic container tunables", + "layer_presence": { + "presence": "always" + }, + "tunables": [ + { + "name": "memoryRequest", + "value_type": "double", + "lower_bound": "512 Mi", + "upper_bound": "2048 Mi", + "step": 1 + }, + { + "name": "cpuRequest", + "value_type": "double", + "lower_bound": "1.0", + "upper_bound": "3.0", + "step": 0.01 + } + ] +} + diff --git a/manifests/autotune/layers/container-config.yaml b/manifests/autotune/layers/container-config.yaml new file mode 100644 index 000000000..20c7383f8 --- /dev/null +++ b/manifests/autotune/layers/container-config.yaml @@ -0,0 +1,22 @@ +apiVersion: "recommender.com/v1" +kind: "KruizeLayer" +metadata: + name: "container" +layer_name: container +layer_level: 0 +details: generic container tunables +layer_presence: + # This layer is assumed to be available by default for all applications. + presence: always +tunables: +- name: memoryRequest + value_type: double + upper_bound: '2048 Mi' + lower_bound: '512 Mi' + step: 1 + +- name: cpuRequest + value_type: double + upper_bound: '3.0' + lower_bound: '1.0' + step: 0.01 diff --git a/manifests/autotune/layers/hotspot-micrometer-config.json b/manifests/autotune/layers/hotspot-micrometer-config.json new file mode 100644 index 000000000..c0ec60c5e --- /dev/null +++ b/manifests/autotune/layers/hotspot-micrometer-config.json @@ -0,0 +1,67 @@ +{ + "apiVersion": "recommender.com/v1", + "kind": "KruizeLayer", + "metadata": { + "name": "hotspot" + }, + "layer_name": "hotspot", + "layer_level": 1, + "details": "hotspot tunables", + "layer_presence": { + "queries": [ + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\".+Eden.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\".+Tenured.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\".+Old.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"Eden.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"Tenured.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"Old.+\"}", + "key": "pod" + } + ] + }, + "tunables": [ + { + "name": "GCPolicy", + "description": "Garbage collection policy", + "value_type": "categorical", + "choices": [ + "G1GC", + "ParallelGC", + "SerialGC", + "ShenandoahGC", + "ZGC" + ] + }, + { + "name": "MaxRAMPercentage", + "description": "Maximum RAM percentage to allocate", + "value_type": "integer", + "lower_bound": "25", + "upper_bound": "90", + "step": 1 + } + ] +} + diff --git a/manifests/autotune/layers/hotspot-micrometer-config.yaml b/manifests/autotune/layers/hotspot-micrometer-config.yaml new file mode 100644 index 000000000..5256ecad5 --- /dev/null +++ b/manifests/autotune/layers/hotspot-micrometer-config.yaml @@ -0,0 +1,46 @@ +apiVersion: "recommender.com/v1" +kind: "KruizeLayer" +metadata: + name: "hotspot" +layer_name: hotspot +layer_level: 1 +details: hotspot tunables +layer_presence: + queries: + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~".+Eden.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~".+Tenured.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~".+Old.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"Eden.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"Tenured.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"Old.+"}' + key: pod +tunables: +# Enable zGC if Java >=17 +- name: GCPolicy + description: 'Garbage collection policy' + value_type: categorical + choices: + - 'G1GC' + - 'ParallelGC' + - 'SerialGC' + - 'ShenandoahGC' + - 'ZGC' + +- name: MaxRAMPercentage + description: 'Maximum RAM percentage to allocate' + value_type: integer + lower_bound: '25' + upper_bound: '90' + step: 1 + diff --git a/manifests/autotune/layers/layer-config.yaml_template b/manifests/autotune/layers/layer-config.yaml_template new file mode 100644 index 000000000..f6261b19c --- /dev/null +++ b/manifests/autotune/layers/layer-config.yaml_template @@ -0,0 +1,32 @@ +apiVersion: "recommender.com/v1" +kind: "AutotuneConfig" +metadata: + name: "xyz" +layer_name: xyz +# layer_level 0 = container, 1 = runtime (eg: openj9, hotspot, nodejs) +# 2 = framework (eg: quarkus, liberty, springboot), 3 = app +layer_level: 2 +details: xyz tunables +# layer_presence tells autotune how to detect this layer in a pod +layer_presence: + # Uncomment one of the following + # This layer is assumed to be available by default for all applications. + #presence: always + # This layer is present if the following prometheus query returns non null + #queries: + #- datasource: 'prometheus' + # query: jvm_memory_used_bytes{area="heap",id="Tenured Gen",} + # key: pod + # This layer is present if the following pod label is present + #label: + #- name: app.kubernetes.io/layer + # value: quarkus +# This section describes the tunables associated with this layer and is an array +tunables: +- name: quarkus.thread-pool.core-threads + description: 'The core thread pool size. This number of threads will always be kept alive.' + # value_type: currently one of double or integer + value_type: integer + upper_bound: '10' + lower_bound: '1' + step: 1 diff --git a/manifests/autotune/layers/openj9-actuator-config.json b/manifests/autotune/layers/openj9-actuator-config.json new file mode 100644 index 000000000..3c599c3bf --- /dev/null +++ b/manifests/autotune/layers/openj9-actuator-config.json @@ -0,0 +1,62 @@ +{ + "apiVersion": "recommender.com/v1", + "kind": "KruizeLayer", + "metadata": { + "name": "openj9" + }, + "layer_name": "openj9", + "layer_level": 1, + "details": "openj9 tunables", + "layer_presence": { + "queries": [ + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"nursery-.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"tenured-.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"tenured\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"balanced.+\"}", + "key": "pod" + }, + { + "datasource": "prometheus", + "query": "jvm_memory_used_bytes{area=\"heap\",id=~\"JavaHeap\"}", + "key": "pod" + } + ] + }, + "tunables": [ + { + "name": "GCPolicy", + "description": "Garbage collection policy", + "value_type": "categorical", + "choices": [ + "gencon", + "balanced", + "optavgpause", + "optthruput", + "metronome" + ] + }, + { + "name": "MaxRAMPercentage", + "description": "Maximum RAM percentage to allocate", + "value_type": "integer", + "lower_bound": "25", + "upper_bound": "90", + "step": 1 + } + ] +} + diff --git a/manifests/autotune/layers/openj9-actuator-config.yaml b/manifests/autotune/layers/openj9-actuator-config.yaml new file mode 100644 index 000000000..5e03dc579 --- /dev/null +++ b/manifests/autotune/layers/openj9-actuator-config.yaml @@ -0,0 +1,43 @@ +apiVersion: "recommender.com/v1" +kind: "KruizeLayer" +metadata: + name: "openj9" +layer_name: openj9 +layer_level: 1 +details: openj9 tunables +layer_presence: + queries: + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"nursery-.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"tenured-.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"tenured"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"balanced.+"}' + key: pod + - datasource: 'prometheus' + query: 'jvm_memory_used_bytes{area="heap",id=~"JavaHeap"}' + key: pod + +tunables: +- name: GCPolicy + description: 'Garbage collection policy' + value_type: categorical + choices: + - 'gencon' + - 'balanced' + - 'optavgpause' + - 'optthruput' + - 'metronome' + +- name: MaxRAMPercentage + description: 'Maximum RAM percentage to allocate' + value_type: integer + lower_bound: '25' + upper_bound: '90' + step: 1 + diff --git a/manifests/autotune/layers/quarkus-micrometer-config.json b/manifests/autotune/layers/quarkus-micrometer-config.json new file mode 100644 index 000000000..ab6549506 --- /dev/null +++ b/manifests/autotune/layers/quarkus-micrometer-config.json @@ -0,0 +1,29 @@ +{ + "apiVersion": "recommender.com/v1", + "kind": "KruizeLayer", + "metadata": { + "name": "quarkus" + }, + "layer_name": "quarkus", + "layer_level": 2, + "details": "quarkus tunables", + "layer_presence": { + "label": [ + { + "name": "app.kubernetes.io/layer", + "value": "quarkus" + } + ] + }, + "tunables": [ + { + "name": "quarkus.thread-pool.core-threads", + "description": "The core thread pool size. This number of threads will always be kept alive.", + "value_type": "integer", + "lower_bound": "1", + "upper_bound": "10", + "step": 1 + } + ] +} + diff --git a/manifests/autotune/layers/quarkus-micrometer-config.yaml b/manifests/autotune/layers/quarkus-micrometer-config.yaml new file mode 100644 index 000000000..fa274a952 --- /dev/null +++ b/manifests/autotune/layers/quarkus-micrometer-config.yaml @@ -0,0 +1,20 @@ +apiVersion: "recommender.com/v1" +kind: "KruizeLayer" +metadata: + name: "quarkus" +layer_name: quarkus +layer_level: 2 +details: quarkus tunables +layer_presence: + label: + - name: app.kubernetes.io/layer + value: quarkus +tunables: +# upper_bound is set to 8 times of cpu. +- name: quarkus.thread-pool.core-threads + description: 'The core thread pool size. This number of threads will always be kept alive.' + value_type: integer + upper_bound: '10' + lower_bound: '1' + step: 1 +