# ASSUMPTIONS: # - Underlying cluster should have 100+ nodes. # - Number of nodes should be divisible by NODES_PER_NAMESPACE (default 100). # - The number of created SVCs is half the number of created Deployments. # - Only half of Deployments will be assigned 1-1 to existing SVCs. #Constants {{$NODE_MODE := DefaultParam .NODE_MODE "allnodes"}} {{$NODES_PER_NAMESPACE := DefaultParam .NODES_PER_NAMESPACE 100}} {{$PODS_PER_NODE := DefaultParam .PODS_PER_NODE 30}} {{$LOAD_TEST_THROUGHPUT := DefaultParam .CL2_LOAD_TEST_THROUGHPUT 10}} {{$BIG_GROUP_SIZE := DefaultParam .BIG_GROUP_SIZE 250}} {{$MEDIUM_GROUP_SIZE := DefaultParam .MEDIUM_GROUP_SIZE 30}} {{$SMALL_GROUP_SIZE := DefaultParam .SMALL_GROUP_SIZE 5}} {{$SMALL_STATEFUL_SETS_PER_NAMESPACE := DefaultParam .SMALL_STATEFUL_SETS_PER_NAMESPACE 1}} {{$MEDIUM_STATEFUL_SETS_PER_NAMESPACE := DefaultParam .MEDIUM_STATEFUL_SETS_PER_NAMESPACE 1}} {{$ENABLE_CHAOSMONKEY := DefaultParam .ENABLE_CHAOSMONKEY false}} {{$PROMETHEUS_SCRAPE_KUBE_PROXY := DefaultParam .PROMETHEUS_SCRAPE_KUBE_PROXY true}} {{$ENABLE_PROMETHEUS_API_RESPONSIVENESS := DefaultParam .ENABLE_PROMETHEUS_API_RESPONSIVENESS false}} {{$ENABLE_PVS := DefaultParam .CL2_ENABLE_PVS true}} {{$ENABLE_NETWORKPOLICIES := DefaultParam .CL2_ENABLE_NETWORKPOLICIES false}} {{$ENABLE_SYSTEM_POD_METRICS:= DefaultParam .ENABLE_SYSTEM_POD_METRICS true}} {{$USE_SIMPLE_LATENCY_QUERY := DefaultParam .USE_SIMPLE_LATENCY_QUERY false}} {{$ENABLE_RESTART_COUNT_CHECK := DefaultParam .ENABLE_RESTART_COUNT_CHECK false}} {{$RESTART_COUNT_THRESHOLD_OVERRIDES:= DefaultParam .RESTART_COUNT_THRESHOLD_OVERRIDES ""}} {{$ALLOWED_SLOW_API_CALLS := DefaultParam .CL2_ALLOWED_SLOW_API_CALLS 0}} {{$CUSTOM_API_CALL_THRESHOLDS := DefaultParam .CUSTOM_API_CALL_THRESHOLDS ""}} #Variables {{$namespaces := DivideInt .Nodes $NODES_PER_NAMESPACE}} {{$totalPods := MultiplyInt $namespaces $NODES_PER_NAMESPACE $PODS_PER_NODE}} {{$podsPerNamespace := DivideInt $totalPods $namespaces}} {{$saturationTime := DivideInt $totalPods $LOAD_TEST_THROUGHPUT}} # bigDeployments - 1/4 of namespace pods should be in big Deployments. {{$bigDeploymentsPerNamespace := DivideInt $podsPerNamespace (MultiplyInt 4 $BIG_GROUP_SIZE)}} # mediumDeployments - 1/4 of namespace pods should be in medium Deployments. {{$mediumDeploymentsPerNamespace := DivideInt $podsPerNamespace (MultiplyInt 4 $MEDIUM_GROUP_SIZE)}} # smallDeployments - 1/2 of namespace pods should be in small Deployments. {{$smallDeploymentsPerNamespace := DivideInt $podsPerNamespace (MultiplyInt 2 $SMALL_GROUP_SIZE)}} # Reduce the number of small and medium deployments per namespace {{$smallDeploymentsPerNamespace := SubtractInt $smallDeploymentsPerNamespace $SMALL_STATEFUL_SETS_PER_NAMESPACE}} {{$mediumDeploymentsPerNamespace := SubtractInt $mediumDeploymentsPerNamespace $MEDIUM_STATEFUL_SETS_PER_NAMESPACE}} # Reduce the number of small, medium, big deployments per namespace. {{$smallDeploymentsPerNamespace := SubtractInt $smallDeploymentsPerNamespace 1}} {{$mediumDeploymentsPerNamespace := SubtractInt $mediumDeploymentsPerNamespace 1}} {{$bigDeploymentsPerNamespace := SubtractInt $bigDeploymentsPerNamespace 1}} # Probe measurements shared parameter {{$PROBE_MEASUREMENTS_CHECK_PROBES_READY_TIMEOUT := DefaultParam .CL2_PROBE_MEASUREMENTS_CHECK_PROBES_READY_TIMEOUT "5m"}} name: load namespace: number: {{$namespaces}} tuningSets: - name: Sequence parallelismLimitedLoad: parallelismLimit: 1 - name: RandomizedSaturationTimeLimited RandomizedTimeLimitedLoad: timeLimit: {{$saturationTime}}s - name: RandomizedScalingTimeLimited RandomizedTimeLimitedLoad: # The expected number of created/deleted pods is totalPods/4 when scaling, # as each RS changes its size from X to a uniform random value in [X/2, 3X/2]. # To match 10 [pods/s] requirement, we need to divide saturationTime by 4. timeLimit: {{DivideInt $saturationTime 4}}s {{if $ENABLE_CHAOSMONKEY}} chaosMonkey: nodeFailure: failureRate: 0.01 interval: 5m jitterFactor: 2.0 simulatedDowntime: 10m {{end}} steps: - name: Starting measurements measurements: - Identifier: APIResponsivenessPrometheus Method: APIResponsivenessPrometheus Params: action: start - Identifier: APIResponsivenessPrometheusSimple Method: APIResponsivenessPrometheus Params: action: start - Identifier: PodStartupLatency Method: PodStartupLatency Params: action: start labelSelector: group = load threshold: 1h - Identifier: InClusterNetworkLatency Method: InClusterNetworkLatency Params: action: start checkProbesReadyTimeout: {{$PROBE_MEASUREMENTS_CHECK_PROBES_READY_TIMEOUT}} replicasPerProbe: {{AddInt 2 (DivideInt .Nodes 100)}} - Identifier: DnsLookupLatency Method: DnsLookupLatency Params: action: start checkProbesReadyTimeout: {{$PROBE_MEASUREMENTS_CHECK_PROBES_READY_TIMEOUT}} replicasPerProbe: {{AddInt 2 (DivideInt .Nodes 100)}} {{if $PROMETHEUS_SCRAPE_KUBE_PROXY}} - Identifier: NetworkProgrammingLatency Method: NetworkProgrammingLatency Params: action: start {{end}} - Identifier: TestMetrics Method: TestMetrics Params: action: start nodeMode: {{$NODE_MODE}} systemPodMetricsEnabled: {{$ENABLE_SYSTEM_POD_METRICS}} restartCountThresholdOverrides: {{YamlQuote $RESTART_COUNT_THRESHOLD_OVERRIDES 4}} enableRestartCountCheck: {{$ENABLE_RESTART_COUNT_CHECK}} - name: Creating SVCs phases: - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{DivideInt (AddInt $bigDeploymentsPerNamespace 1) 2}} tuningSet: Sequence objectBundle: - basename: big-service objectTemplatePath: service.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{DivideInt (AddInt $mediumDeploymentsPerNamespace 1) 2}} tuningSet: Sequence objectBundle: - basename: medium-service objectTemplatePath: service.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{DivideInt (AddInt $smallDeploymentsPerNamespace 1) 2}} tuningSet: Sequence objectBundle: - basename: small-service objectTemplatePath: service.yaml - name: Creating PriorityClass for DaemonSets phases: - replicasPerNamespace: 1 tuningSet: Sequence objectBundle: - basename: daemonset-priorityclass objectTemplatePath: daemonset-priorityclass.yaml - name: Starting measurement for waiting for pods measurements: - Identifier: WaitForRunningDeployments Method: WaitForControlledPodsRunning Params: action: start apiVersion: apps/v1 kind: Deployment labelSelector: group = load operationTimeout: 15m - Identifier: WaitForRunningStatefulSets Method: WaitForControlledPodsRunning Params: action: start apiVersion: apps/v1 kind: StatefulSet labelSelector: group = load operationTimeout: 15m - Identifier: WaitForRunningDaemonSets Method: WaitForControlledPodsRunning Params: action: start apiVersion: apps/v1 kind: DaemonSet labelSelector: group = load operationTimeout: 15m - Identifier: WaitForRunningJobs Method: WaitForControlledPodsRunning Params: action: start apiVersion: batch/v1 kind: Job labelSelector: group = load operationTimeout: 15m - name: Creating objects phases: - namespaceRange: min: 1 max: 1 replicasPerNamespace: 1 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: daemonset objectTemplatePath: daemonset.yaml templateFillMap: Image: k8s.gcr.io/pause:3.0 - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$bigDeploymentsPerNamespace}} tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: big-deployment objectTemplatePath: configmap.yaml - basename: big-deployment objectTemplatePath: secret.yaml {{if $ENABLE_NETWORKPOLICIES}} - basename: big-deployment objectTemplatePath: networkpolicy.yaml {{end}} - basename: big-deployment objectTemplatePath: deployment.yaml templateFillMap: ReplicasMin: {{$BIG_GROUP_SIZE}} ReplicasMax: {{$BIG_GROUP_SIZE}} SvcName: big-service - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$mediumDeploymentsPerNamespace}} tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: medium-deployment objectTemplatePath: configmap.yaml - basename: medium-deployment objectTemplatePath: secret.yaml {{if $ENABLE_NETWORKPOLICIES}} - basename: medium-deployment objectTemplatePath: networkpolicy.yaml {{end}} - basename: medium-deployment objectTemplatePath: deployment.yaml templateFillMap: ReplicasMin: {{$MEDIUM_GROUP_SIZE}} ReplicasMax: {{$MEDIUM_GROUP_SIZE}} SvcName: medium-service - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$smallDeploymentsPerNamespace}} tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: small-deployment objectTemplatePath: configmap.yaml - basename: small-deployment objectTemplatePath: secret.yaml {{if $ENABLE_NETWORKPOLICIES}} - basename: small-deployment objectTemplatePath: networkpolicy.yaml {{end}} - basename: small-deployment objectTemplatePath: deployment.yaml templateFillMap: ReplicasMin: {{$SMALL_GROUP_SIZE}} ReplicasMax: {{$SMALL_GROUP_SIZE}} SvcName: small-service - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$SMALL_STATEFUL_SETS_PER_NAMESPACE}} tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: small-statefulset objectTemplatePath: statefulset_service.yaml - basename: small-statefulset objectTemplatePath: statefulset.yaml templateFillMap: ReplicasMin: {{$SMALL_GROUP_SIZE}} ReplicasMax: {{$SMALL_GROUP_SIZE}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$MEDIUM_STATEFUL_SETS_PER_NAMESPACE}} tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: medium-statefulset objectTemplatePath: statefulset_service.yaml - basename: medium-statefulset objectTemplatePath: statefulset.yaml templateFillMap: ReplicasMin: {{$MEDIUM_GROUP_SIZE}} ReplicasMax: {{$MEDIUM_GROUP_SIZE}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 1 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: small-job objectTemplatePath: job.yaml templateFillMap: ReplicasMin: {{$SMALL_GROUP_SIZE}} ReplicasMax: {{$SMALL_GROUP_SIZE}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 1 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: medium-job objectTemplatePath: job.yaml templateFillMap: ReplicasMin: {{$MEDIUM_GROUP_SIZE}} ReplicasMax: {{$MEDIUM_GROUP_SIZE}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 1 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: big-job objectTemplatePath: job.yaml templateFillMap: ReplicasMin: {{$BIG_GROUP_SIZE}} ReplicasMax: {{$BIG_GROUP_SIZE}} - name: Waiting for pods to be running measurements: - Identifier: WaitForRunningDeployments Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningStatefulSets Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningDaemonSets Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningJobs Method: WaitForControlledPodsRunning Params: action: gather - name: Scaling and updating objects phases: - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$bigDeploymentsPerNamespace}} tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: big-deployment objectTemplatePath: deployment.yaml templateFillMap: ReplicasMin: {{MultiplyInt $BIG_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $BIG_GROUP_SIZE 1.5}} SvcName: big-service - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$mediumDeploymentsPerNamespace}} tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: medium-deployment objectTemplatePath: deployment.yaml templateFillMap: ReplicasMin: {{MultiplyInt $MEDIUM_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $MEDIUM_GROUP_SIZE 1.5}} SvcName: medium-service - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$smallDeploymentsPerNamespace}} tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: small-deployment objectTemplatePath: deployment.yaml templateFillMap: ReplicasMin: {{MultiplyInt $SMALL_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $SMALL_GROUP_SIZE 1.5}} SvcName: small-service - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$SMALL_STATEFUL_SETS_PER_NAMESPACE}} tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: small-statefulset objectTemplatePath: statefulset.yaml templateFillMap: ReplicasMin: {{MultiplyInt $SMALL_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $SMALL_GROUP_SIZE 1.5}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: {{$MEDIUM_STATEFUL_SETS_PER_NAMESPACE}} tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: medium-statefulset objectTemplatePath: statefulset.yaml templateFillMap: ReplicasMin: {{MultiplyInt $MEDIUM_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $MEDIUM_GROUP_SIZE 1.5}} - namespaceRange: min: 1 max: 1 replicasPerNamespace: 1 tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: daemonset objectTemplatePath: daemonset.yaml templateFillMap: Image: k8s.gcr.io/pause:3.1 - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 1 tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: small-job objectTemplatePath: job.yaml templateFillMap: ReplicasMin: {{MultiplyInt $SMALL_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $SMALL_GROUP_SIZE 1.5}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 1 tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: medium-job objectTemplatePath: job.yaml templateFillMap: ReplicasMin: {{MultiplyInt $MEDIUM_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $MEDIUM_GROUP_SIZE 1.5}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 1 tuningSet: RandomizedScalingTimeLimited objectBundle: - basename: big-job objectTemplatePath: job.yaml templateFillMap: ReplicasMin: {{MultiplyInt $BIG_GROUP_SIZE 0.5}} ReplicasMax: {{MultiplyInt $BIG_GROUP_SIZE 1.5}} - name: Waiting for objects to become scaled measurements: - Identifier: WaitForRunningDeployments Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningStatefulSets Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningDaemonSets Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningJobs Method: WaitForControlledPodsRunning Params: action: gather - name: Deleting objects phases: - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: big-deployment objectTemplatePath: deployment.yaml - basename: big-deployment objectTemplatePath: configmap.yaml - basename: big-deployment objectTemplatePath: secret.yaml {{if $ENABLE_NETWORKPOLICIES}} - basename: big-deployment objectTemplatePath: networkpolicy.yaml {{end}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: medium-deployment objectTemplatePath: deployment.yaml - basename: medium-deployment objectTemplatePath: configmap.yaml - basename: medium-deployment objectTemplatePath: secret.yaml {{if $ENABLE_NETWORKPOLICIES}} - basename: medium-deployment objectTemplatePath: networkpolicy.yaml {{end}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: small-deployment objectTemplatePath: deployment.yaml - basename: small-deployment objectTemplatePath: configmap.yaml - basename: small-deployment objectTemplatePath: secret.yaml {{if $ENABLE_NETWORKPOLICIES}} - basename: small-deployment objectTemplatePath: networkpolicy.yaml {{end}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: small-statefulset objectTemplatePath: statefulset.yaml - basename: small-statefulset objectTemplatePath: statefulset_service.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: medium-statefulset objectTemplatePath: statefulset.yaml - basename: medium-statefulset objectTemplatePath: statefulset_service.yaml - namespaceRange: min: 1 max: 1 replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: daemonset objectTemplatePath: daemonset.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: small-job objectTemplatePath: job.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: medium-job objectTemplatePath: job.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: - basename: big-job objectTemplatePath: job.yaml # If both StatefulSets and PVs were enabled we need to delete PVs manually. {{if $ENABLE_PVS}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: {{range $ssIndex := Loop $SMALL_STATEFUL_SETS_PER_NAMESPACE}} - basename: pv-small-statefulset-{{$ssIndex}} objectTemplatePath: pvc.yaml listUnknownObjectOptions: labelSelector: matchLabels: name: small-statefulset-{{$ssIndex}} {{end}} - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: RandomizedSaturationTimeLimited objectBundle: {{range $ssIndex := Loop $MEDIUM_STATEFUL_SETS_PER_NAMESPACE}} - basename: pv-medium-statefulset-{{$ssIndex}} objectTemplatePath: pvc.yaml listUnknownObjectOptions: labelSelector: matchLabels: name: medium-statefulset-{{$ssIndex}} {{end}} {{end}} - name: Waiting for pods to be deleted measurements: - Identifier: WaitForRunningDeployments Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningStatefulSets Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningDaemonSets Method: WaitForControlledPodsRunning Params: action: gather - Identifier: WaitForRunningJobs Method: WaitForControlledPodsRunning Params: action: gather {{if $ENABLE_PVS}} - Identifier: WaitForPVCsToBeDeleted Method: WaitForBoundPVCs Params: desiredPVCCount: 0 labelSelector: group = load timeout: 15m {{end}} - name: Deleting PriorityClass for DaemonSets phases: - replicasPerNamespace: 0 tuningSet: Sequence objectBundle: - basename: daemonset-priorityclass objectTemplatePath: daemonset-priorityclass.yaml - name: Deleting SVCs phases: - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: Sequence objectBundle: - basename: big-service objectTemplatePath: service.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: Sequence objectBundle: - basename: medium-service objectTemplatePath: service.yaml - namespaceRange: min: 1 max: {{$namespaces}} replicasPerNamespace: 0 tuningSet: Sequence objectBundle: - basename: small-service objectTemplatePath: service.yaml - name: Collecting measurements measurements: - Identifier: APIResponsivenessPrometheusSimple Method: APIResponsivenessPrometheus Params: action: gather enableViolations: true useSimpleLatencyQuery: true summaryName: APIResponsivenessPrometheus_simple allowedSlowCalls: {{$ALLOWED_SLOW_API_CALLS}} {{if not $USE_SIMPLE_LATENCY_QUERY}} - Identifier: APIResponsivenessPrometheus Method: APIResponsivenessPrometheus Params: action: gather allowedSlowCalls: {{$ALLOWED_SLOW_API_CALLS}} customThresholds: {{YamlQuote $CUSTOM_API_CALL_THRESHOLDS 4}} {{end}} - Identifier: PodStartupLatency Method: PodStartupLatency Params: action: gather - Identifier: InClusterNetworkLatency Method: InClusterNetworkLatency Params: action: gather - Identifier: DnsLookupLatency Method: DnsLookupLatency Params: action: gather {{if $PROMETHEUS_SCRAPE_KUBE_PROXY}} - Identifier: NetworkProgrammingLatency Method: NetworkProgrammingLatency Params: action: gather {{end}} - Identifier: TestMetrics Method: TestMetrics Params: action: gather systemPodMetricsEnabled: {{$ENABLE_SYSTEM_POD_METRICS}} restartCountThresholdOverrides: {{YamlQuote $RESTART_COUNT_THRESHOLD_OVERRIDES 4}} enableRestartCountCheck: {{$ENABLE_RESTART_COUNT_CHECK}}