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)