code-server-operator は、coder/code-server を Kubernetes 上で管理するための Operator です。 同じ環境が複数台必要なとき、この Operator を使うことで簡単にデプロイすることができます。
CodeServerリソースを作成することで、Deployment、Service、Ingress、Secret、PVC が作成され、code-server がデプロイされます。CodeServerDeploymentリソースを作成することで、spec.replicasに設定した数だけCodeServerリソースが作成され、複数の code-server をデプロイすることができます。
helm repo add jetstack https://charts.jetstack.io helm repo update helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=true
helm repo add code-server-operator https://walnuts1018.github.io/code-server-operator helm repo update helm install code-server-operator code-server-operator/code-server-operator --set fullnameOverride=code-server-operator
apiVersion: cs.walnuts.dev/v1alpha2 kind: CodeServerDeployment metadata: labels: app.kubernetes.io/name: codebox name: test spec: replicas: 3 template: spec: storageSize: 3Gi storageClassName: local-path initPlugins: git: repourl: "github.com/walnuts1018/http-dump" branch: "master" copyDefaultConfig: {} copyHome: {} envs: - name: LANGUAGE_DEFAULT value: "ja" image: "ghcr.io/coder/code-server:4.89.1" domain: "walnuts.dev" ingressClassName: "nginx"
type CodeServerSpec struct { // Specifies the storage size that will be used for code server // +kubebuilder:validation:Pattern="^([+-]?[0-9.]+)([eEinumkKMGTP]*[-+]?[0-9]*)$" // +kubebuilder:default="1Gi" StorageSize string `json:"storageSize,omitempty"` // Specifies the storage class name for persistent volume claim StorageClassName string `json:"storageClassName,omitempty"` // Specifies the additional annotations for persistent volume claim StorageAnnotations map[string]string `json:"storageAnnotations,omitempty"` // VolumeName specifies the volume name for persistent volume claim VolumeName string `json:"volumeName,omitempty"` // Specifies the resource requirements for code server pod. Resources corev1.ResourceRequirements `json:"resources,omitempty"` // Specifies the period before controller suspend the resources (delete all resources except data). SuspendAfterSeconds *int64 `json:"suspendAfterSeconds,omitempty"` // Specifies the domain for code server Domain string `json:"domain,omitempty"` // Specifies the envs Envs []corev1.EnvVar `json:"envs,omitempty"` // Specifies the image used to running code server // +kubebuilder:default="ghcr.io/coder/code-server:latest" Image string `json:"image,omitempty"` // Specifies the init plugins that will be running to finish before code server running. InitPlugins map[string]map[string]string `json:"initPlugins,omitempty"` // Specifies the node selector for scheduling. NodeSelector map[string]string `json:"nodeSelector,omitempty"` // Specifies the terminal container port for connection, defaults in 19200. // +kubebuilder:default=19200 ContainerPort int32 `json:"containerPort,omitempty"` // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"` IngressClassName string `json:"ingressClassName,omitempty"` // PublicProxyPorts specifies the public proxy ports for code server PublicProxyPorts []int32 `json:"publicProxyPorts,omitempty"` //InitCommand specifies the init commands that will be running to finish before code server running. InitCommand string `json:"initCommand,omitempty"` }
type gitPlugin struct { Repourl string `required:"true" json:"repourl"` Branch string `json:"branch"` }
type copyDefaultConfigPlugin struct { Image string `required:"true" json:"image"` }
type copyHomePlugin struct { Image string `required:"true" json:"image"` }
- go version v1.21.0+
- docker version 17.03+.
- kubectl version v1.11.3+.
- Access to a Kubernetes v1.11.3+ cluster.
- aqua version 2.25.1+
aqua i
make start tilt up --host 0.0.0.0
make stop