動的ボリュームを使用するには、StorageClass を手動で作成し、永続ボリュームクレーム (PVC) 内で storageClassName を使用してディスクタイプを指定する必要があります。

StorageClass の作成

  1. storage-class-csi.yaml ファイルを作成し、次のコードをファイルにコピーします。
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: alicloud-disk-ssd
    provisioner: diskplugin.csi.alibabacloud.com
    parameters:
      type: cloud_ssd
      regionid: cn-shenzhen
      zoneId: cn-shenzhen-b
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
  2. 次のコマンドを実行し、StorageClass を作成します。
    kubectl apply -f storage-class-csi.yaml
パラメーターの説明
  • provisioner: このパラメーターを diskplugin.csi.alibabacloud.com に設定します。これは、Alibaba Cloud ディスクのプロビジョナープラグインが StorageClass の作成に使用されることを示しています。
  • type: ディスクタイプ。 有効な値: cloud、cloud_efficiency、cloud_ssd、cloud_essd、および available。 このパラメーターを available に設定すると、システムはウルトラディスク、ESSD、SSD の順にディスクの作成を試み、ディスクが作成された時点で停止します。
  • regionid: 任意。 作成するディスクのリージョンです。
  • reclaimPolicy: ディスクを再要求するためのポリシー。 デフォルトは Delete です。 このパラメーターを Retain に設定することもできます。 高度なデータセキュリティが必要な場合は、誤って削除されないように、このパラメーターを Retain に設定することを推奨します。
  • zoneid: 任意。 作成するディスクのゾーンです。 このパラメーターで複数のゾーンを指定する場合、トポロジーモードで永続ボリューム (PV) を作成する必要があります。
  • encrypted: 任意。 ディスクを暗号化するかどうかを指定します。 デフォルトは false で、ディスクが暗号化されないことを示しています。

PVC と PV の作成

次のサンプル YAML ファイルは、動的ボリュームを使用するための PV の作成方法を示しています。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  - name: disk-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 25Gi
  storageClassName: "alicloud-disk-ssd"
storage: 作成するディスクのサイズ。 最小サイズは 20 GiBです。

デフォルトの StorageClasses:

マルチゾーンクラスターでは、StorageClass を手動で作成して、必要なディスクのゾーンを指定する必要があります。

デフォルトでは、次のタイプの StorageClasses が単一ゾーンクラスターで使用することができます。
  • alicloud-disk-efficiency: ウルトラディスク
  • alicloud-disk-ssd: SSD
  • alicloud-disk-essd: ESSD
  • alicloud-disk-available: このオプションは、高可用性を保証します。 システムは最初にウルトラディスクの作成を試みます。

    指定されたゾーンで使用可能なウルトラディスクがない場合、システムは SSD の作成を試みます。 使用可能な SSD がない場合、システムは ESSD の作成を試みます。

アプリケーションの作成

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1beta2
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: pvc-disk
          mountPath: /data
      volumes:
        - name: pvc-disk
          persistentVolumeClaim:
            claimName: disk-ssd