mirror of
https://github.com/coder/coder.git
synced 2025-07-15 22:20:27 +00:00
feat: add scaletest load generation infrastructure (#15816)
Closes https://github.com/coder/internal/issues/149 This creates workspaces in each region and runs traffic generation against the workspaces colocated in the region.
This commit is contained in:
180
scaletest/terraform/action/coder_workspaces.tf
Normal file
180
scaletest/terraform/action/coder_workspaces.tf
Normal file
@ -0,0 +1,180 @@
|
||||
locals {
|
||||
create_workspace_timeout = "30m"
|
||||
}
|
||||
|
||||
resource "kubernetes_job" "create_workspaces_primary" {
|
||||
provider = kubernetes.primary
|
||||
|
||||
metadata {
|
||||
name = "${var.name}-create-workspaces"
|
||||
namespace = kubernetes_namespace.coder_primary.metadata.0.name
|
||||
labels = {
|
||||
"app.kubernetes.io/name" = "${var.name}-create-workspaces"
|
||||
}
|
||||
}
|
||||
spec {
|
||||
completions = 1
|
||||
backoff_limit = 0
|
||||
template {
|
||||
metadata {}
|
||||
spec {
|
||||
affinity {
|
||||
node_affinity {
|
||||
required_during_scheduling_ignored_during_execution {
|
||||
node_selector_term {
|
||||
match_expressions {
|
||||
key = "cloud.google.com/gke-nodepool"
|
||||
operator = "In"
|
||||
values = ["${google_container_node_pool.node_pool["primary_misc"].name}"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
container {
|
||||
name = "cli"
|
||||
image = "${var.coder_image_repo}:${var.coder_image_tag}"
|
||||
command = [
|
||||
"/opt/coder",
|
||||
"--verbose",
|
||||
"--url=${local.deployments.primary.url}",
|
||||
"--token=${trimspace(data.local_file.api_key.content)}",
|
||||
"exp",
|
||||
"scaletest",
|
||||
"create-workspaces",
|
||||
"--count=${local.scenarios[var.scenario].workspaces.count_per_deployment}",
|
||||
"--template=kubernetes-primary",
|
||||
"--concurrency=${local.scenarios[var.scenario].provisionerd.replicas}",
|
||||
"--no-cleanup"
|
||||
]
|
||||
}
|
||||
restart_policy = "Never"
|
||||
}
|
||||
}
|
||||
}
|
||||
wait_for_completion = true
|
||||
|
||||
timeouts {
|
||||
create = local.create_workspace_timeout
|
||||
}
|
||||
|
||||
depends_on = [kubernetes_job.push_template_primary]
|
||||
}
|
||||
|
||||
resource "kubernetes_job" "create_workspaces_europe" {
|
||||
provider = kubernetes.europe
|
||||
|
||||
metadata {
|
||||
name = "${var.name}-create-workspaces"
|
||||
namespace = kubernetes_namespace.coder_europe.metadata.0.name
|
||||
labels = {
|
||||
"app.kubernetes.io/name" = "${var.name}-create-workspaces"
|
||||
}
|
||||
}
|
||||
spec {
|
||||
completions = 1
|
||||
backoff_limit = 0
|
||||
template {
|
||||
metadata {}
|
||||
spec {
|
||||
affinity {
|
||||
node_affinity {
|
||||
required_during_scheduling_ignored_during_execution {
|
||||
node_selector_term {
|
||||
match_expressions {
|
||||
key = "cloud.google.com/gke-nodepool"
|
||||
operator = "In"
|
||||
values = ["${google_container_node_pool.node_pool["europe_misc"].name}"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
container {
|
||||
name = "cli"
|
||||
image = "${var.coder_image_repo}:${var.coder_image_tag}"
|
||||
command = [
|
||||
"/opt/coder",
|
||||
"--verbose",
|
||||
"--url=${local.deployments.primary.url}",
|
||||
"--token=${trimspace(data.local_file.api_key.content)}",
|
||||
"exp",
|
||||
"scaletest",
|
||||
"create-workspaces",
|
||||
"--count=${local.scenarios[var.scenario].workspaces.count_per_deployment}",
|
||||
"--template=kubernetes-europe",
|
||||
"--concurrency=${local.scenarios[var.scenario].provisionerd.replicas}",
|
||||
"--no-cleanup"
|
||||
]
|
||||
}
|
||||
restart_policy = "Never"
|
||||
}
|
||||
}
|
||||
}
|
||||
wait_for_completion = true
|
||||
|
||||
timeouts {
|
||||
create = local.create_workspace_timeout
|
||||
}
|
||||
|
||||
depends_on = [kubernetes_job.push_template_europe]
|
||||
}
|
||||
|
||||
resource "kubernetes_job" "create_workspaces_asia" {
|
||||
provider = kubernetes.asia
|
||||
|
||||
metadata {
|
||||
name = "${var.name}-create-workspaces"
|
||||
namespace = kubernetes_namespace.coder_asia.metadata.0.name
|
||||
labels = {
|
||||
"app.kubernetes.io/name" = "${var.name}-create-workspaces"
|
||||
}
|
||||
}
|
||||
spec {
|
||||
completions = 1
|
||||
backoff_limit = 0
|
||||
template {
|
||||
metadata {}
|
||||
spec {
|
||||
affinity {
|
||||
node_affinity {
|
||||
required_during_scheduling_ignored_during_execution {
|
||||
node_selector_term {
|
||||
match_expressions {
|
||||
key = "cloud.google.com/gke-nodepool"
|
||||
operator = "In"
|
||||
values = ["${google_container_node_pool.node_pool["asia_misc"].name}"]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
container {
|
||||
name = "cli"
|
||||
image = "${var.coder_image_repo}:${var.coder_image_tag}"
|
||||
command = [
|
||||
"/opt/coder",
|
||||
"--verbose",
|
||||
"--url=${local.deployments.primary.url}",
|
||||
"--token=${trimspace(data.local_file.api_key.content)}",
|
||||
"exp",
|
||||
"scaletest",
|
||||
"create-workspaces",
|
||||
"--count=${local.scenarios[var.scenario].workspaces.count_per_deployment}",
|
||||
"--template=kubernetes-asia",
|
||||
"--concurrency=${local.scenarios[var.scenario].provisionerd.replicas}",
|
||||
"--no-cleanup"
|
||||
]
|
||||
}
|
||||
restart_policy = "Never"
|
||||
}
|
||||
}
|
||||
}
|
||||
wait_for_completion = true
|
||||
|
||||
timeouts {
|
||||
create = local.create_workspace_timeout
|
||||
}
|
||||
|
||||
depends_on = [kubernetes_job.push_template_asia]
|
||||
}
|
Reference in New Issue
Block a user