Skip to content

Commit 60c8621

Browse files
committed
3 create worksapces
1 parent 1d9177d commit 60c8621

File tree

4 files changed

+224
-80
lines changed

4 files changed

+224
-80
lines changed
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
locals {
2+
create_workspace_timeout = "600s"
3+
}
4+
5+
resource "kubernetes_job" "create_workspaces_primary" {
6+
provider = kubernetes.primary
7+
8+
metadata {
9+
name = "${var.name}-create-workspaces"
10+
namespace = kubernetes_namespace.coder_primary.metadata.0.name
11+
labels = {
12+
"app.kubernetes.io/name" = "${var.name}-create-workspaces"
13+
}
14+
}
15+
spec {
16+
completions = 1
17+
template {
18+
metadata {}
19+
spec {
20+
affinity {
21+
node_affinity {
22+
required_during_scheduling_ignored_during_execution {
23+
node_selector_term {
24+
match_expressions {
25+
key = "cloud.google.com/gke-nodepool"
26+
operator = "In"
27+
values = ["${google_container_node_pool.node_pool["primary_misc"].name}"]
28+
}
29+
}
30+
}
31+
}
32+
}
33+
container {
34+
name = "cli"
35+
image = "${var.coder_image_repo}:${var.coder_image_tag}"
36+
command = [
37+
"/opt/coder",
38+
"--verbose",
39+
"--url=${local.deployments.primary.url}",
40+
"--token=${trimspace(data.local_file.api_key.content)}",
41+
"exp",
42+
"scaletest",
43+
"create-workspaces",
44+
"--count=${local.scenarios[var.scenario].workspaces.count_per_deployment}",
45+
"--template=kubernetes-primary",
46+
"--concurrency=${var.workspace_create_concurrency}",
47+
"--no-cleanup"
48+
]
49+
}
50+
restart_policy = "Never"
51+
}
52+
}
53+
}
54+
wait_for_completion = true
55+
56+
timeouts {
57+
create = local.create_workspace_timeout
58+
}
59+
60+
depends_on = [kubernetes_job.push_template_primary]
61+
}
62+
63+
resource "kubernetes_job" "create_workspaces_europe" {
64+
provider = kubernetes.europe
65+
66+
metadata {
67+
name = "${var.name}-create-workspaces"
68+
namespace = kubernetes_namespace.coder_europe.metadata.0.name
69+
labels = {
70+
"app.kubernetes.io/name" = "${var.name}-create-workspaces"
71+
}
72+
}
73+
spec {
74+
completions = 1
75+
template {
76+
metadata {}
77+
spec {
78+
affinity {
79+
node_affinity {
80+
required_during_scheduling_ignored_during_execution {
81+
node_selector_term {
82+
match_expressions {
83+
key = "cloud.google.com/gke-nodepool"
84+
operator = "In"
85+
values = ["${google_container_node_pool.node_pool["europe_misc"].name}"]
86+
}
87+
}
88+
}
89+
}
90+
}
91+
container {
92+
name = "cli"
93+
image = "${var.coder_image_repo}:${var.coder_image_tag}"
94+
command = [
95+
"/opt/coder",
96+
"--verbose",
97+
"--url=${local.deployments.primary.url}",
98+
"--token=${trimspace(data.local_file.api_key.content)}",
99+
"exp",
100+
"scaletest",
101+
"create-workspaces",
102+
"--count=${local.scenarios[var.scenario].workspaces.count_per_deployment}",
103+
"--template=kubernetes-europe",
104+
"--concurrency=${var.workspace_create_concurrency}",
105+
"--no-cleanup"
106+
]
107+
}
108+
restart_policy = "Never"
109+
}
110+
}
111+
}
112+
wait_for_completion = true
113+
114+
timeouts {
115+
create = local.create_workspace_timeout
116+
}
117+
118+
depends_on = [kubernetes_job.push_template_europe]
119+
}
120+
121+
resource "kubernetes_job" "create_workspaces_asia" {
122+
provider = kubernetes.asia
123+
124+
metadata {
125+
name = "${var.name}-create-workspaces"
126+
namespace = kubernetes_namespace.coder_asia.metadata.0.name
127+
labels = {
128+
"app.kubernetes.io/name" = "${var.name}-create-workspaces"
129+
}
130+
}
131+
spec {
132+
completions = 1
133+
template {
134+
metadata {}
135+
spec {
136+
affinity {
137+
node_affinity {
138+
required_during_scheduling_ignored_during_execution {
139+
node_selector_term {
140+
match_expressions {
141+
key = "cloud.google.com/gke-nodepool"
142+
operator = "In"
143+
values = ["${google_container_node_pool.node_pool["asia_misc"].name}"]
144+
}
145+
}
146+
}
147+
}
148+
}
149+
container {
150+
name = "cli"
151+
image = "${var.coder_image_repo}:${var.coder_image_tag}"
152+
command = [
153+
"/opt/coder",
154+
"--verbose",
155+
"--url=${local.deployments.primary.url}",
156+
"--token=${trimspace(data.local_file.api_key.content)}",
157+
"exp",
158+
"scaletest",
159+
"create-workspaces",
160+
"--count=${local.scenarios[var.scenario].workspaces.count_per_deployment}",
161+
"--template=kubernetes-asia",
162+
"--concurrency=${var.workspace_create_concurrency}",
163+
"--no-cleanup"
164+
]
165+
}
166+
restart_policy = "Never"
167+
}
168+
}
169+
}
170+
wait_for_completion = true
171+
172+
timeouts {
173+
create = local.create_workspace_timeout
174+
}
175+
176+
depends_on = [kubernetes_job.push_template_asia]
177+
}

scaletest/terraform/action/k8s_coder_asia.tf

Lines changed: 21 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -82,66 +82,25 @@ resource "helm_release" "provisionerd_asia" {
8282
name = local.provisionerd_release_name
8383
version = var.provisionerd_chart_version
8484
namespace = kubernetes_namespace.coder_asia.metadata.0.name
85-
values = [<<EOF
86-
coder:
87-
affinity:
88-
nodeAffinity:
89-
requiredDuringSchedulingIgnoredDuringExecution:
90-
nodeSelectorTerms:
91-
- matchExpressions:
92-
- key: "cloud.google.com/gke-nodepool"
93-
operator: "In"
94-
values: ["${google_container_node_pool.node_pool["asia_coder"].name}"]
95-
podAntiAffinity:
96-
preferredDuringSchedulingIgnoredDuringExecution:
97-
- weight: 1
98-
podAffinityTerm:
99-
topologyKey: "kubernetes.io/hostname"
100-
labelSelector:
101-
matchExpressions:
102-
- key: "app.kubernetes.io/instance"
103-
operator: "In"
104-
values: ["${local.coder_release_name}"]
105-
env:
106-
- name: "CODER_URL"
107-
value: "${local.deployments.primary.url}"
108-
- name: "CODER_VERBOSE"
109-
value: "true"
110-
- name: "CODER_CONFIG_DIR"
111-
value: "/tmp/config"
112-
- name: "CODER_CACHE_DIRECTORY"
113-
value: "/tmp/coder"
114-
- name: "CODER_TELEMETRY_ENABLE"
115-
value: "false"
116-
- name: "CODER_LOGGING_HUMAN"
117-
value: "/dev/null"
118-
- name: "CODER_LOGGING_STACKDRIVER"
119-
value: "/dev/stderr"
120-
- name: "CODER_PROMETHEUS_ENABLE"
121-
value: "true"
122-
- name: "CODER_PROVISIONERD_TAGS"
123-
value: "scope=organization"
124-
image:
125-
repo: ${var.provisionerd_image_repo}
126-
tag: ${var.provisionerd_image_tag}
127-
replicaCount: "${local.scenarios[var.scenario].provisionerd.replicas}"
128-
resources:
129-
requests:
130-
cpu: "${local.scenarios[var.scenario].provisionerd.cpu_request}"
131-
memory: "${local.scenarios[var.scenario].provisionerd.mem_request}"
132-
limits:
133-
cpu: "${local.scenarios[var.scenario].provisionerd.cpu_limit}"
134-
memory: "${local.scenarios[var.scenario].provisionerd.mem_limit}"
135-
securityContext:
136-
readOnlyRootFilesystem: true
137-
volumeMounts:
138-
- mountPath: "/tmp"
139-
name: cache
140-
readOnly: false
141-
volumes:
142-
- emptyDir:
143-
sizeLimit: 1024Mi
144-
name: cache
145-
EOF
146-
]
85+
values = [templatefile("${path.module}/coder_helm_values.tftpl", {
86+
workspace_proxy = false,
87+
provisionerd = true,
88+
primary_url = null,
89+
proxy_token = null,
90+
db_secret = null,
91+
ip_address = null,
92+
provisionerd_psk = kubernetes_secret.provisionerd_psk_asia.metadata.0.name,
93+
access_url = local.deployments.primary.url,
94+
node_pool = google_container_node_pool.node_pool["asia_coder"].name,
95+
release_name = local.coder_release_name,
96+
experiments = var.coder_experiments,
97+
image_repo = var.coder_image_repo,
98+
image_tag = var.coder_image_tag,
99+
replicas = local.scenarios[var.scenario].provisionerd.replicas,
100+
cpu_request = local.scenarios[var.scenario].provisionerd.cpu_request,
101+
mem_request = local.scenarios[var.scenario].provisionerd.mem_request,
102+
cpu_limit = local.scenarios[var.scenario].provisionerd.cpu_limit,
103+
mem_limit = local.scenarios[var.scenario].provisionerd.mem_limit,
104+
deployment = "asia",
105+
})]
147106
}

scaletest/terraform/action/scenarios.tf

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ locals {
1818
mem_limit = "1Gi"
1919
}
2020
workspaces = {
21-
nodepool_size = 1
22-
machine_type = "t2d-standard-4"
23-
cpu_request = "100m"
24-
mem_request = "128Mi"
25-
cpu_limit = "100m"
26-
mem_limit = "128Mi"
21+
count_per_deployment = 10
22+
nodepool_size = 1
23+
machine_type = "t2d-standard-4"
24+
cpu_request = "100m"
25+
mem_request = "128Mi"
26+
cpu_limit = "100m"
27+
mem_limit = "128Mi"
2728
}
2829
misc = {
2930
nodepool_size = 1
@@ -52,12 +53,13 @@ locals {
5253
mem_limit = "1Gi"
5354
}
5455
workspaces = {
55-
nodepool_size = 1
56-
machine_type = "t2d-standard-8"
57-
cpu_request = "100m"
58-
mem_request = "128Mi"
59-
cpu_limit = "100m"
60-
mem_limit = "128Mi"
56+
count_per_deployment = 10
57+
nodepool_size = 1
58+
machine_type = "t2d-standard-8"
59+
cpu_request = "100m"
60+
mem_request = "128Mi"
61+
cpu_limit = "100m"
62+
mem_limit = "128Mi"
6163
}
6264
misc = {
6365
nodepool_size = 1
@@ -86,12 +88,13 @@ locals {
8688
mem_limit = "1Gi"
8789
}
8890
workspaces = {
89-
nodepool_size = 1
90-
machine_type = "t2d-standard-8"
91-
cpu_request = "100m"
92-
mem_request = "128Mi"
93-
cpu_limit = "100m"
94-
mem_limit = "128Mi"
91+
count_per_deployment = 10
92+
nodepool_size = 1
93+
machine_type = "t2d-standard-8"
94+
cpu_request = "100m"
95+
mem_request = "128Mi"
96+
cpu_limit = "100m"
97+
mem_limit = "128Mi"
9598
}
9699
misc = {
97100
nodepool_size = 1

scaletest/terraform/action/vars.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,8 @@ variable "provisionerd_image_tag" {
8585
description = "Tag to use for Provisionerd image."
8686
default = "latest"
8787
}
88+
89+
variable "workspace_create_concurrency" {
90+
description = "Number of concurrent workspace creation jobs to run."
91+
default = 10
92+
}

0 commit comments

Comments
 (0)