TL;DR
- 自宅鯖の Kubernetes (シングルノード) 上に code-server をデプロイした
- Ingress (nginx-ingress-controller) を使用して外部からもアクセスできるように
- 外部アクセスでコンテナ <-> ホスト間のファイルの編集が可能になった
環境
- Host OS: Gentoo Linux (5.15.26-gentoo)
- Kubernetes Engine: RKE2 v1.22.7-rke2r2
- Helm: v3.8.0
- code-server: v4.2.0
- nginx-ingress-controller は RKE2 にてすでにデプロイされているので, それを使用.
- 別の k8s engine 使う場合はデプロイは必要になるかもしれません.
ディレクトリ構造
(一部省略してます)
. (/home/kash) ├── manifests │ ├── code-server │ │ ├── helm-charts ...
code-server では, ~/manifests
以下を編集できるようになっています.
また, code-server/helm-charts
については後述します.
内容
code-server デプロイまで
ここは code-server に載ってる Helm でのインストール方法*1 を少し変えたものとなります.
また, home
という namespace で今回はデプロイしています.
$ git clone https://github.com/coder/code-server $ mv code-server/ci/helm-chart ./manifests $ cd manifests
code-server の chart を一部変更するために以下の YAML ファイルを作成 (overwrite.yaml):
ingress: enabled: true ingressClassName: "nginx" hosts: - host: <ホスト名> paths: - / resources: requests: cpu: 100m memory: 1000Mi extraVolumeMounts: - name: manifests mountPath: /k8s/manifests existingClaim: code-server-manifests
上記の YAML ファイルでは, Ingress の有効化及びホストやパスの設定, リソースの requests の決定, 追加でマウントする Volume (~/manifests
) を指定しています.
code-server の chart は実質完成したので, 次に, PersistentVolume, PersistentVolumeClaim のマニフェストを作成します.
pv.yaml:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: code-server provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer parameters: type: pd-standard --- apiVersion: v1 kind: PersistentVolume metadata: name: code-server spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce storageClassName: code-server claimRef: name: code-server namespace: home hostPath: path: "/k8s_mnt/code-server" --- apiVersion: v1 kind: PersistentVolume metadata: name: code-server-manifests spec: capacity: storage: 1Gi accessModes: - ReadWriteOnce storageClassName: code-server claimRef: name: code-server-manifests namespace: home hostPath: path: "/k8s_mnt/code-server-manifests"
StorageClass では, 特に動的プロビジョンするわけではないので, provisioner
は kubernetes.io/no-provisioner
を指定し, parameters.type
も SSD というわけではないので pd-standard
です.
PersistentVolume では, デフォルトと Volume と追加の Volume が必要なので二つの PersistentVolume を作成しています.
claimRef
で home/code-server
と home/code-server-manifests
という形で Claim できるようにしています.
hostPath
では, /k8s_mnt/
上でマウントできるようにしています.
pvc.yaml:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: code-server-manifests namespace: home labels: app.kubernetes.io/name: code-server-manifests spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: "code-server"
PersistentVolumeClaim において, home/code-server
はデフォルトの chart で定義されるので, home/code-server-manifests
のみの PersistentVolumeClaim の作成となります.
ここは特に言うことはないです.
以上が完了したら,
$ kubectl apply -f pv.yaml -f pvc.yaml
で, PersistentVolume, PersistentVolumeClaim を作成します. そのあと,
$ helm upgrade --install code-server helm-chart -f overwrite.yaml
で, code-server をデプロイ. パスワードの表示のコマンドが出るので, 打って出力をメモします.
公開
$ kubectl describe ingress -n home code-server
にて, Backend の ClusterIP が降られていることが確認できたら公開できるので, 指定したホスト名を自宅鯖に向けることで公開が完了し, ホスト名で code-server にアクセスできます. ログインには, 先ほどのパスワードが必要なのでそれでログインできます.