すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:静的にプロビジョニングされたボリュームとしてディスクをマウントする

最終更新日:Nov 14, 2024

Alibaba Cloudディスクは、Elastic Compute Service (ECS) のブロックレベルのデータストレージリソースであり、低レイテンシ、高性能、高耐久性、高信頼性を提供します。 Container Service for Kubernetes (ACK) では、Container Storage Interface (CSI) プラグインを使用して、静的および動的にディスクボリュームをプロビジョニングできます。 永続ボリューム (PV) と永続ボリューム要求 (PVC) を手動で作成して、静的にプロビジョニングされたディスクボリュームをマウントし、そのディスクボリュームを使用してアプリケーションデータを永続化することができます。

前提条件

  • ACKクラスタが作成され、CSIプラグインがクラスタにインストールされる。 詳細については、「ACKマネージドクラスターの作成」および「ACKサーバーレスクラスターの作成」をご参照ください。

    重要
    • Linuxカーネルバージョンが4.9より前のCentOS 7.9イメージまたはその他のOSイメージを使用するノードがクラスターに含まれており、xfsファイルシステムを使用してデータを永続化する場合 (fstypeパラメーターxfsに設定されている場合) 、CSIプラグインを1.24.7以降に更新しないでください。 4.9より前のLinuxカーネルバージョンは、CSI 1.24.7以降と互換性がありません。 この場合、CSIプラグインを1.24.7以降にアップデートすると、xfsファイルシステムがマウントされているポッドが起動しないことがあります。 他のファイルシステムは影響を受けません。 この問題を解決するには、

      チケットを起票してサポートセンターにお問い合わせくださいしてサポートセンターにお問い合わせください。

    • CSIプラグインを1.26.4に更新する場合、csi-pluginとcsi-provisionerの両方を更新する必要があります。

  • 従量課金ディスクが作成されていること。 ディスクIDはd-wz92s6d95go6ki9x **** です。 ディスクがクラスターと同じリージョンにあることを確認してください。 詳細については、「空のデータディスクの作成」をご参照ください。

    説明

    作成するディスクは、次の要件を満たす必要があります。

    • ウルトラディスクを作成する場合、容量は少なくとも20 GiBでなければなりません。

    • 標準SSDを作成する場合、容量は少なくとも20 GiBでなければなりません。

    • エンタープライズSSD (ESSD) を作成する場合、容量は少なくとも1 GiBである必要があります。

  • kubectlクライアントがクラスターに接続されています。 詳細については、「kubectlを使用したクラスターへの接続」をご参照ください。

シナリオ

シナリオ

  • 高いディスクI/Oを必要とし、データ共有を必要としないアプリケーションを作成する場合。 アプリケーションは、MySQLやRedisなどのストレージサービスを使用できます。

  • ログを高速で書き込みたい場合。

  • ポッドのライフサイクルに依存しない方法でデータを保持したい場合。

静的にプロビジョニングされたボリュームとしてディスクをマウントするには、ディスクを購入したことを確認します。

静的にディスクをプロビジョニングするために使用されるPVとPVCを手動で作成します。

制限事項

  • ディスクが存在するゾーン以外のゾーンにデプロイされたポッドにはディスクをマウントできません。

  • マルチアタッチ機能が無効になっているディスクは、1つのポッドにのみマウントできます。

  • ポッドを起動する前に、ディスクのタイプがクラスターで使用されているElastic Compute Service (ECS) インスタンスタイプと一致している必要があります。 ディスクタイプとECSインスタンスタイプのマッチングルールの詳細については、「インスタンスファミリー」をご参照ください。

    重要

    クラスター内のECSインスタンスの課金方法を従量課金からサブスクリプションに変更した場合、ディスクの課金方法をサブスクリプションに変更することはできません。 それ以外の場合、ディスクはクラスターにマウントされません。 ストレージ容量ユニット (SCU) を購入して、ストレージコストを削減できます。 SCUの詳細については、「SCUの概要」をご参照ください。

ACKコンソールで静的にプロビジョニングされたディスクボリュームをマウントする

ステップ1: PVの作成

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ボリューム] > [ボリューム] を選択します。

  3. 永続ボリュームタブ、作成をクリックします。

  4. PVの作成ダイアログボックスで、次のパラメーターを設定します。

    パラメーター

    説明

    PVタイプ

    この例では、[クラウドディスク] が選択されています。

    • ACKクラスターは、ディスクボリューム、ファイルストレージNAS (NAS) ボリューム、およびObject Storage Service (OSS) ボリュームをサポートします。

    • ACKサーバーレスクラスタは、ディスクボリュームとNASボリュームをサポートします。

    アクセスモード

    デフォルトでは、このパラメーターはReadWriteOnceに設定されています。

    ディスクID

    クラスターと同じリージョンおよびゾーンに作成されたディスクを選択します。 ディスクはPending状態である必要があります。

    ファイルシステムタイプ

    ディスクのファイルシステムを選択します。 有効な値: ext4ext3xfs、およびvfat。 デフォルト値: ext4

  5. 設定が完了したら、作成をクリックします。

ステップ2: PVCの作成

  1. 詳細ページの左側のナビゲーションウィンドウで、[ボリューム] > [ボリュームクレームの永続性] を選択します。

  2. 右上隅の永続的なボリュームクレームページで作成をクリックします。

  3. [PVCの作成] ダイアログボックスで、次のパラメーターを設定します。

    パラメーター

    説明

    PVCタイプ

    この例では、[クラウドディスク] が選択されています。

    • ACKクラスターは、ディスクボリューム、NASボリューム、およびOSSボリュームをサポートします。

    • ACKサーバーレスクラスタは、ディスクボリュームとNASボリュームをサポートします。

    名前

    PVCの名前。 名前は名前空間内で一意である必要があります。

    割り当てモード

    この例では、Existing Volumesが選択されています。

    説明

    PVが作成されていない場合は、[割り当てモード] パラメーターを [ボリュームの作成] に設定し、PVを作成するために必要なパラメーターを設定します。 詳細については、「PVの作成」をご参照ください。

    既存のボリューム

    [PVの選択] をクリックします。 表示されるダイアログボックスで、使用するPVを見つけ、[操作] 列の [選択] をクリックします。

    容量

    PVCが主張する容量。

    説明

    PVの容量は、PVに関連付けられているディスクの容量より大きくすることはできません。

    アクセスモード

    デフォルトでは、このパラメーターはReadWriteOnceに設定されています。

  4. 作成クリックします。

    PVCの作成後、PVCのリストでPVCを表示できます。 PVCは指定されたPVにバインドされます。

ステップ3: アプリケーションの作成

  1. 詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [StatefulSets] を選択します。

  2. StatefulSetsページの右上隅にある [画像から作成] をクリックします。

  3. アプリケーションパラメータを設定します。

    この例では、ボリュームパラメーターの設定方法を示します。 その他のパラメーターの詳細については、「StatefulSetを使用してステートフルアプリケーションを作成する」をご参照ください。

  4. ACKクラスター用にローカルストレージボリュームとクラウドストレージボリュームを設定できます。 この例では、[クラウドストレージ] が選択されています。 作成したディスクボリュームをコンテナーの /tmpパスにマウントします。 ディスクボリュームがマウントされた後、/tmpパスに生成されたコンテナデータがディスクボリュームに格納されます。数据卷

  5. 他のパラメーターを設定し、[作成] をクリックします。

    アプリケーションの作成後、OSSボリュームを使用してアプリケーションデータを保存できます。

kubectlを使用して静的にプロビジョニングされたディスクボリュームをマウントする

ステップ1: PVとPVCの作成

  1. disk-static.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。 ファイル内の次のパラメーターを置き換えます。

    • <YOUR-DISK-ID>: 作成したディスクのID。 例: d-wz92s6d95go6ki9x ****

    • <YOUR-DISK-SIZE>: ディスクのサイズ。 例: 25Gi

    • <YOUR-DISK-CATEGORY>: ディスクのタイプ。 例: cloud_essd

    • <YOUR-DISK-ZONE-ID>: ディスクが配置されているゾーン。 例: cn-beijing-i

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: "<YOUR-DISK-ID>"
      annotations:
        csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}'
    spec:
      capacity:
        storage: "<YOUR-DISK-SIZE>"
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        namespace: default
        name: disk-pvc
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: diskplugin.csi.alibabacloud.com
        volumeHandle: "<YOUR-DISK-ID>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              - "<YOUR-DISK-ZONE-ID>"
      storageClassName: disk
      volumeMode: Filesystem
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: "<YOUR-DISK-SIZE>"
      storageClassName: disk
      volumeName: "<YOUR-DISK-ID>"

    パラメーター

    説明

    accessModes

    PVCのアクセスモード。 このパラメーターは通常、ReadWriteOnceに設定されます。 PVの設定は、PVCの設定と同じでなければなりません。 詳細については、「動的にプロビジョニングされたディスクボリュームの使用」の「手順2: PVCの作成」セクションの仕様表をご参照ください。

    persistentVolumeReclaimPolicy

    PVの再利用ポリシー。

    • 削除: PVCが削除されると、関連するPVとディスクも削除されます。

    • 保持: PVCが削除されると、関連するPVとディスクは保持されます。 PVとディスクデータは手動でのみ削除できます。

    ドライバー

    ドライバーのタイプ。 このパラメーターはdiskplugin.csi.alibabacloud.comに設定されています。 この値は、Alibaba Cloud CSIプラグインが使用されていることを示します。

    storageClassName

    このパラメーターは静的にプロビジョニングされたボリュームでは無効ですが、PVの設定はPVCの設定と同じでなければなりません。 事前にStorageClassオブジェクトを作成する必要はありません。

    nodeAffinity

    PVが属するゾーンに関する情報。

    このパラメーターを設定して、PVとPVCを使用するポッドがスケジュールされるゾーンを指定できます。

    注釈 ["csi.alibabacloud.com/volume-topology"]

    静的にプロビジョニングされたディスクボリュームをマウントできるノードに対する追加の制限。 指定した種類のディスクをサポートするノードにポッドをスケジュールできるように、ディスクの種類を指定することをお勧めします。

    claimRef

    PVにバインドできるPVCを指定します。 PVを任意のPVCにバインドする場合は、このパラメーターを削除します。

    volumeName

    PVCにバインドできるPVを指定します。 PVCを任意のPVにバインドする場合は、このパラメーターを削除します。

  2. 次のコマンドを実行して、PVとPVCを作成します。

    kubectl apply -f disk-static.yaml
  3. 次のコマンドを実行して、作成したPVとPVCを表示します。

    kubectl get pv <YOUR-DISK-ID>
    kubectl get pvc disk-pvc

    期待される出力:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
    d-wz92s6d95go6ki9x****   20Gi       RWO            Retain           Bound       default/disk-pvc   disk           <unset>                          27s
    
    NAME       STATUS   VOLUME                   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc   Bound    d-wz92s6d95go6ki9x****   20Gi       RWO            disk           <unset>                 27s

    PVおよびPVCは、数秒後にバウンド状態に入る。

ステップ2: アプリケーションの作成

この例では、MySQLアプリケーションが作成され、作成したPVCでマウントされます。

  1. 次のコマンドを実行して、MySQLアプリケーションのルートアカウントとパスワードを格納するSecretを作成します。

    kubectl create secret generic mysql-pass --from-literal=password=mypassword
  2. mysql.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      serviceName: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - name: mysql
            image: mysql:8
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: pvc-disk
              mountPath: /var/lib/mysql
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc

    パラメーター

    説明

    mountPath

    ディスクがマウントされるパス。

    claimName

    アプリケーションにマウントされたPVCの名前。

  3. 次のコマンドを実行してアプリケーションを作成し、PVCをアプリケーションにマウントします。

    kubectl create -f mysql.yaml
  4. アプリケーションを表示します。

    ACKコンソールのクラスター詳細ページの左側のナビゲーションウィンドウで、[ワークロード] > [StatefulSets] を選択します。 作成したアプリケーションは、StatefulSetsページで表示できます。

静的にプロビジョニングされたディスクボリュームを使用してデータを永続化できることを確認する

ポッドが削除されて再作成された後も、ポッドは削除される前に書き込まれたデータを保存します。 次の方法を使用して、静的にプロビジョニングされたディスクボリュームを使用してデータを永続化できることを確認できます。

  1. ディスクがMySQLアプリケーションにマウントされていることを確認します。 次のコマンドを実行して、新しいディスクが /var/lib/mysqlパスにマウントされているかどうかを確認します。

    kubectl exec mysql-0 -- df -h /var/lib/mysql

    期待される出力:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdd         25G  213M   25G   1% /var/lib/mysql
  2. ディスクにファイルを作成します。

    1. 次のコマンドを実行して、/var/lib/mysqlパスにtest-persistentという名前のファイルを作成します。

      kubectl exec mysql-0 -- touch /var/lib/mysql/test-persistent
    2. 次のコマンドを実行して、ファイルが作成されたことを確認します。

      kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent

      期待される出力:

      /var/lib/mysql/test-persistent
  3. 次のコマンドを実行して、mysql-0という名前のポッドを削除します。

    kubectl delete pod mysql-0

    期待される出力:

    pod "mysql-0" deleted
  4. ポッドの削除後もファイルがまだ存在するかどうかをテストします。

    1. 次のコマンドを実行して、再作成されたポッドが正常に実行されるかどうかを確認します。

      kubectl get pod mysql-0

      期待される出力:

      NAME      READY   STATUS    RESTARTS   AGE
      mysql-0   1/1     Running   0          12s
    2. 次のコマンドを実行して、作成したファイルを表示します。

      kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent

      期待される出力:

      /var/lib/mysql/test-persistent

      test-persistentファイルはまだディスクに存在します。 これは、静的にプロビジョニングされたディスクボリュームにデータが永続化されることを示します。