エッジノードサービス (ENS) ディスクは、ACK EdgeクラスターのENSノードで使用されます。 ACK EdgeクラスターのContainer Storage Interface (CSI) プラグインを使用して、静的および動的にプロビジョニングされたENSディスクボリュームを作成できます。 このトピックでは、CSIプラグインを使用して作成された静的および動的にプロビジョニングされたENSディスクボリュームをマウントする方法について説明します。
前提条件
ACK Edgeクラスターが作成されました。 詳細については、「ACK Edgeクラスターの作成」をご参照ください。
エッジノードが作成されます。 詳細は、インスタンスの作成をご参照ください。 エッジノードがACK edgeクラスターに追加されます。 詳細については、「エッジノードの追加」をご参照ください。
csi-ens-pluginおよびcsi-ens-provisionerコンポーネントがインストールされています。 詳細については、「コンポーネントの管理」をご参照ください。
kubectlクライアントがクラスターに接続されています。 詳細については、「クラスターのkubeconfigファイルを取得し、kubectlを使用してクラスターに接続する」をご参照ください。
静的にプロビジョニングされたディスクボリュームを使用する場合は、従量課金のENSディスクを作成し、ディスクIDを
d-wz92s6d95go6ki9x ****
として記録してください。
使用上の注意
アプリケーションの展開中に、StorageClassを使用して、ディスクを購入する永続ボリューム (PV) を自動的に作成することをお勧めします。 ディスクを購入した場合は、静的にプロビジョニングされたディスクボリュームを使用できます。
ディスクを購入する際、指定したディスクサイズは、個々のディスクに対応する容量範囲を超えることはできません。 詳細については、「ディスクタイプ」をご参照ください。
システムがポッドを再作成すると、ポッドにマウントされた元のディスクが再マウントされます。 再作成中にシステムがポッドを元のゾーンにスケジュールできなかった場合、ポッドは保留状態のままになります。
動的プロビジョニングは、従量課金ディスクのみをサポートします。
ディスクの課金可能な項目の詳細については、「ブロックストレージデバイスの課金」をご参照ください。 ディスクの料金の詳細については、Elastic Compute Service製品ページをご覧ください。Alibaba Cloudストレージチームが提供するENSディスクは共有できません。 ディスクは1つのポッドにのみマウントできます。
ACK Edgeクラスターでは、ENSディスクは、ENSディスクと同じリージョンにあるENSノードにのみマウントできます。
ENSディスクを再利用または削除することはできません。 で関連する操作を実行できます。
Edge Node Serviceコンソール。
動的にプロビジョニングされたENSディスクボリュームの使用
ステップ1: StorageClassの作成
異なるリージョンのクラスターでは、次のいずれかの方法を使用してStorageClassを作成できます。
方法1: WaitForFirstConsumerモードでStorageClassを作成する
WaitForFirstConsumerモードでは、ACK Edgeクラスターで複数のリージョンを使用できるという問題を解決できます。 次の例では、storage-class-csi-topology.yamlファイルを使用してStorageClassを作成します。
storage-class-topology.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-ens-disk-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available fsType: ext4 volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: false
パラメーター
説明
name
StorageClassの名前。
provisioner
値を
ensplugin.csi.alibabacloud.com
に設定します。 StorageClassを作成するには、ENSディスク・プロバイショナ・プラグインを使用します。type
ディスクの種類
regionId
必要に応じて、 ディスクが自動的に作成されるリージョン。
reclaimPolicy
ディスク再利用ポリシー。
Retain
のみがサポートされています。 永続ボリューム要求 (PVC) を削除すると、PVとディスクのデータは保持され、手動で削除する必要があります。volumeBindingMode
ディスクのバインドモード。 デフォルト値:
Immediate
。 このパラメーターをWaitForFirstConsumer
に設定することもできます。Immediate
: StorageClassを使用するPVCが作成されると、ディスクが作成されます。 このようにして、ディスクを使用するポッドを作成する前に、ディスクが作成され、PVがプロビジョニングされます。WaitForFirstConsumer
: PVCを使用するポッドが作成されるまで、PVのバインドとプロビジョニングを遅延させます。 ポッドがノードにスケジュールされると、ノードがデプロイされ、PVとしてプロビジョニングされるゾーンにディスクが作成されます。
以下のコマンドを実行し、StorageClass を作成します。
kubectl apply -f storage-class-topology.yaml
作成したStorageClassを表示します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[StorageClasses] ページで、作成したStorageClassを表示できます。
方法2: ディスクを作成してポッドを作成することによってStorageClassを作成する
storage-class-csi.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-ens-disk-available provisioner: ensplugin.csi.alibabacloud.com parameters: type: available regionId: xxx reclaimPolicy: Retain allowVolumeExpansion: false volumeBindingMode: Immediate
以下のコマンドを実行し、StorageClass を作成します。
kubectl apply -f storage-class-csi.yaml
作成したStorageClassを表示します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[StorageClasses] ページで、作成したStorageClassを表示できます。
ステップ2: PVCの作成
pvc-ssd.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 25Gi storageClassName: alicloud-ens-disk-available
以下のコマンドを実行し、PVC を作成します。
kubectl create -f pvc-ssd.yaml
作成したPVCを表示します。
詳細ページの左側のナビゲーションウィンドウで、
を選択します。 [永続的なボリューム要求] ページで、作成されたPVCを表示できます。
ステップ3: アプリケーションの作成
pvc-dynamic.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
次のテンプレートを使用して、nginx-dynamicという名前のアプリケーションを作成し、PVCをアプリケーションにマウントします。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx-dynamic spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - 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ページで、作成したアプリケーションを見つけることができます。
静的にプロビジョニングされたENSディスクボリュームの使用
ステップ1: PVの作成
pv-static.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: PersistentVolume metadata: name: csi-pv labels: alicloud-pvname: static-disk-pv spec: capacity: storage: 25Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: ensplugin.csi.alibabacloud.com volumeHandle: "<your-disk-id>" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.ensplugin.csi.alibabacloud.com/region operator: In values: - "<your-node-region-id>" # The region ID of the ENS node. To view the region ID of an ENS node, view the topology.ensplugin.csi.alibabacloud.com/region parameter in the label of the ENS node.
パラメーター
説明
name
PV の名前。
labels
PVに追加するラベル。
ストレージ
クラウドディスクの使用可能なストレージ。
accessModes
PVのアクセスモード。
persistentVolumeReclaimPolicy
PVの再利用ポリシー。
driver
ドライバーのタイプ。 値
ensplugin.csi.alibabacloud.com
は、CSIプラグイン内のENSディスクが使用されることを指定する。volumeHandle
PVに関連付けられているクラウドディスクのID。
nodeAffinity
PVとPVCが属するゾーンに関する情報。
このパラメーターを設定して、PVとPVCを使用するポッドがスケジュールされるゾーンを指定できます。
次のコマンドを実行してPVを作成します。
kubectl create -f pv-static.yaml
作成したPVを表示します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[Persistent Volumes] ページで、作成したPVを表示できます。
ステップ2: PVCの作成
pvc-static.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 25Gi selector: 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を表示します。
詳細ページの左側のナビゲーションウィンドウで、
を選択します。 [永続的なボリューム要求] ページで、作成されたPVCを表示できます。
ステップ3: アプリケーションの作成
この例では、webアプリケーションが作成され、作成したPVCでマウントされます。
web.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。
apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: selector: matchLabels: app: nginx serviceName: "nginx" template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: csi-pvc
パラメーター
説明
mountPath
ディスクがマウントされるパス。
claimName
アプリケーションにマウントされているPVCの名前。
次のコマンドを実行して、PVCを使用して静的にプロビジョニングされたENSディスクボリュームでマウントされたアプリケーションを作成します。
kubectl apply -f web.yaml
詳細ページの左側のナビゲーションウィンドウで、
を選択します。[StatefulSets] ページで、webアプリケーションを表示し、アプリケーションを期待どおりに起動できます。 これは、ENSディスクがマウントされていることを示す。