Skip to content

Commit bc169a5

Browse files
committed
working loadgen with pprof download
1 parent 454b878 commit bc169a5

File tree

7 files changed

+122
-8
lines changed

7 files changed

+122
-8
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
locals {
2+
pprof_interval = "30s"
3+
pprof_duration = "300s"
4+
}
5+
6+
resource "local_file" "kubeconfig" {
7+
for_each = local.deployments
8+
9+
content = templatefile("${path.module}/kubeconfig.tftpl", {
10+
name = google_container_cluster.cluster[each.key].name
11+
endpoint = "https://${google_container_cluster.cluster[each.key].endpoint}"
12+
cluster_ca_certificate = google_container_cluster.cluster[each.key].master_auth[0].cluster_ca_certificate
13+
access_token = data.google_client_config.default.access_token
14+
})
15+
filename = "${path.module}/.coderv2/kubeconfig/${each.key}.yaml"
16+
}
17+
18+
resource "null_resource" "pprof" {
19+
provisioner "local-exec" {
20+
interpreter = ["/bin/bash", "-c"]
21+
command = <<EOF
22+
set -e
23+
24+
pids=()
25+
ports=()
26+
declare -A pods=()
27+
next_port=6061
28+
export KUBECONFIG="${path.module}/.coderv2/kubeconfig/primary.yaml"
29+
30+
for pod in $(kubectl get pods -n ${kubernetes_namespace.coder_primary.metadata.0.name} -l app.kubernetes.io/name=coder -o jsonpath='{.items[*].metadata.name}'); do
31+
echo "Port forwarding cluster primary $${pod} to $${next_port}"
32+
kubectl -n ${kubernetes_namespace.coder_primary.metadata.0.name} port-forward "$${pod}" "$${next_port}:6060" &
33+
pids+=($!)
34+
ports+=("$${next_port}")
35+
pods[$${next_port}]="$${pod}"
36+
next_port=$((next_port + 1))
37+
done
38+
39+
trap 'trap - EXIT; kill -INT "$${pids[@]}"' INT EXIT
40+
41+
mkdir -p ${path.module}/.coderv2/pprof
42+
{
43+
while :; do
44+
sleep ${local.pprof_interval}
45+
start="$(date +%s)"
46+
for port in "$${ports[@]}"; do
47+
echo "Fetching pprof data for primary-$${start}-$${pods[$${port}]} on port $${port}"
48+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-allocs.pprof.gz" http://localhost:$${port}/debug/pprof/allocs
49+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-block.pprof.gz" http://localhost:$${port}/debug/pprof/block
50+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-heap.pprof.gz" http://localhost:$${port}/debug/pprof/heap
51+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-goroutine.pprof.gz" http://localhost:$${port}/debug/pprof/goroutine
52+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-mutex.pprof.gz" http://localhost:$${port}/debug/pprof/mutex
53+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-profile_seconds_10.pprof.gz" http://localhost:$${port}/debug/pprof/profile?seconds=10
54+
curl --silent --fail --output "${path.module}/.coderv2/pprof/primary-$${start}-$${pods[$${port}]}-trace_seconds_5.pprof.gz" http://localhost:$${port}/debug/pprof/trace?seconds=5
55+
done
56+
done
57+
} &
58+
pprof_pid=$!
59+
60+
sleep ${local.pprof_duration}
61+
62+
kill -INT $pprof_pid
63+
EOF
64+
}
65+
66+
depends_on = [time_sleep.wait_baseline, local_file.kubeconfig ]
67+
}

scaletest/terraform/action/coder_templates.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,8 @@ resource "kubernetes_job" "push_template_primary" {
159159
}
160160
}
161161
wait_for_completion = true
162+
163+
depends_on = [ helm_release.provisionerd_primary ]
162164
}
163165

164166
resource "kubernetes_config_map" "template_europe" {
@@ -235,6 +237,8 @@ resource "kubernetes_job" "push_template_europe" {
235237
}
236238
}
237239
wait_for_completion = true
240+
241+
depends_on = [ helm_release.provisionerd_europe ]
238242
}
239243

240244
resource "kubernetes_config_map" "template_asia" {
@@ -311,4 +315,6 @@ resource "kubernetes_job" "push_template_asia" {
311315
}
312316
}
313317
wait_for_completion = true
318+
319+
depends_on = [ helm_release.provisionerd_asia ]
314320
}

scaletest/terraform/action/coder_traffic.tf

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
11
locals {
2-
workspace_traffic_job_timeout = "300s"
3-
workspace_traffic_duration = "60s"
2+
wait_baseline_duration = "60s"
3+
workspace_traffic_job_timeout = "420s"
4+
workspace_traffic_duration = "300s"
45
bytes_per_tick = 1024
56
tick_interval = "100ms"
67
}
78

9+
resource "time_sleep" "wait_baseline" {
10+
depends_on = [
11+
kubernetes_job.create_workspaces_primary,
12+
kubernetes_job.create_workspaces_europe,
13+
kubernetes_job.create_workspaces_asia,
14+
]
15+
16+
create_duration = local.wait_baseline_duration
17+
}
18+
819
resource "kubernetes_job" "workspace_traffic_primary" {
920
provider = kubernetes.primary
1021

@@ -44,6 +55,7 @@ resource "kubernetes_job" "workspace_traffic_primary" {
4455
"exp",
4556
"scaletest",
4657
"workspace-traffic",
58+
"--template=kubernetes-primary",
4759
"--concurrency=0",
4860
"--bytes-per-tick=${local.bytes_per_tick}",
4961
"--tick-interval=${local.tick_interval}",
@@ -64,7 +76,7 @@ resource "kubernetes_job" "workspace_traffic_primary" {
6476
create = local.workspace_traffic_job_timeout
6577
}
6678

67-
depends_on = [kubernetes_job.create_workspaces_primary]
79+
depends_on = [time_sleep.wait_baseline]
6880
}
6981

7082
resource "kubernetes_job" "workspace_traffic_europe" {
@@ -101,11 +113,12 @@ resource "kubernetes_job" "workspace_traffic_europe" {
101113
command = [
102114
"/opt/coder",
103115
"--verbose",
104-
"--url=${local.deployments.primary.url}",
116+
"--url=${local.deployments.europe.url}",
105117
"--token=${trimspace(data.local_file.api_key.content)}",
106118
"exp",
107119
"scaletest",
108120
"workspace-traffic",
121+
"--template=kubernetes-europe",
109122
"--concurrency=0",
110123
"--bytes-per-tick=${local.bytes_per_tick}",
111124
"--tick-interval=${local.tick_interval}",
@@ -126,7 +139,7 @@ resource "kubernetes_job" "workspace_traffic_europe" {
126139
create = local.workspace_traffic_job_timeout
127140
}
128141

129-
depends_on = [kubernetes_job.create_workspaces_europe]
142+
depends_on = [time_sleep.wait_baseline]
130143
}
131144

132145
resource "kubernetes_job" "workspace_traffic_asia" {
@@ -163,11 +176,12 @@ resource "kubernetes_job" "workspace_traffic_asia" {
163176
command = [
164177
"/opt/coder",
165178
"--verbose",
166-
"--url=${local.deployments.primary.url}",
179+
"--url=${local.deployments.asia.url}",
167180
"--token=${trimspace(data.local_file.api_key.content)}",
168181
"exp",
169182
"scaletest",
170183
"workspace-traffic",
184+
"--template=kubernetes-asia",
171185
"--concurrency=0",
172186
"--bytes-per-tick=${local.bytes_per_tick}",
173187
"--tick-interval=${local.tick_interval}",
@@ -188,5 +202,5 @@ resource "kubernetes_job" "workspace_traffic_asia" {
188202
create = local.workspace_traffic_job_timeout
189203
}
190204

191-
depends_on = [kubernetes_job.create_workspaces_asia]
205+
depends_on = [time_sleep.wait_baseline]
192206
}

scaletest/terraform/action/k8s_coder_asia.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ resource "helm_release" "coder_asia" {
7272
mem_limit = local.scenarios[var.scenario].coder.mem_limit,
7373
deployment = "asia",
7474
})]
75+
76+
depends_on = [ null_resource.license ]
7577
}
7678

7779
resource "helm_release" "provisionerd_asia" {
@@ -103,4 +105,6 @@ resource "helm_release" "provisionerd_asia" {
103105
mem_limit = local.scenarios[var.scenario].provisionerd.mem_limit,
104106
deployment = "asia",
105107
})]
108+
109+
depends_on = [ null_resource.license ]
106110
}

scaletest/terraform/action/k8s_coder_europe.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ resource "helm_release" "coder_europe" {
7272
mem_limit = local.scenarios[var.scenario].coder.mem_limit,
7373
deployment = "europe",
7474
})]
75+
76+
depends_on = [ null_resource.license ]
7577
}
7678

7779
resource "helm_release" "provisionerd_europe" {
@@ -103,4 +105,6 @@ resource "helm_release" "provisionerd_europe" {
103105
mem_limit = local.scenarios[var.scenario].provisionerd.mem_limit,
104106
deployment = "europe",
105107
})]
108+
109+
depends_on = [ null_resource.license ]
106110
}

scaletest/terraform/action/k8s_coder_primary.tf

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ resource "helm_release" "coder_primary" {
9494
})]
9595
}
9696

97-
resource "helm_release" "provisionerd_chart" {
97+
resource "helm_release" "provisionerd_primary" {
9898
provider = helm.primary
9999

100100
repository = local.coder_helm_repo
@@ -123,4 +123,6 @@ resource "helm_release" "provisionerd_chart" {
123123
mem_limit = local.scenarios[var.scenario].provisionerd.mem_limit,
124124
deployment = "primary",
125125
})]
126+
127+
depends_on = [ null_resource.license ]
126128
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Config
3+
current-context: ${name}
4+
clusters:
5+
- name: ${name}
6+
cluster:
7+
certificate-authority-data: ${cluster_ca_certificate}
8+
server: ${endpoint}
9+
contexts:
10+
- context:
11+
cluster: ${name}
12+
user: ${name}
13+
name: ${name}
14+
users:
15+
- name: ${name}
16+
user:
17+
token: ${access_token}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy