Alibaba Cloudディスクは、Elastic Compute Service (ECS) のブロックレベルのデータストレージリソースです。 Alibaba Cloudディスクは、低レイテンシ、高性能、高耐久性、高信頼性を提供します。 ACK Serverlessを使用すると、Container Storage Interface (CSI) プラグインを使用して、動的にプロビジョニングされたディスクボリュームを作成できます。 このトピックでは、動的にプロビジョニングされたディスクボリュームを使用する方法と、動的にプロビジョニングされたディスクボリュームが永続ストレージに使用できることを確認する方法について説明します。
前提条件
ACKサーバーレスクラスターが作成されます。 詳細については、「ACKサーバーレスクラスターの作成」をご参照ください。
kubectlクライアントがACKサーバーレスクラスターに接続されています。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。
CSIプラグインは手動でインストールされます。 詳細については、「csi-provisionerのインストールと更新」をご参照ください。
背景情報
StorageClassesの詳細については、「StorageClasses」をご参照ください。
手順
ACKコンソールで動的にプロビジョニングされたディスクボリュームを使用する
ステップ1: StorageClassの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
の右上隅にStorageClassesページをクリックします。作成.
では、作成ダイアログボックスで、パラメーターを設定します。
下表に、各パラメーターを説明します。
パラメーター
説明
名前
StorageClassの名前。
名前は小文字で始まる必要があり、小文字、数字、ピリオド (.) 、およびハイフン (-) のみを使用できます。
PVタイプ
永続ボリューム (PV) のタイプ。 [クラウドディスク] を選択します。
パラメーター
デフォルトでは、typeパラメーターが追加され、cloud_essdに設定されます。 typeパラメーターは、ディスクタイプを指定します。 有効な値は、cloud_efficiency、cloud_ssd、cloud_essd、availableです。 1つ以上の値を指定できます。 ただし、availableを指定した場合、他の値は指定できません。 たとえば、
type: cloud_efficiency, cloud_ssd, cloud_essd
を指定すると、システムは指定されたタイプのディスクを順番に作成しようとします。 ディスクが作成されると、システムは試行を停止します。 パラメーターを使用可能に設定すると、システムは最初に標準SSDの作成を試みます。 試行が失敗した場合、システムはウルトラディスクの作成を試みます。 ディスクが作成されると、システムは試行を停止します。説明一部のECSインスタンスタイプは、エンタープライズSSD (ESSD) をサポートしていません。 詳細は、「よくある質問」をご参照ください。
カスタムパラメーターを追加できます。 たとえば、zoneIdパラメーターを追加して、ディスクを作成するゾーンのIDを指定できます。 クラスターが単一のゾーンにデプロイされている場合は、値をゾーンのIDに設定します。 例:
cn-beijing-a
クラスターがゾーンにまたがってデプロイされている場合、ビジネス要件に基づいてzoneIdパラメーターを複数のゾーンIDに設定できます。 例:cn-beijing-a, cn-beijing-b
再利用ポリシー
ディスクの再利用ポリシー。 デフォルトでは、このパラメーターはDeleteに設定されています。 このパラメーターをRetainに設定することもできます。
削除モード: 永続ボリュームクレーム (PVC) が削除されると、関連するPVとディスクも削除されます。
保持モード: PVCが削除されると、関連するPVとディスクは保持されます。 PVとディスクデータは手動でのみ削除できます。
より高度なデータセキュリティが必要な場合は、データが誤って削除されないように、保持モードを使用することをお勧めします。
バインディングモード
ディスクのマウントモード。 デフォルト値: Immediate。ポッドを作成する前にシステムがディスクを作成することを指定します。
パラメーターの設定後、作成.
作成したStorageClassは、StorageClassesリストで確認できます。
ステップ2: PVCの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
の右上隅に永続的なボリュームクレームページをクリックします。作成.
では、PVCの作成ダイアログボックスで、次の表で説明するパラメーターを設定します。
パラメーター
説明
PVCタイプ
PVCのタイプ。 このパラメーターは、Cloud DiskまたはNASに設定できます。 この例では、このパラメーターはクラウドディスクに設定されています。
名前
PVCの名前。 名前は名前空間内で一意である必要があります。
割り当てモード
この例では、[StorageClassの使用] が選択されています。
既存のストレージクラス
[選択] をクリックします。 [ストレージクラスの選択] ダイアログボックスで、使用するStorageClassを見つけ、[操作] 列の [選択] をクリックします。
容量
PVCが主張する容量。
アクセスモード
PVのアクセスモード。 デフォルトでは、このパラメーターはReadWriteOnceに設定されています。
クリック作成.
PVCの作成後、PVCリストでPVCを表示できます。 PVCはPVに結合される。
ステップ3: アプリケーションの作成
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
StatefulSetsページの右上隅にある [画像から作成] をクリックします。
アプリケーションパラメーターを設定します。
この例では、ボリュームパラメータを設定する方法を示します。 その他のパラメーターの詳細については、「StatefulSetを使用してステートフルアプリケーションを作成する」をご参照ください。
ACKクラスター用にローカルストレージボリュームとクラウドストレージボリュームを設定できます。 この例では、[クラウドストレージ] が選択されています。
この例で作成したディスクボリュームをコンテナーの /tmpパスにマウントします。 ディスクボリュームがマウントされた後、/tmpパスに生成されたコンテナデータがディスクボリュームに格納されます。
その他のパラメーターを設定し、[作成] をクリックします。
アプリケーションの作成後、ボリュームを使用してアプリケーションデータを保存できます。
kubectlを使用して動的にプロビジョニングされたディスクボリュームを使用する
ステップ1: StorageClassの作成
マルチゾーンクラスターでは、まずクラウドディスクを作成してからポッドを作成することで、StorageClassを作成できます。
次のテンプレートを使用して、storage-class-csi.yamlという名前のファイルを作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass メタデータ: 名前: alicloud-disk-ssd-b provisioner: diskplugin.csi.alibabacloud.com パラメータ: type: cloud_ssd encrypted: "false" reclaimPolicy: Retain allowVolumeExpansion: true volumeBindingMode: 即時
パラメーター
説明
provisioner
値を
diskplugin.csi.alibabacloud.com
に設定します。 これは、Alibaba Cloudディスク用のプロビジョニングプラグインを使用してStorageClassを作成することを指定します。タイプ
ディスクのタイプ。 有効な値は、cloud_efficiency、cloud_ssd、cloud_essd、availableです。 1つ以上の値を指定できます。 ただし、availableを指定した場合、他の値は指定できません。 たとえば、
type: cloud_efficiency, cloud_ssd, cloud_essd
を指定すると、システムは指定されたタイプのディスクを順番に作成しようとします。 ディスクが作成されるまで、システムはディスクの作成を停止します。 このパラメーターを使用可能に設定すると、システムは最初に標準SSDの作成を試みます。 試行が失敗した場合、システムはウルトラディスクの作成を試みます。 ディスクが作成されるまで、システムはディスクの作成を停止します。説明一部のECSインスタンスタイプはESSDをサポートしていません。 詳細は、「よくある質問」をご参照ください。
暗号化
オプションです。 ディスクを暗号化するかどうかを指定します。 デフォルト値はfalseです。これは、ディスクが暗号化されていないことを示します。
reclaimPolicy
ディスクの再利用ポリシー。 デフォルトでは、このパラメーターはDeleteに設定されています。 このパラメーターをRetainに設定することもできます。
削除モード: PVCが削除されると、関連するPVとディスクも削除されます。
保持モード: PVCが削除されると、関連するPVとディスクは保持されます。 PVとディスクデータは手動でのみ削除できます。
高度なデータセキュリティが必要な場合は、データが誤って削除されないように、[保持] モードを使用することを推奨します。
allowVolumeExpansion
このパラメーターをtrueに設定すると、ディスクを自動的に展開できます。
volumeBindingMode
ディスクのマウントモード。 デフォルト値: Immediate。ポッドを作成する前にシステムがディスクを作成することを指定します。
次のコマンドを実行してStorageClassを作成します。
kubectl apply -f storage-class-csi.yaml
作成したStorageClassを表示します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
作成したStorageClassは、[StorageClasses] ページで表示できます。
ステップ2: PVCの作成
次のテンプレートを使用して、pvc-ssd.yamlという名前のファイルを作成します。
apiVersion: v1 kind: PersistentVolumeClaim メタデータ: 名前: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: ファイルシステム resources: requests: storage: 25 Gi storageClassName: alicloud-disk-ssd-b
パラメーター
説明
name
PVCの名前。
accessModes
PVのアクセスモード。
volumeMode
オプションです。 ディスクがマウントされる形式。 ファイルシステムがサポートされています。
storageClassName
PVCに関連付けるStorageClassの名前。
ストレージ
PVCが主張するディスクサイズ。 最小容量は20 GiBです。
次のコマンドを実行してPVCを作成します。
kubectl create -f pvc-ssd.yaml
作成したPVCを表示します。
クラスターの詳細ページの左側のナビゲーションウィンドウで、
を選択します。 作成したPVCは、[ボリュームクレームの永続化] ページで確認できます。
ステップ3: アプリケーションの作成
という名前のファイルを作成します。pvc-dynamic.yaml.
次のテンプレートを使用して、nginx-dynamicという名前のアプリケーションを作成し、PVCをアプリケーションにマウントします。
apiVersion: apps/v1 kind: StatefulSet メタデータ: 名前: nginx-dynamic spec: セレクタ: matchLabels: アプリ:nginx template: metadata: labels: アプリ:nginx 仕様: containers: - name: nginx image: nginx ポート: - containerPort: 80 name: web volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc
パラメーター
説明
mountPath
ディスクがマウントされるパス。
claimName
アプリケーションにマウントされているPVCの名前。
次のコマンドを実行して、アプリケーションをデプロイし、PVCをアプリケーションにマウントします。
kubectl create -f pvc-dynamic.yaml
デプロイされたアプリケーションを表示します。
詳細ページの左側のナビゲーションウィンドウで、
を選択します。 作成したアプリケーションは、[StatefulSets] ページで確認できます。
動的にプロビジョニングされたディスクボリュームを使用してデータを永続化できるかどうかのテスト
ポッドが削除されて再作成された後も、ポッドは削除される前に書き込まれたデータを保存します。 次の手順を実行して、データがディスクに永続化されているかどうかをテストします。
次のコマンドを実行して、新しいディスクが
/var/lib /MySQL
パスにマウントされているかどうかを確認して、ディスクが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
ディスクにファイルを作成します。
次のコマンドを実行して、
/var/lib/mysql
パスにtest-persistent
という名前のファイルを作成します。kubectl exec mysql-0 -- touch /var/lib/mysql/test-persistent
次のコマンドを実行して、ファイルが作成されていることを確認します。
kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent
期待される出力:
/var/lib/mysql/test-persistent
次のコマンドを実行して、
mysql-0
という名前のポッドを削除します。kubectl delete pod mysql-0
期待される出力:
pod "mysql-0" deleted
ポッドの削除後もファイルがまだ存在するかどうかをテストします。
次のコマンドを実行して、ポッドが期待どおりに実行されるかどうかを確認します。
kubectl get pod mysql-0
期待される出力:
NAME READY STATUS RESTARTS AGE mysql-0 1/1 Running 0 12s
次のコマンドを実行して、作成されたファイルを照会します。
kubectl exec mysql-0 -- ls /var/lib/mysql/test-persistent
期待される出力:
/var/lib/mysql/test-persistent
test-persistent
ファイルはまだ存在します。 これは、データが動的にプロビジョニングされたディスクに保持されることを示します。