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の作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
永続ボリュームタブ、作成をクリックします。
PVの作成ダイアログボックスで、次のパラメーターを設定します。
パラメーター
説明
PVタイプ
この例では、[クラウドディスク] が選択されています。
ACKクラスターは、ディスクボリューム、ファイルストレージNAS (NAS) ボリューム、およびObject Storage Service (OSS) ボリュームをサポートします。
ACKサーバーレスクラスタは、ディスクボリュームとNASボリュームをサポートします。
アクセスモード
デフォルトでは、このパラメーターはReadWriteOnceに設定されています。
ディスクID
クラスターと同じリージョンおよびゾーンに作成されたディスクを選択します。 ディスクはPending状態である必要があります。
ファイルシステムタイプ
ディスクのファイルシステムを選択します。 有効な値: 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パスに生成されたコンテナデータがディスクボリュームに格納されます。
他のパラメーターを設定し、[作成] をクリックします。
アプリケーションの作成後、OSSボリュームを使用してアプリケーションデータを保存できます。
kubectlを使用して静的にプロビジョニングされたディスクボリュームをマウントする
ステップ1: PVとPVCの作成
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にバインドする場合は、このパラメーターを削除します。
次のコマンドを実行して、PVとPVCを作成します。
kubectl apply -f disk-static.yaml
次のコマンドを実行して、作成した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でマウントされます。
次のコマンドを実行して、MySQLアプリケーションのルートアカウントとパスワードを格納するSecretを作成します。
kubectl create secret generic mysql-pass --from-literal=password=mypassword
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の名前。
次のコマンドを実行してアプリケーションを作成し、PVCをアプリケーションにマウントします。
kubectl create -f mysql.yaml
アプリケーションを表示します。
ACKコンソールのクラスター詳細ページの左側のナビゲーションウィンドウで、
を選択します。 作成したアプリケーションは、StatefulSetsページで表示できます。
静的にプロビジョニングされたディスクボリュームを使用してデータを永続化できることを確認する
ポッドが削除されて再作成された後も、ポッドは削除される前に書き込まれたデータを保存します。 次の方法を使用して、静的にプロビジョニングされたディスクボリュームを使用してデータを永続化できることを確認できます。
ディスクが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
ディスクにファイルを作成します。
次のコマンドを実行して、
/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
ファイルはまだディスクに存在します。 これは、静的にプロビジョニングされたディスクボリュームにデータが永続化されることを示します。