Skip to content

feat: add new scaletest infrastructure #15573

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 24 commits into from
Dec 12, 2024
Prev Previous commit
Next Next commit
tpl
  • Loading branch information
f0ssel committed Dec 11, 2024
commit 769b5d311e7ee1a86983f8879605c3643357ec09
105 changes: 105 additions & 0 deletions scaletest/terraform/action/coder_helm_values.tftpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
coder:
workspaceProxy: ${workspace_proxy}
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "cloud.google.com/gke-nodepool"
operator: "In"
values: ["${node_pool}"]
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: "kubernetes.io/hostname"
labelSelector:
matchExpressions:
- key: "app.kubernetes.io/instance"
operator: "In"
values: ["${release_name}"]
env:
%{~ if workspace_proxy ~}
- name: "CODER_ACCESS_URL"
value: "${access_url}"
- name: CODER_PRIMARY_ACCESS_URL
value: "${primary_url}"
- name: CODER_PROXY_SESSION_TOKEN
valueFrom:
secretKeyRef:
key: token
name: "${proxy_token}"
%{~ endif ~}
%{~ if provisionerd ~}
- name: "CODER_URL"
value: "${access_url}"
- name: "CODER_PROVISIONERD_TAGS"
value: "scope=organization"
- name: "CODER_CONFIG_DIR"
value: "/tmp/config"
%{~ endif ~}
%{~ if !workspace_proxy && !provisionerd ~}
- name: "CODER_ACCESS_URL"
value: "${access_url}"
- name: "CODER_PG_CONNECTION_URL"
valueFrom:
secretKeyRef:
name: "${db_secret}"
key: url
- name: "CODER_PROVISIONER_DAEMONS"
value: "0"
- name: CODER_PROVISIONER_DAEMON_PSK
valueFrom:
secretKeyRef:
key: psk
name: "${provisionerd_psk}"
- name: "CODER_PROMETHEUS_COLLECT_AGENT_STATS"
value: "true"
- name: "CODER_PROMETHEUS_COLLECT_DB_METRICS"
value: "true"
- name: "CODER_PPROF_ENABLE"
value: "true"
%{~ endif ~}
- name: "CODER_CACHE_DIRECTORY"
value: "/tmp/coder"
- name: "CODER_TELEMETRY_ENABLE"
value: "false"
- name: "CODER_LOGGING_HUMAN"
value: "/dev/null"
- name: "CODER_LOGGING_STACKDRIVER"
value: "/dev/stderr"
- name: "CODER_PROMETHEUS_ENABLE"
value: "true"
- name: "CODER_VERBOSE"
value: "true"
- name: "CODER_EXPERIMENTS"
value: "${experiments}"
- name: "CODER_DANGEROUS_DISABLE_RATE_LIMITS"
value: "true"
image:
repo: ${image_repo}
tag: ${image_tag}
replicaCount: "${replicas}"
resources:
requests:
cpu: "${cpu_request}"
memory: "${mem_request}"
limits:
cpu: "${cpu_limit}"
memory: "${mem_limit}"
securityContext:
readOnlyRootFilesystem: true
%{~ if !provisionerd ~}
service:
enable: true
sessionAffinity: None
loadBalancerIP: "${ip_address}"
%{~ endif ~}
volumeMounts:
- mountPath: "/tmp"
name: cache
readOnly: false
volumes:
- emptyDir:
sizeLimit: 1024Mi
name: cache
190 changes: 40 additions & 150 deletions scaletest/terraform/action/k8s_coder_asia.tf
Original file line number Diff line number Diff line change
Expand Up @@ -51,94 +51,26 @@ resource "helm_release" "coder_asia" {
name = local.coder_release_name
version = var.coder_chart_version
namespace = kubernetes_namespace.coder_asia.metadata.0.name
values = [<<EOF
coder:
workspaceProxy: true
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "cloud.google.com/gke-nodepool"
operator: "In"
values: ["${google_container_node_pool.node_pool["asia_coder"].name}"]
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: "kubernetes.io/hostname"
labelSelector:
matchExpressions:
- key: "app.kubernetes.io/instance"
operator: "In"
values: ["${local.coder_release_name}"]
env:
- name: CODER_PRIMARY_ACCESS_URL
value: "${local.deployments.primary.url}"
- name: CODER_PROXY_SESSION_TOKEN
valueFrom:
secretKeyRef:
key: token
name: "${kubernetes_secret.proxy_token_asia.metadata.0.name}"
- name: "CODER_ACCESS_URL"
value: "${local.deployments.asia.url}"
- name: "CODER_CACHE_DIRECTORY"
value: "/tmp/coder"
- name: "CODER_TELEMETRY_ENABLE"
value: "false"
- name: "CODER_LOGGING_HUMAN"
value: "/dev/null"
- name: "CODER_LOGGING_STACKDRIVER"
value: "/dev/stderr"
- name: "CODER_PPROF_ENABLE"
value: "true"
- name: "CODER_PROMETHEUS_ENABLE"
value: "true"
- name: "CODER_PROMETHEUS_COLLECT_AGENT_STATS"
value: "true"
- name: "CODER_PROMETHEUS_COLLECT_DB_METRICS"
value: "true"
- name: "CODER_VERBOSE"
value: "true"
- name: "CODER_EXPERIMENTS"
value: "${var.coder_experiments}"
- name: "CODER_DANGEROUS_DISABLE_RATE_LIMITS"
value: "true"
# Disabling built-in provisioner daemons
- name: "CODER_PROVISIONER_DAEMONS"
value: "0"
- name: CODER_PROVISIONER_DAEMON_PSK
valueFrom:
secretKeyRef:
key: psk
name: "${kubernetes_secret.provisionerd_psk_asia.metadata.0.name}"
image:
repo: ${var.coder_image_repo}
tag: ${var.coder_image_tag}
replicaCount: "${local.scenarios[var.scenario].coder.replicas}"
resources:
requests:
cpu: "${local.scenarios[var.scenario].coder.cpu_request}"
memory: "${local.scenarios[var.scenario].coder.mem_request}"
limits:
cpu: "${local.scenarios[var.scenario].coder.cpu_limit}"
memory: "${local.scenarios[var.scenario].coder.mem_limit}"
securityContext:
readOnlyRootFilesystem: true
service:
enable: true
sessionAffinity: None
loadBalancerIP: "${google_compute_address.coder["asia"].address}"
volumeMounts:
- mountPath: "/tmp"
name: cache
readOnly: false
volumes:
- emptyDir:
sizeLimit: 1024Mi
name: cache
EOF
]
values = [templatefile("${path.module}/coder_helm_values.tftpl", {
workspace_proxy = true,
provisionerd = false,
primary_url = local.deployments.primary.url,
proxy_token = kubernetes_secret.proxy_token_asia.metadata.0.name,
db_secret = null,
ip_address = google_compute_address.coder["asia"].address,
provisionerd_psk = null,
access_url = local.deployments.asia.url,
node_pool = google_container_node_pool.node_pool["asia_coder"].name,
release_name = local.coder_release_name,
experiments = var.coder_experiments,
image_repo = var.coder_image_repo,
image_tag = var.coder_image_tag,
replicas = local.scenarios[var.scenario].coder.replicas,
cpu_request = local.scenarios[var.scenario].coder.cpu_request,
mem_request = local.scenarios[var.scenario].coder.mem_request,
cpu_limit = local.scenarios[var.scenario].coder.cpu_limit,
mem_limit = local.scenarios[var.scenario].coder.mem_limit,
})]
}

resource "helm_release" "provisionerd_asia" {
Expand All @@ -149,66 +81,24 @@ resource "helm_release" "provisionerd_asia" {
name = local.provisionerd_release_name
version = var.provisionerd_chart_version
namespace = kubernetes_namespace.coder_asia.metadata.0.name
values = [<<EOF
coder:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "cloud.google.com/gke-nodepool"
operator: "In"
values: ["${google_container_node_pool.node_pool["asia_coder"].name}"]
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: "kubernetes.io/hostname"
labelSelector:
matchExpressions:
- key: "app.kubernetes.io/instance"
operator: "In"
values: ["${local.coder_release_name}"]
env:
- name: "CODER_URL"
value: "${local.deployments.primary.url}"
- name: "CODER_VERBOSE"
value: "true"
- name: "CODER_CONFIG_DIR"
value: "/tmp/config"
- name: "CODER_CACHE_DIRECTORY"
value: "/tmp/coder"
- name: "CODER_TELEMETRY_ENABLE"
value: "false"
- name: "CODER_LOGGING_HUMAN"
value: "/dev/null"
- name: "CODER_LOGGING_STACKDRIVER"
value: "/dev/stderr"
- name: "CODER_PROMETHEUS_ENABLE"
value: "true"
- name: "CODER_PROVISIONERD_TAGS"
value: "scope=organization"
image:
repo: ${var.provisionerd_image_repo}
tag: ${var.provisionerd_image_tag}
replicaCount: "${local.scenarios[var.scenario].provisionerd.replicas}"
resources:
requests:
cpu: "${local.scenarios[var.scenario].provisionerd.cpu_request}"
memory: "${local.scenarios[var.scenario].provisionerd.mem_request}"
limits:
cpu: "${local.scenarios[var.scenario].provisionerd.cpu_limit}"
memory: "${local.scenarios[var.scenario].provisionerd.mem_limit}"
securityContext:
readOnlyRootFilesystem: true
volumeMounts:
- mountPath: "/tmp"
name: cache
readOnly: false
volumes:
- emptyDir:
sizeLimit: 1024Mi
name: cache
EOF
]
values = [templatefile("${path.module}/coder_helm_values.tftpl", {
workspace_proxy = false,
provisionerd = true,
primary_url = null,
proxy_token = null,
db_secret = null,
ip_address = null,
provisionerd_psk = kubernetes_secret.provisionerd_psk_asia.metadata.0.name,
access_url = local.deployments.primary.url,
node_pool = google_container_node_pool.node_pool["asia_coder"].name,
release_name = local.coder_release_name,
experiments = var.coder_experiments,
image_repo = var.coder_image_repo,
image_tag = var.coder_image_tag,
replicas = local.scenarios[var.scenario].provisionerd.replicas,
cpu_request = local.scenarios[var.scenario].provisionerd.cpu_request,
mem_request = local.scenarios[var.scenario].provisionerd.mem_request,
cpu_limit = local.scenarios[var.scenario].provisionerd.cpu_limit,
mem_limit = local.scenarios[var.scenario].provisionerd.mem_limit,
})]
}
Loading