modules/python/clusterloader2/autoscale/config/config.yaml (116 lines of code) (raw):

{{$deploymentTemplatePath := DefaultParam .CL2_DEPLOYMENT_TEMPLATE_PATH "deployment_template.yaml"}} {{$deploymentSize := DefaultParam .CL2_DEPLOYMENT_SIZE 100}} {{$deploymentCpu := DefaultParam .CL2_DEPLOYMENT_CPU "346m"}} {{$nodeLabelSelector := DefaultParam .CL2_NODE_LABEL_SELECTOR "karpenter.sh/nodepool = default"}} {{$nodeSelector := DefaultParam .CL2_NODE_SELECTOR "{karpenter.sh/nodepool: default}"}} {{$minNodeCount := DefaultParam .CL2_MIN_NODE_COUNT 10}} {{$maxNodeCount := DefaultParam .CL2_MAX_NODE_COUNT 20}} {{$desiredNodeCount := DefaultParam .CL2_DESIRED_NODE_COUNT 1}} {{$podLabelSelector := DefaultParam .CL2_POD_LABEL_SELECTOR "app = inflate"}} {{$scaleUpTimeout := DefaultParam .CL2_SCALE_UP_TIMEOUT "30m"}} {{$scaleDownTimeout := DefaultParam .CL2_SCALE_DOWN_TIMEOUT "10m"}} {{$refreshInterval := DefaultParam .CL2_REFRESH_INTERVAL "5s"}} {{$loopCount := DefaultParam .CL2_LOOP_COUNT 1}} {{$coolDownTime := DefaultParam .CL2_COOLDOWN_TIME "120s"}} {{$percentilesList := StringSplit "0.50,0.70,0.90,0.99,1.00"}} {{$countErrorMargin := MultiplyInt .CL2_DEPLOYMENT_SIZE 0.01}} name: autoscale namespace: number: 1 prefix: autoscale deleteStaleNamespaces: true deleteAutomanagedNamespaces: true enableExistingNamespaces: true tuningSets: - name: Uniform1qps qpsLoad: qps: 1 steps: {{range $i := Loop $loopCount}} - name: Create deployment {{$i}} phases: - namespaceRange: min: 1 max: 1 replicasPerNamespace: 1 tuningSet: Uniform1qps objectBundle: - basename: inflate objectTemplatePath: {{$deploymentTemplatePath}} templateFillMap: Replicas: {{$deploymentSize}} CPUperJob: {{$deploymentCpu}} NodeSelector: {{ (StructuralData $nodeSelector) }} - name: Measure nodes and pods scale up {{$i}} measurements: - Identifier: WaitForRunningPodsUp {{$i}} Method: WaitForRunningPods Params: action: start desiredPodCount: {{$deploymentSize}} countErrorMargin: {{$countErrorMargin}} labelSelector: {{$podLabelSelector}} timeout: {{$scaleUpTimeout}} refreshInterval: {{$refreshInterval}} {{range $value := $percentilesList}} {{$PercentileNodeCount := MultiplyInt $minNodeCount (StructuralData $value) }} - Identifier: WaitForNodesUpPerc{{ MultiplyInt 100 (StructuralData $value) }} {{$i}} Method: WaitForNodes Params: action: start minDesiredNodeCount: {{ $PercentileNodeCount }} maxDesiredNodeCount: {{$minNodeCount}} labelSelector: {{$nodeLabelSelector}} timeout: {{$scaleUpTimeout}} refreshInterval: {{$refreshInterval}} {{- end }} - name: WaitBeforeDelete measurements: - Identifier: WaitBeforeDelete Method: Sleep Params: action: start duration: {{$coolDownTime}} - name: Delete deployment {{$i}} phases: - namespaceRange: min: 1 max: 1 replicasPerNamespace: 0 tuningSet: Uniform1qps objectBundle: - basename: inflate objectTemplatePath: {{$deploymentTemplatePath}} templateFillMap: Replicas: {{$deploymentSize}} CPUperJob: {{$deploymentCpu}} - name: Measure nodes and pods scale down {{$i}} measurements: - Identifier: WaitForRunningPodsDown {{$i}} Method: WaitForRunningPods Params: action: start desiredPodCount: 0 labelSelector: {{$podLabelSelector}} timeout: {{$scaleDownTimeout}} refreshInterval: {{$refreshInterval}} {{range $value := $percentilesList}} {{$PercentileNodeCount := SubtractInt $minNodeCount (MultiplyInt $minNodeCount (StructuralData $value)) }} - Identifier: WaitForNodesDownPerc{{ MultiplyInt 100 (StructuralData $value) }} {{$i}} Method: WaitForNodes Params: action: start minDesiredNodeCount: {{$desiredNodeCount}} maxDesiredNodeCount: {{if eq $PercentileNodeCount 0}}{{$desiredNodeCount}}{{else}}{{$PercentileNodeCount}}{{end}} labelSelector: {{$nodeLabelSelector}} timeout: {{$scaleDownTimeout}} refreshInterval: {{$refreshInterval}} {{- end }} - name: WaitBeforeCreate measurements: - Identifier: WaitBeforeCreate Method: Sleep Params: action: start duration: {{$coolDownTime}} {{end}}