From 43bcd2ab98376dbfa22eab55541bba5283cbbfe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Mart=C3=ADnez=20Rinc=C3=B3n?= Date: Wed, 11 Dec 2024 22:29:27 +0100 Subject: [PATCH 1/3] feat: add support for specifying LoadBalancer class name --- helm/coder/templates/service.yaml | 3 +++ helm/coder/values.yaml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/helm/coder/templates/service.yaml b/helm/coder/templates/service.yaml index 1881f992a695e..97259c4b15180 100644 --- a/helm/coder/templates/service.yaml +++ b/helm/coder/templates/service.yaml @@ -35,6 +35,9 @@ spec: {{- with .Values.coder.service.externalTrafficPolicy }} externalTrafficPolicy: {{ . | quote }} {{- end }} + {{- with .Values.coder.service.className }} + loadBalancerClass: {{ . | quote }} + {{- end }} {{- end }} selector: {{- include "coder.selectorLabels" . | nindent 4 }} diff --git a/helm/coder/values.yaml b/helm/coder/values.yaml index 75c7dda7742ba..24b226a93b88a 100644 --- a/helm/coder/values.yaml +++ b/helm/coder/values.yaml @@ -281,6 +281,9 @@ coder: # your cloud and specify it here in production to avoid accidental IP # address changes. loadBalancerIP: "" + # coder.service.className -- The class name of the LoadBalancer. See: + # https://kubernetes.io/docs/concepts/services-networking/service/#load-balancer-class + className: "" # coder.service.annotations -- The service annotations. See: # https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer annotations: {} From a6515ff0530a25adddd2431347e883ea570bff4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Mart=C3=ADnez=20Rinc=C3=B3n?= Date: Thu, 12 Dec 2024 18:34:23 +0100 Subject: [PATCH 2/3] chore: rename className to loadBalancerClass --- helm/coder/templates/service.yaml | 2 +- helm/coder/values.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/helm/coder/templates/service.yaml b/helm/coder/templates/service.yaml index 97259c4b15180..5bf78d04095f6 100644 --- a/helm/coder/templates/service.yaml +++ b/helm/coder/templates/service.yaml @@ -35,7 +35,7 @@ spec: {{- with .Values.coder.service.externalTrafficPolicy }} externalTrafficPolicy: {{ . | quote }} {{- end }} - {{- with .Values.coder.service.className }} + {{- with .Values.coder.service.loadBalancerClass }} loadBalancerClass: {{ . | quote }} {{- end }} {{- end }} diff --git a/helm/coder/values.yaml b/helm/coder/values.yaml index 24b226a93b88a..0b6e7182a4c8f 100644 --- a/helm/coder/values.yaml +++ b/helm/coder/values.yaml @@ -281,9 +281,9 @@ coder: # your cloud and specify it here in production to avoid accidental IP # address changes. loadBalancerIP: "" - # coder.service.className -- The class name of the LoadBalancer. See: + # coder.service.loadBalancerClass -- The class name of the LoadBalancer. See: # https://kubernetes.io/docs/concepts/services-networking/service/#load-balancer-class - className: "" + loadBalancerClass: "" # coder.service.annotations -- The service annotations. See: # https://kubernetes.io/docs/concepts/services-networking/service/#internal-load-balancer annotations: {} From 408d1509bcf610603d35fc6ab9b494b81d7707b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Mart=C3=ADnez=20Rinc=C3=B3n?= Date: Thu, 12 Dec 2024 18:48:22 +0100 Subject: [PATCH 3/3] test: cover coder.service.loadBalancerClass --- helm/coder/tests/chart_test.go | 4 + .../testdata/svc_loadbalancer_class.golden | 191 ++++++++++++++++++ .../testdata/svc_loadbalancer_class.yaml | 6 + 3 files changed, 201 insertions(+) create mode 100644 helm/coder/tests/testdata/svc_loadbalancer_class.golden create mode 100644 helm/coder/tests/testdata/svc_loadbalancer_class.yaml diff --git a/helm/coder/tests/chart_test.go b/helm/coder/tests/chart_test.go index 76436f37d58e8..34513d375e90d 100644 --- a/helm/coder/tests/chart_test.go +++ b/helm/coder/tests/chart_test.go @@ -96,6 +96,10 @@ var testCases = []testCase{ name: "topology", expectedError: "", }, + { + name: "svc_loadbalancer_class", + expectedError: "", + }, } type testCase struct { diff --git a/helm/coder/tests/testdata/svc_loadbalancer_class.golden b/helm/coder/tests/testdata/svc_loadbalancer_class.golden new file mode 100644 index 0000000000000..f3d3182910c98 --- /dev/null +++ b/helm/coder/tests/testdata/svc_loadbalancer_class.golden @@ -0,0 +1,191 @@ +--- +# Source: coder/templates/coder.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + annotations: {} + labels: + app.kubernetes.io/instance: release-name + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: coder + app.kubernetes.io/part-of: coder + app.kubernetes.io/version: 0.1.0 + helm.sh/chart: coder-0.1.0 + name: coder +--- +# Source: coder/templates/rbac.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: coder-workspace-perms +rules: + - apiGroups: [""] + resources: ["pods"] + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch + - apiGroups: [""] + resources: ["persistentvolumeclaims"] + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch + - apiGroups: + - apps + resources: + - deployments + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +--- +# Source: coder/templates/rbac.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: "coder" +subjects: + - kind: ServiceAccount + name: "coder" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: coder-workspace-perms +--- +# Source: coder/templates/service.yaml +apiVersion: v1 +kind: Service +metadata: + name: coder + labels: + helm.sh/chart: coder-0.1.0 + app.kubernetes.io/name: coder + app.kubernetes.io/instance: release-name + app.kubernetes.io/part-of: coder + app.kubernetes.io/version: "0.1.0" + app.kubernetes.io/managed-by: Helm + annotations: + {} +spec: + type: LoadBalancer + sessionAffinity: None + ports: + - name: "http" + port: 80 + targetPort: "http" + protocol: TCP + + externalTrafficPolicy: "Cluster" + loadBalancerClass: "test" + selector: + app.kubernetes.io/name: coder + app.kubernetes.io/instance: release-name +--- +# Source: coder/templates/coder.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: {} + labels: + app.kubernetes.io/instance: release-name + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: coder + app.kubernetes.io/part-of: coder + app.kubernetes.io/version: 0.1.0 + helm.sh/chart: coder-0.1.0 + name: coder +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/instance: release-name + app.kubernetes.io/name: coder + template: + metadata: + annotations: {} + labels: + app.kubernetes.io/instance: release-name + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: coder + app.kubernetes.io/part-of: coder + app.kubernetes.io/version: 0.1.0 + helm.sh/chart: coder-0.1.0 + spec: + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchExpressions: + - key: app.kubernetes.io/instance + operator: In + values: + - coder + topologyKey: kubernetes.io/hostname + weight: 1 + containers: + - args: + - server + command: + - /opt/coder + env: + - name: CODER_HTTP_ADDRESS + value: 0.0.0.0:8080 + - name: CODER_PROMETHEUS_ADDRESS + value: 0.0.0.0:2112 + - name: CODER_ACCESS_URL + value: http://coder.default.svc.cluster.local + - name: KUBE_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: CODER_DERP_SERVER_RELAY_URL + value: http://$(KUBE_POD_IP):8080 + image: ghcr.io/coder/coder:latest + imagePullPolicy: IfNotPresent + lifecycle: {} + livenessProbe: + httpGet: + path: /healthz + port: http + scheme: HTTP + name: coder + ports: + - containerPort: 8080 + name: http + protocol: TCP + readinessProbe: + httpGet: + path: /healthz + port: http + scheme: HTTP + resources: {} + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: null + runAsGroup: 1000 + runAsNonRoot: true + runAsUser: 1000 + seccompProfile: + type: RuntimeDefault + volumeMounts: [] + restartPolicy: Always + serviceAccountName: coder + terminationGracePeriodSeconds: 60 + volumes: [] diff --git a/helm/coder/tests/testdata/svc_loadbalancer_class.yaml b/helm/coder/tests/testdata/svc_loadbalancer_class.yaml new file mode 100644 index 0000000000000..84fb29fc247c3 --- /dev/null +++ b/helm/coder/tests/testdata/svc_loadbalancer_class.yaml @@ -0,0 +1,6 @@ +coder: + image: + tag: latest + + service: + loadBalancerClass: test