Alibaba Cloud クラウドディスクボリュームを Alibaba Cloud Container Service の Kubernetes クラスターで使用できます。

Alibaba Cloud クラウドディスクを Kubernetes クラスターへ以下の 2 つ方法でマウントできます。

制限事項

  • クラウドディスクは、非共有ストレージデバイスで、1 つのポッドにのみマウントできます。
  • クラウドディスクボリュームの使用前に、クラウドディスクを作成し、ディスク ID を取得する必要があります。 詳細は、「クラウドディスクの作成」をご参照ください。
    作成したクラウドディスクのタイプにより、以下の要件を満たす必要があります。
    • 基本クラウドディスクの最小容量は 5 GiB です。
    • Ultra ディスクの最小容量は 20 GiB です。
    • SSD ディスクの最小容量は 20 GiB です。
  • "volumeId" パラメーターは、マウントされたクラウドディスクの ID を示します。 ボリューム名および PV 名は "volumeId" パラメーターの値と同じである必要があります。
  • Kubernetes クラスターでは、クラウドディスクと同じゾーンにあるノードに対してのみクラウドディスクをマウントできます。
  • 従量課金クラウドディスクのみマウントできます。 Kubernetes クラスターでは、ECS インスタンスの課金方法をサブスクリプションへ変更できますが、クラウドディスクの課金方法をサブスクリプションへ変更することはできません。 クラウドディスクの課金方法をサブスクリプションへ変更した場合、クラウドディスクのマウントは失敗します。

静的ボリューム

Alibaba Cloud クラウドディスクをボリュームを通して、または PV および PVC を通して使用できます。

前提条件

ECS コンソールでクラウドディスクが作成されている必要があります。 詳細は、「クラウドディスクの作成」をご参照ください。

ボリュームを通じたクラウドディスクの使用

以下の disk-deploy.yaml ファイルを使用し、ポッドを作成します。

apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: nginx-disk-deploy
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - name: nginx-flexvolume-disk
    image: nginx
    volumeMounts:
    - name: "d-bp1j17ifxfasvts3tf40"
    mountPath: "/data"
    volumes:
    - name: "d-bp1j17ifxfasvts3tf40"
    flexVolume:
    driver: "alicloud/disk"
    fsType: "ext4"
    options:
    volumeId: "d-bp1j17ifxfasvts3tf40"

PV および PVC を通じたクラウドディスクの使用

手順 1: クラウドディスク PV の作成

クラウドディスク PV を、Container Service コンソール、または YAML ファイルにより作成できます。

YAML ファイルによる PV の作成

以下の disk-pv.yaml ファイルを使用して PV を作成します。

PV 名はクラウドディスク ID と同一である必要があります。
apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: d-bp1j17ifxfasvts3tf40
    labels:
    failure-domain.beta.kubernetes.io/zone: cn-hangzhou-b
    failure-domain.beta.kubernetes.io/region: cn-hangzhou
    spec:
    capacity:
    storage: 20Gi
    storageClassName: disk
    accessModes:
    - ReadWriteOnce
    flexVolume:
    driver: "alicloud/disk"
    fsType: "ext4"
    options:
    volumeId: "d-bp1j17ifxfasvts3tf40"

Container Service コンソールでのクラウドディスクボリュームの作成

  1. Container Service コンソール にログインします。
  2. Container Service-Kubernetes の左側のナビゲーションウインドウで、[クラスター] > [ボリューム] を選択します。
  3. [ボリューム] ページで、目的のクラスターを選択し、[作成] をクリックします。
  4. 表示されたダイアログボックスで、ボリュームパラメーターを設定します。
    • PV タイプ: クラウドディスク がこのページの例では使用されています。
    • アクセスモード: デフォルトでは、 "ReadWriteOnce" に設定されています。
    • クラウドディスク ID: クラスターと同一リージョン、および同一ゾーンにあるクラウドディスクを選択することを推奨します。
    • ファイルシステムタイプ: 保存されるデータのデータタイプを選択します。 利用可能なデータタイプは、ext4、ext3、xfs および vfat です。 デフォルト設定は ext4 です。
    • タグ: ボリュームにタグを追加します。
  5. [作成] をクリックします。

手順 2: PVC の作成

以下の disk-pvc.yaml ファイルを使用して PVC を作成します。

kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
    name: pvc-disk
    spec:
    accessModes:
    - ReadWriteOnce
    storageClassName: disk
    resources:
    requests:
    storage: 20Gi

手順 3: ポッドの作成

以下の disk-pod.yaml ファイルを使用してポッドを作成します。

apiVersion: v1
    kind: Pod
    metadata:
    name: "flexvolume-alicloud-example"
    spec:
    containers:
    - name: "nginx"
    image: "nginx"
    volumeMounts:
    - name: pvc-disk
    mountPath: "/data"
    volumes:
    - name: pvc-disk
    persistentVolumeClaim:
    claimName: pvc-disk

動的ボリューム

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

StorageClass の作成

kind: StorageClass
    apiVersion: storage.k8s.io/v1beta1
    metadata:
    name: alicloud-disk-ssd-hangzhou-b
    provisioner: alicloud/disk
    parameters:
    type: cloud_ssd
    regionid: cn-hangzhou
    zoneid: cn-hangzhou-b
    reclaimPolicy: Retain

パラメーター設定

  • provisioner: このパラメーターを "alicloud/disk" に設定します。これは、StorageClass により Alibaba Cloud クラウドディスクのプロビジョナープラグインを用いてクラウドディスクが作成されたことを示します。
  • type: 以下の値のうち 1 つを使用してクラドディスクのタイプを指定します。"cloud"、"cloud_efficiency"、 "cloud_ssd" および "available" 。 このパラメーターを "available" に設定した場合、システムにより "cloud_efficiency"、"cloud_ssd" および "cloud" の順で、このどれかが有効になるまで繰り返します。
  • regionid: クラウドディスクを作成するリージョンを設定します。
  • reclaimPolicy: クラウドディスクの再利用に関するポリシーを設定します。 デフォルト設定は "Delete" です。 このパラメーターを "Retain" に設定することもできます。 より高いデータセキュリティが必要な場合は、このパラメーターを "Retain" に設定することを推奨します。
  • zoneid: クラウドディスクを作成するゾーンを設定します。
    複数のゾーンにクラウドディスクを作成する場合、"zoneid" パラメーターを複数の値で設定できます。
    たとえば、"zoneid: cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c" のように設定します。
  • encrypted: (オプション) クラウドディスクを暗号化するかどうかを設定します。 デフォルト値は false です。 つまり、クラウドディスクは暗号化されません。

サービスの作成

kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
    name: disk-ssd
    spec:
    accessModes:
    - ReadWriteOnce
    storageClassName: alicloud-disk-ssd-hangzhou-b
    resources:
    requests:
    storage: 20Gi
    ---
    kind: Pod
    apiVersion: v1
    metadata:
    name: disk-pod-ssd
    spec:
    containers:
    - name: disk-pod
    image: nginx
    volumeMounts:
    - name: disk-pvc
    mountPath: "/mnt"
    restartPolicy: "Never"
    volumes:
    - name: disk-pvc
    persistentVolumeClaim:
    claimName: disk-ssd

デフォルトオプション

デフォルトでは、Kubernetes クラスターにより、単一ゾーンクラスターで使用できる以下の StorageClasses が提供されます。

  • "alicloud-disk-common"、基本クラウドディスクです。
  • "alicloud-disk-efficiency"、Ultra ディスクです。
  • "alicloud-disk-ssd"、 SSD ディスクです。
  • alicloud-disk-available: この StorageClass は、ディスク選択の体系的な方法を提供します。 具体的には、初めにシステムは Ultra ディスクの作成を試みます。 指定されたゾーンで Ultra ディスクが完売している場合、システムは SSD ディスクの作成を試みます。 SSD ディスクが完売の場合、システムは基本クラウドディスクの作成を試みます。

クラウドディスクを使用したマルチインスタンス StatefulSet の作成

volumeClaimTemplates を使用して、マルチインスタンス StatefulSet を作成することを推奨します。これにより、動的に複数の PVC および PV が作成でき、PVC および PV を互いに接続することができます。

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"
    replicas: 2
    template:
    metadata:
    labels:
    app: nginx
    spec:
    containers:
    - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    name: web
    volumeMounts:
    - name: disk-ssd
    mountPath: /data
    volumeClaimTemplates:
    - metadata:
    name: disk-ssd
    spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: "alicloud-disk-ssd"
    resources:
    requests:
    storage: 20Gi