ujunのブログ

KubernetesクラスタにHetznerCloudVolumes CSIをデプロイ

KubernetesクラスタをHetznerCloudに秒で作ることができるようになったので、次は、Hetznerの永続ボリュームをプロビジョニングできるようにします。

github.com

Secretの登録

HetznerのAPI Tokenを払い出して以下のようなsecretリソースのマニフェストを書いてapplyします。

apiVersion: v1
kind: Secret
metadata:
  name: hcloud-csi
  namespace: kube-system
stringData:
token: Token

Kubernetesバージョンに適合したCSIドライバーのデプロイ

対象のKubernetesクラスタのバージョンにあったCSIドライバーをデプロイします (適合票はGithubリポジトリ参照)

kubectl apply -f https://raw.githubusercontent.com/hetznercloud/csi-driver/v1.5.1/deploy/kubernetes/hcloud-csi.yml

StorageClassが作成されたことを確認。

# kubectl get sc
NAME                       PROVISIONER         RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
hcloud-volumes (default)   csi.hetzner.cloud   Delete          WaitForFirstConsumer   true                   2m4s

Podを作成

作成したStorageClassを使ってVolumeをプロビジョニングしてみる。そのボリュームをテスト用のPodにアタッチ。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: csi-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: hcloud-volumes
---
kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app
spec:
  containers:
    - name: my-frontend
      image: busybox
      volumeMounts:
      - mountPath: "/data"
        name: my-csi-volume
      command: [ "sleep", "1000000" ]
  volumes:
    - name: my-csi-volume
      persistentVolumeClaim:
        claimName: csi-pvc

HetznerCloudのコンソールからストレージが作成されたことが確認できます。

f:id:ujun:20201219123812p:plain
hetzner_volume

Podから状況を見ると/dataにマウントされているのがわかります。

kubectl exec -it my-csi-app -- df -h
Filesystem                Size      Used Available Use% Mounted on
overlay                  37.5G      4.8G     31.2G  13% /
tmpfs                    64.0M         0     64.0M   0% /dev
tmpfs                     1.9G         0      1.9G   0% /sys/fs/cgroup
/dev/disk/by-id/scsi-0HC_Volume_8597277
                          9.8G     36.0M      9.7G   0% /data
/dev/sda1                37.5G      4.8G     31.2G  13% /dev/termination-log
/dev/sda1                37.5G      4.8G     31.2G  13% /etc/resolv.conf
/dev/sda1                37.5G      4.8G     31.2G  13% /etc/hostname
/dev/sda1                37.5G      4.8G     31.2G  13% /etc/hosts
shm                      64.0M         0     64.0M   0% /dev/shm
tmpfs                     1.9G     12.0K      1.9G   0% /var/run/secrets/kubernetes.io/serviceaccount
tmpfs                     1.9G         0      1.9G   0% /proc/acpi
tmpfs                    64.0M         0     64.0M   0% /proc/kcore
tmpfs                    64.0M         0     64.0M   0% /proc/keys
tmpfs                    64.0M         0     64.0M   0% /proc/timer_list
tmpfs                    64.0M         0     64.0M   0% /proc/timer_stats
tmpfs                    64.0M         0     64.0M   0% /proc/sched_debug
tmpfs                     1.9G         0      1.9G   0% /proc/scsi
tmpfs                     1.9G         0      1.9G   0% /sys/firmware

以上