diff --git a/examples/templates/kubernetes/main.tf b/examples/templates/kubernetes/main.tf index bc6de7913e2c8..9f1ca5b9be297 100644 --- a/examples/templates/kubernetes/main.tf +++ b/examples/templates/kubernetes/main.tf @@ -89,6 +89,17 @@ resource "kubernetes_persistent_volume_claim" "home" { metadata { name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}-home" namespace = var.namespace + labels = { + "app.kubernetes.io/name" = "coder-pvc" + "app.kubernetes.io/instance" = "coder-pvc-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/part-of" = "coder" + // Coder specific labels. + "com.coder.resource" = "true" + "com.coder.workspace.id" = data.coder_workspace.me.id + "com.coder.workspace.name" = data.coder_workspace.me.name + "com.coder.user.id" = data.coder_workspace.me.owner_id + "com.coder.user.username" = data.coder_workspace.me.owner + } } wait_until_bound = false spec { @@ -106,6 +117,17 @@ resource "kubernetes_pod" "main" { metadata { name = "coder-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" namespace = var.namespace + labels = { + "app.kubernetes.io/name" = "coder-workspace" + "app.kubernetes.io/instance" = "coder-workspace-${lower(data.coder_workspace.me.owner)}-${lower(data.coder_workspace.me.name)}" + "app.kubernetes.io/part-of" = "coder" + // Coder specific labels. + "com.coder.resource" = "true" + "com.coder.workspace.id" = data.coder_workspace.me.id + "com.coder.workspace.name" = data.coder_workspace.me.name + "com.coder.user.id" = data.coder_workspace.me.owner_id + "com.coder.user.username" = data.coder_workspace.me.owner + } } spec { security_context { @@ -137,5 +159,26 @@ resource "kubernetes_pod" "main" { read_only = false } } + + + affinity { + pod_anti_affinity { + // This affinity attempts to spread out all workspace pods evenly across + // nodes. + preferred_during_scheduling_ignored_during_execution { + weight = 1 + pod_affinity_term { + topology_key = "kubernetes.io/hostname" + label_selector { + match_expressions { + key = "app.kubernetes.io/name" + operator = "In" + values = ["coder-workspace"] + } + } + } + } + } + } } } diff --git a/helm/templates/_helpers.tpl b/helm/templates/_helpers.tpl index f92f798df3211..8b96852f8d7d5 100644 --- a/helm/templates/_helpers.tpl +++ b/helm/templates/_helpers.tpl @@ -18,6 +18,7 @@ Selector labels {{- define "coder.selectorLabels" -}} app.kubernetes.io/name: {{ include "coder.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/part-of: {{ include "coder.name" . }} {{- end }} {{/*