--- apiVersion: v1 kind: Namespace metadata: name: vscode --- apiVersion: v1 kind: ServiceAccount metadata: name: vscode-admin-sa namespace: vscode --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: vscode-admin-binding subjects: - kind: ServiceAccount name: vscode-admin-sa namespace: vscode roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: vscode-data-pvc namespace: vscode spec: accessModes: - ReadWriteMany storageClassName: nfs-storage resources: requests: storage: 10Gi --- apiVersion: v1 kind: Secret metadata: name: vscode-auth namespace: vscode type: Opaque data: vscode-password: YWRtaW4= --- apiVersion: v1 kind: ConfigMap metadata: name: vscode-config namespace: vscode data: CODE_SERVER_ARGS: "--auth password" --- apiVersion: apps/v1 kind: Deployment metadata: name: vscode namespace: vscode labels: app: vscode spec: replicas: 1 selector: matchLabels: app: vscode template: metadata: labels: app: vscode spec: serviceAccountName: vscode-admin-sa terminationGracePeriodSeconds: 60 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/control-plane operator: DoesNotExist securityContext: runAsUser: 1000 fsGroup: 1000 containers: - name: vscode image: codercom/code-server:latest ports: - containerPort: 8080 name: http - containerPort: 3000 name: node-dev - containerPort: 5000 name: dotnet-dev env: - name: PASSWORD valueFrom: secretKeyRef: name: vscode-auth key: vscode-password - name: ARGS valueFrom: configMapKeyRef: name: vscode-config key: CODE_SERVER_ARGS - name: ASPNETCORE_URLS value: "http://0.0.0.0:5000" volumeMounts: - name: vscode-storage mountPath: /home/coder volumes: - name: vscode-storage persistentVolumeClaim: claimName: vscode-data-pvc --- apiVersion: v1 kind: Service metadata: name: vscode-service namespace: vscode spec: type: ClusterIP selector: app: vscode ports: - name: http protocol: TCP port: 8080 targetPort: 8080 --- apiVersion: v1 kind: Service metadata: name: vscode-dev-service namespace: vscode spec: type: ClusterIP selector: app: vscode ports: - name: node-dev protocol: TCP port: 3000 targetPort: 3000 - name: dotnet-dev protocol: TCP port: 5000 targetPort: 5000 --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: vscode-web namespace: vscode spec: entryPoints: - websecure routes: - match: Host(`code.khongisa.co.za`) kind: Rule services: - name: vscode-service port: 8080 --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: vscode-node-uat namespace: vscode spec: entryPoints: - websecure routes: - match: Host(`node.uat.khongisa.co.za`) kind: Rule services: - name: vscode-dev-service port: 3000 --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute metadata: name: vscode-dotnet-uat namespace: vscode spec: entryPoints: - websecure routes: - match: Host(`dotnet.uat.khongisa.co.za`) kind: Rule services: - name: vscode-dev-service port: 5000