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

Container Service for Kubernetes:静的にプロビジョニングされたディスクボリュームの使用

最終更新日:Nov 14, 2024

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

前提条件

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

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

    説明

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

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

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

    • 拡張SSD (ESSD) を作成する場合、容量は少なくとも1 GiBである必要があります。

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

シナリオ

シナリオ

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

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

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

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

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

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

ステップ1: PVの作成

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

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

  3. の右上隅に永続ボリュームページをクリックします。作成.

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

    パラメーター

    説明

    PVタイプ

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

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

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

    アクセスモード

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

    ディスクID

    クラスターと同じリージョンとゾーンにデプロイされているマウント可能なディスクを選択します。

    ファイルシステムタイプ

    ディスクのファイルシステムを選択します。 有効な値: 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. その他のパラメーターを設定し、[作成] をクリックします。

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

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

ステップ1: PVの作成

  1. 次のテンプレートを使用して、pv-static.yamlファイルを作成します。

    apiVersion: v1
    kind: PersistentVolume
    メタデータ:
      name: csi-pv
      ラベル:
        alicloud-pvname: static-disk-pv
    spec:
      capacity:
        storage: 25 Gi
      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-NODE-ZONE-ID>"# アプリケーションをデプロイするノードのゾーンIDに値を設定します。 例: cn-beijing-b. 

    パラメーター

    説明

    name

    PV の名前。

    labels

    PVに追加するラベル。

    ストレージ

    クラウドディスクの使用可能なストレージ。

    accessModes

    PVのアクセスモード。

    persistentVolumeReclaimPolicy

    PVの再利用ポリシー。

    ドライバー

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

    volumeHandle

    PVに関連付けられているクラウドディスクのID。

    nodeAffinity

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

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

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

    kubectl create -f pv-static.yaml
  3. 作成したPVを表示します。

    1. ACKコンソールにログインします。

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

    3. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。

    4. 詳細ページの左側のナビゲーションウィンドウで、ボリューム > 永続ボリューム.

      [Persistent Volumes] ページで、新しく作成したPVが表示されていることを確認します。

ステップ2: PVCの作成

  1. 次のコンテンツに基づいて、pvc-static.yamlという名前のファイルを作成します。

    apiVersion: v1
    kind: PersistentVolumeClaim
    メタデータ:
      名前: csi-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 25 Gi
      セレクタ:
        matchLabels:
          alicloud-pvname: static-disk-pv 

    パラメーター

    説明

    name

    PVCの名前。

    accessModes

    PVCのアクセスモード。

    ストレージ

    PVCが主張する容量。 請求される容量は、PVCに結合されるPVの容量を超えることはできない。

    matchLabels

    PVを選択してPVCにバインドするために使用されるラベル。 ラベルは、PVCに結合されるPVのラベルと同じでなければなりません。

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

    kubectl create -f pvc-static.yaml
  3. 詳細ページの左側のナビゲーションウィンドウで、ボリューム > 永続的なボリュームクレーム.

    [ボリュームクレームの永続性] ページで、新しく作成されたPVCが表示されていることを確認します。

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

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

  1. mysql.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

    apiVersion: apps/v1
    kind: StatefulSet
    メタデータ:
      名前: mysql
    spec:
      セレクタ:
        matchLabels:
          app: mysql
      serviceName: mysql
      template:
        metadata:
          labels:
            app: mysql
        仕様:
          containers:
          -name: mysql
            画像: mysql:5.7
            env:
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password
            ポート:
            - containerPort: 80
              name: mysql
            volumeMounts:
            - name: pvc-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: csi-pvc
    ---
    apiVersion: v1
    kind: 秘密
    メタデータ:
      名前: mysql-pass
    タイプ: 不透明
    データ:
      username: dGVz ****# MySQLアプリケーションのユーザー名。 実際のユーザー名に置き換えます。 
      password: dGVzdDEt ****# MySQLアプリケーションのパスワード。 実際のパスワードに置き換えます。

    • mountPath: コンテナー内のディスクをマウントするパス。

    • claimName: アプリケーションにマウントされているPVCの名前。

  2. 次のコマンドを実行してアプリケーションを作成し、PVCを使用して静的にプロビジョニングされたPVをマウントします。

    kubectl apply -f mysql.yaml
  3. 詳細ページの左側のナビゲーションウィンドウで、ワークロード > StatefulSets.

    SratefulSetsページで、新しく作成されたMySQLアプリケーションを表示できます。

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

  1. MySQLアプリケーションのポッドとマウントされたディスクのファイルを表示します。

    1. 次のコマンドを実行して、MySQLアプリケーションのポッドを照会します。

      kubectl get pod | grep mysql

      期待される出力:

      mysql-1 **** 1/1ランニング0 32s
    2. 次のコマンドを実行して、新しいディスクがポッドの /dataパスにマウントされているかどうかを確認します。

      kubectl exec mysql-1 **** -- df | grepデータ

      期待される出力:

      /dev/vdf 20511312 45080 20449848 1% /データ
    3. 次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。

      kubectl exec mysql-1 **** -- ls /data

      期待される出力:

      失われた + 見つかった
  2. 次のコマンドを実行して、/dataパスにstaticという名前のファイルを作成します。

    kubectl exec mysql-1 **** -- touch /data/static
  3. 次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。

    kubectl exec mysql-1 **** -- ls /data

    期待される出力:

    lost + found
    静的 
  4. 次のコマンドを実行して、mysql-1 **** ポッドを削除します。

    kubectl削除ポッドmysql-1 ****

    期待される出力:

    ポッド「mysql-1 **** 」を削除
  5. ポッドが削除された後も、ファイルがディスクに存在することを確認します。

    1. 次のコマンドを実行して、再作成されたポッドを照会します。

      kubectl getポッド

      期待される出力:

      の名前準備ができているステータスの履歴書
      mysql-2 **** 1/1ランニング0 14s 
    2. 次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。

      kubectl exec mysql-2 **** -- ls /data

      期待される出力:

      lost + found
      静的 

      静的ファイルはまだディスクに存在します。 これは、データが静的にプロビジョニングされたディスクに保持されることを示します。