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の作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
の右上隅に永続ボリュームページをクリックします。作成.
では、PVの作成ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
PVタイプ
この例では、[クラウドディスク] が選択されています。
ACKクラスターは、ディスクボリューム、NASボリューム、およびOSSボリュームをサポートします。
ACKサーバーレスクラスタは、ディスクボリュームとNASボリュームをサポートします。
アクセスモード
デフォルトでは、このパラメーターはReadWriteOnceに設定されています。
ディスクID
クラスターと同じリージョンとゾーンにデプロイされているマウント可能なディスクを選択します。
ファイルシステムタイプ
ディスクのファイルシステムを選択します。 有効な値: ext4、ext3、xfs、およびvfat。 デフォルト値: ext4
設定が完了したら、をクリックします。作成.
ステップ2: PVCの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
の右上隅に永続的なボリュームクレームページをクリックします。作成.
[PVCの作成] ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
PVCタイプ
この例では、[クラウドディスク] が選択されています。
ACKクラスターは、ディスクボリューム、NASボリューム、およびOSSボリュームをサポートします。
ACKサーバーレスクラスタは、ディスクボリュームとNASボリュームをサポートします。
名前
PVCの名前。 名前は名前空間内で一意である必要があります。
割り当てモード
この例では、Existing Volumesが選択されています。
説明PVが作成されていない場合は、[割り当てモード] を [ボリュームの作成] に設定し、PVの作成に必要なパラメーターを設定します。 詳細については、「PVの作成」をご参照ください。
既存のボリューム
[PVの選択] をクリックします。 表示されるダイアログボックスで、使用するPVを見つけ、[操作] 列の [選択] をクリックします。
容量
PVCが主張する容量。
説明PVの容量は、PVに関連付けられているディスクの容量より大きくすることはできません。
アクセスモード
デフォルトでは、このパラメーターはReadWriteOnceに設定されています。
クリック作成.
PVCの作成後、PVCのリストでPVCを表示できます。 PVCは指定されたPVにバインドされます。
ステップ3: アプリケーションの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
StatefulSetsページの右上隅にある [画像から作成] をクリックします。
アプリケーションパラメーターを設定します。
この例では、ボリュームパラメーターの設定方法を示します。 その他のパラメーターの詳細については、「StatefulSetを使用してステートフルアプリケーションを作成する」をご参照ください。
ACKクラスター用にローカルストレージボリュームとクラウドストレージボリュームを設定できます。 この例では、[クラウドストレージ] が選択されています。 作成したディスクボリュームをコンテナーの /tmpパスにマウントします。 ディスクボリュームがマウントされた後、/tmpパスに生成されたコンテナデータがディスクボリュームに格納されます。
その他のパラメーターを設定し、[作成] をクリックします。
アプリケーションの作成後、ボリュームを使用してアプリケーションデータを保存できます。
kubectlを使用して静的にプロビジョニングされたディスクボリュームをマウントする
ステップ1: PVの作成
次のテンプレートを使用して、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を使用するポッドがスケジュールされるゾーンを指定できます。
次のコマンドを実行してPVを作成します。
kubectl create -f pv-static.yaml
作成したPVを表示します。
ACKコンソールにログインします。
ACKコンソールの左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
詳細ページの左側のナビゲーションウィンドウで、 .
[Persistent Volumes] ページで、新しく作成したPVが表示されていることを確認します。
ステップ2: PVCの作成
次のコンテンツに基づいて、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のラベルと同じでなければなりません。
次のコマンドを実行してPVCを作成します。
kubectl create -f pvc-static.yaml
詳細ページの左側のナビゲーションウィンドウで、 .
[ボリュームクレームの永続性] ページで、新しく作成されたPVCが表示されていることを確認します。
ステップ3: アプリケーションの作成
この例では、MySQLアプリケーションが作成され、作成したPVCでマウントされます。
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の名前。
次のコマンドを実行してアプリケーションを作成し、PVCを使用して静的にプロビジョニングされたPVをマウントします。
kubectl apply -f mysql.yaml
詳細ページの左側のナビゲーションウィンドウで、 .
SratefulSetsページで、新しく作成されたMySQLアプリケーションを表示できます。
静的にプロビジョニングされたディスクを使用してデータを永続化できることを確認する
MySQLアプリケーションのポッドとマウントされたディスクのファイルを表示します。
次のコマンドを実行して、MySQLアプリケーションのポッドを照会します。
kubectl get pod | grep mysql
期待される出力:
mysql-1 **** 1/1ランニング0 32s
次のコマンドを実行して、新しいディスクがポッドの /dataパスにマウントされているかどうかを確認します。
kubectl exec mysql-1 **** -- df | grepデータ
期待される出力:
/dev/vdf 20511312 45080 20449848 1% /データ
次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。
kubectl exec mysql-1 **** -- ls /data
期待される出力:
失われた + 見つかった
次のコマンドを実行して、/dataパスにstaticという名前のファイルを作成します。
kubectl exec mysql-1 **** -- touch /data/static
次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。
kubectl exec mysql-1 **** -- ls /data
期待される出力:
lost + found 静的
次のコマンドを実行して、
mysql-1 ****
ポッドを削除します。kubectl削除ポッドmysql-1 ****
期待される出力:
ポッド「mysql-1 **** 」を削除
ポッドが削除された後も、ファイルがディスクに存在することを確認します。
次のコマンドを実行して、再作成されたポッドを照会します。
kubectl getポッド
期待される出力:
の名前準備ができているステータスの履歴書 mysql-2 **** 1/1ランニング0 14s
次のコマンドを実行して、1つのポッドの /dataパス内のファイルを照会します。
kubectl exec mysql-2 **** -- ls /data
期待される出力:
lost + found 静的
静的ファイルはまだディスクに存在します。 これは、データが静的にプロビジョニングされたディスクに保持されることを示します。