diff --git a/clusterloader2/testing/request-benchmark/config.yaml b/clusterloader2/testing/request-benchmark/config.yaml index ea8d557bb4..e8cb6eeb5f 100644 --- a/clusterloader2/testing/request-benchmark/config.yaml +++ b/clusterloader2/testing/request-benchmark/config.yaml @@ -5,6 +5,7 @@ {{$benchmarkReplicas := DefaultParam .CL2_BENCHMARK_PODS 1}} {{$inflight := DefaultParam .CL2_BENCHMARK_INFLIGHT 10}} +{{$qps := DefaultParam .CL2_BENCHMARK_QPS -1}} {{$uri := DefaultParam .CL2_BENCHMARK_URI ""}} # URI example: /api/v1/namespaces/%namespace%/pods name: Request benchmark @@ -13,7 +14,7 @@ namespace: tuningSets: - name: Sequence parallelismLimitedLoad: - parallelismLimit: 1 + parallelismLimit: 10 steps: - name: Setup permissions phases: @@ -43,7 +44,7 @@ steps: objectBundle: - basename: {{$configMapGroup}} objectTemplatePath: configmap.yaml - params: + templateFillMap: bytes: {{$configMapBytes}} group: {{$configMapGroup}} - module: @@ -56,6 +57,7 @@ steps: replicas: {{$benchmarkReplicas}} inflight: {{$inflight}} uri: {{$uri}} + qps: {{$qps}} - module: path: modules/measurements.yaml params: diff --git a/clusterloader2/testing/request-benchmark/configmap.yaml b/clusterloader2/testing/request-benchmark/configmap.yaml index 4c4a223ab9..6e0582cb9d 100644 --- a/clusterloader2/testing/request-benchmark/configmap.yaml +++ b/clusterloader2/testing/request-benchmark/configmap.yaml @@ -1,4 +1,4 @@ -{{$bytes := DefaultParam .bytes 0}} +{{$bytes := .bytes}} {{$group := DefaultParam .group .Name}} apiVersion: v1 @@ -8,4 +8,4 @@ metadata: labels: group: {{$group}} data: - key: "{{range $i := Loop $bytes}}{{RandIntRange 0 9}}{{end}}" + key: "{{RandData $bytes}}" diff --git a/clusterloader2/testing/request-benchmark/deployment.yaml b/clusterloader2/testing/request-benchmark/deployment.yaml index a688d9cdca..fb90715002 100644 --- a/clusterloader2/testing/request-benchmark/deployment.yaml +++ b/clusterloader2/testing/request-benchmark/deployment.yaml @@ -27,6 +27,7 @@ spec: - --inflight={{.Inflight}} - --namespace={{.Namespace}} - --uri={{.Uri}} + - --qps={{.QPS}} resources: requests: cpu: {{$cpu}} diff --git a/clusterloader2/testing/request-benchmark/modules/benchmark-deployment.yaml b/clusterloader2/testing/request-benchmark/modules/benchmark-deployment.yaml index afbdccc23d..16bfd209e3 100644 --- a/clusterloader2/testing/request-benchmark/modules/benchmark-deployment.yaml +++ b/clusterloader2/testing/request-benchmark/modules/benchmark-deployment.yaml @@ -1,6 +1,7 @@ {{$replicas := DefaultParam .replicas 0}} {{$inflight := DefaultParam .inflight 0}} {{$uri := DefaultParam .uri "/"}} +{{$qps := DefaultParam .qps -1}} steps: - name: Creating WaitForControlledPodsRunning measurement @@ -28,6 +29,7 @@ steps: Replicas: {{$replicas}} Inflight: {{$inflight}} Uri: {{$uri}} + QPS: {{$qps}} - name: Waiting for WaitForControlledPodsRunning gather measurements: - Identifier: WaitForBenchmarkDeployment diff --git a/clusterloader2/testing/request-benchmark/modules/measurements.yaml b/clusterloader2/testing/request-benchmark/modules/measurements.yaml index 569879f85e..3a0d57518a 100644 --- a/clusterloader2/testing/request-benchmark/modules/measurements.yaml +++ b/clusterloader2/testing/request-benchmark/modules/measurements.yaml @@ -9,6 +9,12 @@ steps: duration: 1m - name: "Starting measurement - {{.name}}" measurements: + - Identifier: APIResponsivenessPrometheusSimple + Method: APIResponsivenessPrometheus + Params: + action: start + enableViolations: false + useSimpleLatencyQuery: true - Identifier: ContainerCPU-{{.name}} Method: GenericPrometheusQuery Params: @@ -49,3 +55,9 @@ steps: query: quantile_over_time(0.90, sum by (container) (rate(container_cpu_usage_seconds_total[1m]))[%v:]) - name: Perc50 query: quantile_over_time(0.50, sum by (container) (rate(container_cpu_usage_seconds_total[1m]))[%v:]) + - Identifier: APIResponsivenessPrometheusSimple + Method: APIResponsivenessPrometheus + Params: + action: gather + enableViolations: false + useSimpleLatencyQuery: true diff --git a/util-images/request-benchmark/Makefile b/util-images/request-benchmark/Makefile index a8a95c61ba..6995d684ac 100644 --- a/util-images/request-benchmark/Makefile +++ b/util-images/request-benchmark/Makefile @@ -1,6 +1,6 @@ PROJECT ?= k8s-testimages IMG = gcr.io/$(PROJECT)/perf-tests-util/request-benchmark -TAG = v0.0.5 +TAG = v0.0.6 all: build push diff --git a/util-images/request-benchmark/client.go b/util-images/request-benchmark/client.go index cbb45765f7..ff012dc77f 100644 --- a/util-images/request-benchmark/client.go +++ b/util-images/request-benchmark/client.go @@ -48,13 +48,14 @@ func (c *Client) TimedRequest(ctx context.Context, request *rest.Request) Respon } } -func GetClient() (*Client, error) { +func GetClient(qps float32) (*Client, error) { config, err := getConfig() if err != nil { return nil, err } - config.QPS = -1 // Disable rate limiter + config.QPS = qps + config.Burst = 10 client, err := kubernetes.NewForConfig(config) return (*Client)(client), err diff --git a/util-images/request-benchmark/main.go b/util-images/request-benchmark/main.go index ed07fa9427..ee297e2c0d 100644 --- a/util-images/request-benchmark/main.go +++ b/util-images/request-benchmark/main.go @@ -34,6 +34,7 @@ var ( namespace = flag.String("namespace", "", "Replace %namespace% in URI with provided namespace") URI = flag.String("uri", "", "Request URI") verb = flag.String("verb", "GET", "A verb to be used in requests.") + qps = flag.Float64("qps", -1, "The qps limit for all requests") ) func init() { @@ -41,7 +42,7 @@ func init() { } func main() { - client, err := GetClient() + client, err := GetClient(float32(*qps)) if err != nil { panic(err) }