Coder provides "self-hosted
developer workspaces" which includes things like the code-server for web-based VSCode instances for your development teams.
Deploying the Coder suite for this demonstration to Kubernetes just relies on a single
Pod (this can easily be made into a
Deployment or some other replication controller, if you have reliable distributed storage to back the
coder-volume data) to configure before we expose the service:
apiVersion: v1 kind: Pod metadata: name: coder namespace: coder labels: app: coder spec: containers: - name: coder image: codercom/coder:1.29.0 securityContext: privileged: true runAsUser: 0 ports: - name: coder-http containerPort: 7080 volumeMounts: - mountPath: /data name: coder-volume - mountPath: /var/run/docker.sock name: docker-socket volumes: - name: coder-volume hostPath: path: /opt/coder-data type: Directory - name: docker-socket hostPath: path: /var/run/docker.sock type: Socket
Keep in mind there are a few things gojng on here: You need to mount the host system's Docker socket file (so it can launch other container workloads), and also needs a data volume so you cna persist data. I used a hostPath volume here for demonstration purposes, but I recommend a PersistentVolume for any kind of production use.
To expose the UI, I typically create a
Service and then
Ingress (rather than through a
--- apiVersion: v1 kind: Service metadata: name: coder-service namespace: coder spec: selector: app: coder ports: - protocol: TCP port: 80 targetPort: 7080 name: "http-app" --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: coder-ingress namespace: coder spec: rules: - host: "coder.kube.c00lz0ne.internal" http: paths: - path: / pathType: Prefix backend: service: name: coder-service port: number: 80
From here, head to your above hostname, and you can access the Coder UI to complete your environment's administrative setup.