Kubernetes Service Hatoba:増設ディスクCSIドライバーで永続ボリュームを使用する
増設ディスクCSIドライバーで永続ボリュームを使用する方法を説明します。
ステップ1:クラスターへ増設ディスクCSIドライバーを導入
Kubernetesクラスターの増設ディスクCSIドライバーを設定します。なお、クラスター作成時など、既に「増設ディスクCSIドライバー」の項目を「有効」に設定済みの場合、この操作は不要です。
クラスターの一覧画面で増設ディスクCSIドライバー設定をしたいクラスターを選択し、「選択したクラスターの操作」から「設定変更」を選択します。

「01 基本設定」の「増設ディスクCSIドライバー」の項目を「有効」に設定します。

「02 確認」タブで入力内容を確認し、「変更する」をクリックします。

ステップ2:増設ディスクCSIドライバーの設定
増設ディスクCSIドライバーに必要な各種yamlを作成します。
Secretを作成するために、下記のような
secret.yamlを作成します。apiVersion: v1 kind: Secret metadata: name: nifcloud-secret namespace: kube-system stringData: NIFCLOUD_ACCESS_KEY_ID: <NIFCLOUD Access Key ID> NIFCLOUD_SECRET_ACCESS_KEY: <NIFCLOUD Secret Access Key>作成した
secret.yamlを適用します。$ kubectl apply -f secret.yaml secret/nifcloud-secret configuredStorageClassを作成するために、下記のような
storageclass.yamlを作成します。使用するディスクタイプは、
type:で指定できます。設定可能な値はCreateDisk API仕様をご確認ください。ニフクラAPI (Kubernetes Service Hatoba: CreateDisk)
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: hatoba-disk-high-speed-flash-a annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: disk.csi.hatoba.nifcloud.com volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fstype: ext4 type: high-speed-flash-a allowVolumeExpansion: true作成した
storageclass.yamlを適用します。$ kubectl apply -f storageclass.yaml storageclass.storage.k8s.io/hatoba-disk-high-speed-flash-a created下記で適用したStorageClassを確認します。
$ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE hatoba-disk-high-speed-flash-a (default) disk.csi.hatoba.nifcloud.com Delete WaitForFirstConsumer true 1m
永続ボリュームの作成
今回はStatefulSetを作成し、増設ディスクCSIドライバーを用いて、ディスクがマウントされるサンプルアプリケーションを作成します。
永続ボリュームを使うStatefulSetのyaml作成
下記のような
statefulset.yamlを作成します。StatefulSetのvolumeClaimTemplates:にて、作成済みのStorageClassを指定します。また、storage:でディスクサイズを指定しています。storage:に設定可能な値はCreateDisk API仕様をご確認ください。ニフクラAPI (Kubernetes Service Hatoba: CreateDisk)
apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: k8s.gcr.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] storageClassName: hatoba-disk-high-speed-flash-a resources: requests: storage: 100Gi作成した
statefulset.ymlを適用します。適用すると、設定内容に従ってディスクが作成されます。ディスクの作成に伴う料金はクラスターとは別に発生するのでご注意ください。
$ kubectl apply -f statefulset.yaml statefulset.apps/web configured下記で作成したディスクの情報が確認できます。
$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-5fdeaba2-943f-41b7-962a-189611e4c48e 100Gi RWO Delete Bound default/www-web-0 hatoba-disk-high-speed-flash-a 10m pvc-c0e1197c-87f6-42bb-bd0e-eff238b41025 100Gi RWO Delete Bound default/www-web-1 hatoba-disk-high-speed-flash-a 7m54s作成したPodにアクセスすると、指定したパスにディスクがマウントされてることが確認できます。
$ kubectl exec -it web-0 -- df -h Filesystem Size Used Avail Use% Mounted on overlay 27G 4.2G 22G 17% / tmpfs 64M 0 64M 0% /dev tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm /dev/sda4 27G 4.2G 22G 17% /etc/hosts /dev/sdb 98G 61M 98G 1% /usr/share/nginx/html tmpfs 3.5G 12K 3.5G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 2.0G 0 2.0G 0% /proc/acpi tmpfs 2.0G 0 2.0G 0% /proc/scsi tmpfs 2.0G 0 2.0G 0% /sys/firmware


