ディスクボリュームは、高い IOPS と低いレイテンシを必要とするが、データ共有を必要としないアプリケーションに適しています。 Alibaba Cloud アカウント内にクラウドディスクが存在しない場合は、動的にプロビジョニングされたディスクボリュームを作成して、ディスクの作成とマウントを自動化できます。 これにより、データの永続性に関する要件を満たすことができます。 このトピックでは、動的にプロビジョニングされたディスクボリュームを使用する方法と、動的にプロビジョニングされたディスクボリュームを使用してデータを永続化できることを確認する方法について説明します。
シナリオ
ディスクは、以下のシナリオに適しています。
高いディスク I/O スループットを必要とし、データ共有を必要としないアプリケーションを作成する場合。 アプリケーションは、MySQL や Redis などのストレージサービスを使用できます。
ログを高速で書き込む場合。
ポッドのライフサイクルとは無関係にデータを永続化する場合。
既存のディスクに基づく静的ボリュームのプロビジョニングに加えて、Kubernetes は StorageClasses に基づく動的ボリュームのプロビジョニングをサポートしています。 動的プロビジョニングを使用すると、ストレージリソースを動的に作成および割り当てることができます。 StorageClass を永続ボリューム要求 (PVC) に関連付けると、システムは PVC と StorageClass の構成に基づいて永続ボリューム (PV) を自動的に作成してバインドします。 動的プロビジョニングは、アプリケーションのストレージ要件を満たすために、ストレージリソースの作成と構成を自動化します。 動的プロビジョニングは、ストレージインフラストラクチャのオーケストレーションの複雑さも軽減します。
前提条件
Container Storage Interface (CSI) プラグインがクラスタにインストールされていること。
説明クラスタ管理ページの左側のナビゲーションウィンドウで、csi-plugin と csi-provisioner を更新する」をご参照ください。
を選択します。 [ストレージ] タブで、csi-plugin と csi-provisioner がインストールされているかどうかを確認できます。 特定の機能を使用するために CSI プラグインを更新する方法の詳細については、「クラスタで FlexVolume を使用している場合は、FlexVolume は使用できなくなったため、クラスタを CSI プラグインに移行する必要があります。 詳細については、「FlexVolume から CSI にアップグレードする」をご参照ください。
仮想ノードにスケジュールする必要があるポッドにディスクボリュームをマウントする場合は、まず、次の表のバージョンのマッピングに基づいて kube-scheduler をアップグレードする必要があります。
Kubernetes バージョン
kube-scheduler バージョン
≥ 1.28
≥ 6.9.3
1.26
≥ 6.8.7
1.24
≥ 6.4.7
1.22
≥ 6.4.5
使用上の注意
ディスクは共有できません。 ディスクでマルチアタッチが有効になっていない場合、各ディスクは 1 つのポッドにのみマウントできます。 マルチアタッチ機能の詳細については、「NVMe ディスクのマルチアタッチ機能と NVMe 予約機能を使用する」をご参照ください。
ディスクと同じゾーンにあるポッドにのみディスクをマウントできます。
ポッドが再構築されると、元のディスクがポッドにマウントされます。 特定の制限によりポッドを元のゾーンにスケジュールできない場合、ディスクをアタッチできないため、ポッドは保留中の状態のままになります。
ディスクは、Deployment ではなく、ポッドまたは StatefulSet にマウントすることをお勧めします。
説明マルチアタッチが無効になっている場合、ディスクは 1 つのポッドにのみマウントできます。 ディスクを Deployment にマウントする場合は、Deployment のポッドレプリカの数を 1 に設定する必要があります。 複数のポッドを構成する場合、各ポッドに個別のディスクボリュームをマウントすることはできません。 また、ポッドのボリュームのマウントとマウント解除の優先順位を指定することもできません。 Deployment 内のポッドを再起動すると、Deployment で使用される更新ポリシーが原因で、再起動されたポッドにディスクがマウントされない場合があります。 ディスクを Deployment にマウントしないことをお勧めします。
ディスクボリュームを使用する場合にアプリケーション構成に
securityContext.fsgroup
パラメータが含まれていると、kubelet はボリュームのマウント後にchmod
コマンドとchown
コマンドを自動的に実行するため、ボリュームのマウントプロセスが遅くなる可能性があります。説明アプリケーション構成に
securityContext.fsgroup
パラメータを追加すると、Container Service for Kubernetes (ACK) はディスクがアプリケーションにマウントされたときにボリューム内のファイルの所有権を自動的に変更します。 所有権の変更に必要な時間は、ボリューム内のファイルの数によって異なります。 ボリューム内に多数のファイルが存在する場合、変更プロセスには長い時間がかかります。 Kubernetes 1.20 以後を実行するクラスタの場合、ポッド構成のfsGroupChangePolicy
パラメータをOnRootMismatch
に設定できます。 これにより、ACK はポッドが最初に起動されたときにのみファイルの所有権を変更します。 作成後にポッドを更新または再作成する場合、ボリュームのマウントプロセスには所有権の変更は含まれません。 前述の設定がビジネス要件を満たしていない場合は、init コンテナを作成し、関連する操作を実行するための権限を init コンテナに付与することをお勧めします。
StorageClasses
StorageClass は、使用するストレージのクラスを定義します。 StorageClass にさまざまなパラメータを指定して、パラメータに基づいてストレージリソースの供給と調整を自動化できます。 詳細については、「ストレージの基本」をご参照ください。
CSI プラグインをインストールすると、ACK はクラウドディスクのデフォルト StorageClasses を提供します。 デフォルトの StorageClasses がビジネス要件を満たしていない場合は、カスタム StorageClass を作成できます。
既存の StorageClass のプロパティを変更することはできません。 StorageClass のプロパティを更新する場合は、使用するプロパティを使用して新しい StorageClass を作成する必要があります。 StorageClass の構成は、ACK コンソールで、または
kubectl describe sc <storageclass-name>
コマンドを実行することで表示できます。 StorageClass パラメータの詳細については、「StorageClass パラメータ」をご参照ください。クラウドボックスの企業向け SSD (ESSD) は、パフォーマンスレベル 0 (PL0) である必要があります。 クラウドボックスを使用する場合は、ESSD の StorageClass を構成するときに、
performanceLevel
をPL0
に設定する必要があります。 ESSD のデフォルト StorageClass は、PL1 ESSD を作成するために使用されます。 クラウドボックスを使用する場合は、ESSD の新しい StorageClass を作成する必要があります。標準 SSD、Ultra ディスク、および基本ディスクは、以前の世代のクラウドディスクであり、特定のリージョンおよびゾーンでは購入できません。 Ultra ディスクと基本ディスクの代わりにパフォーマンスレベル 0 の ESSD (PL0 ESSD) または ESSD Entry ディスクを使用し、標準 SSD の代わりに ESSD AutoPL ディスクを使用することをお勧めします。
デフォルト StorageClass | ディスクカテゴリ |
alicloud-disk-topology-alltype | 高可用性 (HA) 構成。 StorageClass を使用してディスクをポッドにマウントすると、システムはポッドをホストする Elastic Compute Service (ECS) が存在するゾーンにディスクを作成します。 ゾーン内のディスクカテゴリの在庫が十分であり、ディスクカテゴリがポッドをホストする ECS インスタンスのインスタンスタイプでサポートされている必要があります。 システムは最初に ESSD を作成しようとします。 ESSD の作成に失敗した場合、システムは標準 SSD の作成を試みます。 標準 SSD の作成に失敗した場合、システムは Ultra ディスクの作成を試みます。 重要 StorageClass 構成で |
alicloud-disk-essd | ESSD を作成します。 デフォルトの PL は PL1 です。 |
alicloud-disk-ssd | 標準 SSD を作成します。 |
alicloud-disk-efficiency | Ultra ディスクを作成します。 |
StorageClasses に基づく動的プロビジョニングを使用して作成されたディスクは、従量課金制を使用します。
クラウドディスクの課金ルールの詳細については、「ブロックストレージデバイス」をご参照ください。
ディスクの価格の詳細については、「ブロックストレージデバイスの価格」をご参照ください。
kubectl を使用して動的にプロビジョニングされたディスクボリュームをマウントする
ステップ 1:StorageClass を作成する
デフォルトの StorageClasses がビジネス要件を満たしていない場合は、カスタム StorageClass を作成できます。既存の StorageClass のプロパティを変更することはできません。 StorageClass のプロパティを更新する場合は、使用するプロパティを使用して新しい StorageClass を作成する必要があります。
クラウドディスクとは異なるゾーンにあるノードにクラウドディスクをマウントすることはできません。 また、クラウドディスクをマウントできる ECS インスタンスタイプは、ディスクのカテゴリによって異なります。 動的にプロビジョニングされたディスクボリュームをポッドにマウントする場合は、ディスクとポッドをホストするノードが同じゾーンにあることを確認してください。 また、ノードの ECS インスタンスタイプがディスクのカテゴリでサポートされている必要があります。 ディスクカテゴリと ECS インスタンスタイプの間の一致ルールの詳細については、「インスタンスファミリの概要」をご参照ください。
disk-sc.yaml という名前のファイルを作成し、次のテンプレートをファイルにコピーします。
重要クラスタが複数のゾーンにデプロイされている場合は、クラウドディスクと ECS ノード間のゾーンの不整合によるマウントの失敗を防ぐために、
ことをお勧めします。WaitForFirstConsumer モード
を使用する StorageClass を作成する次のスケジュール方法またはアノテーションを使用して、クラウドディスクをマウントするポッドを仮想ノードにスケジュールする場合、
WaitForFirstConsumer モード
を使用する StorageClasses はサポートされません。alibabacloud.com/eci: "true"
ラベルを Elastic Container Instance ベースのポッドまたはポッドの名前空間に追加します。alibabacloud.com/acs: "true"
ラベルを ACS ポッドに追加します。ポッド構成で nodeName パラメータを指定して、ポッドを仮想ノードにスケジュールします。 仮想ノードには、
virtual-kubelet
というプレフィックスが付いています。k8s.aliyun.com/eci-vswitch
アノテーションを追加して、Elastic Container Instance ベースのポッドの vSwitch を指定します。k8s.aliyun.com/eci-fail-strategy: "fail-fast"
アノテーションを追加して、Elastic Container Instance ベースのポッドのエラー処理ポリシーを fail-fast に設定します。
WaitForFirstConsumer モード (ディスクを作成する前にポッドをスケジュールする)
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-wait-for-first-consumer provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_auto,cloud_essd,cloud_ssd # システムは、指定されたディスクカテゴリの優先順位に基づいてディスクの作成を試みます。 実際に作成されるディスクのカテゴリは、ディスクがマウントされる ECS インスタンスのインスタンスタイプと、ECS インスタンスがデプロイされているゾーンでサポートされているディスクカテゴリによって異なります。 fstype: ext4 diskTags: "a:b,b:c" encrypted: "false" performanceLevel: PL1 # クラウドボックスを使用する場合は、値を PL0 に設定する必要があります。 provisionedIops: "40000" burstingEnabled: "false" volumeBindingMode: WaitForFirstConsumer reclaimPolicy: Retain allowVolumeExpansion: true
即時モード (ポッドを作成する前にディスクを作成する)
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-disk-immediate provisioner: diskplugin.csi.alibabacloud.com parameters: type: cloud_essd,cloud_ssd,cloud_efficiency # システムは、指定されたディスクカテゴリの優先順位に基づいてディスクの作成を試みます。 実際に作成されるディスクのカテゴリは、ディスクがマウントされる ECS インスタンスのインスタンスタイプと、ECS インスタンスがデプロイされているゾーンでサポートされているディスクカテゴリによって異なります。 regionId: cn-beijing zoneId: cn-beijing-b encrypted: "false" reclaimPolicy: Retain allowVolumeExpansion: true volumeBindingMode: Immediate
次の表に、StorageClass のパラメータを示します。
パラメータ
説明
name
StorageClass の名前。 名前は小文字で始まり、小文字、数字、ピリオド (.)、およびハイフン (-) のみを含めることができます。
provisioner
ドライバのタイプ。 この例では、パラメータは
diskplugin.csi.alibabacloud.com
に設定されており、これは Alibaba Cloud によって提供される CSI プラグインが使用されていることを示します。parameters
type
パラメータは必須です。 このパラメータは、使用されるディスクカテゴリを指定します。 有効値:cloud_auto
: ESSD AutoPL ディスク。cloud_essd
: ESSD。 これはデフォルト値です。cloud_essd_entry
: ESSD Entry ディスク。cloud_ssd
: 標準 SSD。cloud_efficiency
: Ultra ディスク。elastic_ephemeral_disk_standard
: 標準エラスティック一時ディスク。elastic_ephemeral_disk_premium
: プレミアムエラスティック一時ディスク。cloud_regional_disk_auto
: リージョン ESSD。
このパラメータは、前述の値の任意の組み合わせに設定できます。 たとえば、このパラメータを
type: cloud_ssd,cloud_essd,cloud_auto
に設定できます。 この場合、システムはカテゴリの指定された順序でディスクの作成を試みます。 ディスクが作成されると、システムは試行を停止します。重要クラスタ内のノードのゾーンとインスタンスタイプ、およびディスクの課金とパフォーマンスの要件に基づいて、ディスクカテゴリを指定できます。 詳細については、以下のトピックをご参照ください。
volumeBindingMode
ディスクのバインディングモード。 デフォルト値:
Immediate
。WaitForFirstConsumer
に設定することもできます。Immediate
: StorageClass を使用する PVC が作成されるときにディスクを作成します。 これにより、ディスクを使用するポッドを作成する前に、ディスクが作成およびプロビジョニングされます。WaitForFirstConsumer
: PVC を使用するポッドが作成されるまで、PV のバインディングとプロビジョニングを遅らせます。 ポッドがノードにスケジュールされると、ノードがデプロイされているゾーンにディスクが作成され、PV としてプロビジョニングされます。
システムは、ボリュームバインディングモードに基づいてディスクが作成されるゾーンを選択します。
WaitForFirstConsumer
モードが使用されている場合、システムは PVC を使用する最初のポッドがデプロイされているゾーンにディスクを作成します。Immediate
モードが使用されている場合、システムはzoneId
パラメータの値に基づいてディスクが作成されるゾーンを選択します。 zoneId パラメータに 1 つのゾーン ID のみが指定されている場合、システムは指定されたゾーンにディスクを作成します。zoneId
パラメータに複数のゾーン ID が指定されている場合、システムは指定されたゾーンからラウンドロビン方式でゾーンを選択します。
reclaimPolicy
ディスクの再利用ポリシー。 デフォルト値:
Delete
。Retain
に設定することもできます。Delete
: PVC が削除されると、PV とクラウドディスクも削除されます。Retain
: PVC が削除されると、PV とクラウドディスクは保持されます。 PV とクラウドディスクは手動で削除する必要があります。
データセキュリティの要件が高い場合は、誤って削除されないように、値を Retain に設定することをお勧めします。
allowVolumeExpansion
ディスクボリュームの自動拡張を有効にするには、値を
true
に設定します。StorageClass を作成します。
kubectl create -f disk-sc.yaml
StorageClass を表示します。
kubectl get sc
予期される出力:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-disk-efficiency diskplugin.csi.alibabacloud.com Delete Immediate true 158m alicloud-disk-essd diskplugin.csi.alibabacloud.com Delete Immediate true 158m alicloud-disk-ssd diskplugin.csi.alibabacloud.com Delete Immediate true 158m alicloud-disk-topology-alltype diskplugin.csi.alibabacloud.com Delete WaitForFirstConsumer true 158m alicloud-disk-wait-for-first-consumer diskplugin.csi.alibabacloud.com Retain WaitForFirstConsumer true 10s
ステップ 2:PVC を作成する
disk-pvc.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 20Gi storageClassName: alicloud-disk-wait-for-first-consumer # この例では、PVC-PV バインディングの遅延を使用する StorageClass が指定されています。
次の表に、パラメータを示します。
パラメータ
説明
accessModes
ボリュームのアクセスモード。 詳細については、「ボリュームアクセスモード」をご参照ください。
有効値:
ReadWriteOnce
、ReadOnlyMany
、およびReadWriteMany
。 サポートされているアクセスモードは、StorageClass のmultiAttach
パラメータと PVC のvolumeMode
パラメータによって異なります。multiAttach
パラメータがfalse
に設定され、volumeMode
パラメータが空でない場合、ReadWriteOnce
アクセスモードのみがサポートされます。multiAttach
パラメータがtrue
に設定され、volumeMode
パラメータがFilesystem
に設定されている場合、ReadWriteOnce
またはReadOnlyMany
アクセスモードがサポートされます。multiAttach
パラメータがtrue
に設定され、volumeMode
パラメータがBlock
に設定されている場合、3 つのボリュームモードすべてがサポートされます。
説明multiAttach
パラメータは、[マルチアタッチ] 機能を有効にするかどうかを指定するために使用されます。 デフォルト値: false。 デフォルト値は、マルチアタッチ機能を無効にします。 詳細については、「クラウドディスクのマルチアタッチ」をご参照ください。volumeMode
ボリュームのモード。 有効値:
Filesystem
: ファイルシステムモード。 これはデフォルト値です。Block
: ブロックデバイスモード。
storage
ポッドに割り当てるストレージ容量。 これはディスクの容量でもあります。
説明さまざまなディスクカテゴリでサポートされている容量範囲の詳細については、「ブロックストレージのパフォーマンス」をご参照ください。
storageClassName
関連付ける StorageClass の名前。
PVC を作成します。
kubectl create -f disk-pvc.yaml
PVC を表示します。
kubectl get pvc
出力は、PVC が Pending 状態であることを示しています。 この場合、StorageClass は PVC-PV バインディングの遅延を使用するため、PV は作成されません。
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Pending alicloud-disk-wait-for-first-consumer <unset> 14s
ステップ 3:アプリケーションを作成し、ディスクをアプリケーションにマウントする
disk-test.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。
次のコードブロックは、1 つのポッドをプロビジョニングする StatefulSet の構成を指定します。 ポッドは、
disk-pvc
PVC を使用してストレージリソースをリクエストします。これは、ポッドの/data
パスにマウントされます。apiVersion: apps/v1 kind: StatefulSet metadata: name: disk-test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvc
StatefulSet を作成し、ディスクを StatefulSet にマウントします。
kubectl create -f disk-test.yaml
StatefulSet によってプロビジョニングされたポッドがデプロイされているかどうかを確認します。
kubectl get pod -l app=nginx
次の出力は、StatefulSet に 1 つのポッドがデプロイされていることを示しています。
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14s
マウントパス内のファイルを表示して、ディスクがマウントされているかどうかを確認します。
kubectl exec disk-test-0 -- df -h /data
予期される出力:
Filesystem Size Used Avail Use% Mounted on /dev/vdb 20G 24K 20G 1% /data
ACK コンソールで動的にプロビジョニングされたディスクボリュームをマウントする
ステップ 1:StorageClass を作成する
デフォルトの StorageClasses がビジネス要件を満たしていない場合は、カスタム StorageClass を作成できます。既存の StorageClass のプロパティを変更することはできません。 StorageClass のプロパティを更新する場合は、使用するプロパティを使用して新しい StorageClass を作成する必要があります。
クラウドディスクとは異なるゾーンにあるノードにクラウドディスクをマウントすることはできません。 また、クラウドディスクをマウントできる ECS インスタンスタイプは、ディスクのカテゴリによって異なります。 動的にプロビジョニングされたディスクボリュームをポッドにマウントする場合は、ディスクとポッドをホストするノードが同じゾーンにあることを確認してください。 また、ノードの ECS インスタンスタイプがディスクのカテゴリでサポートされている必要があります。 ディスクカテゴリと ECS インスタンスタイプの間の一致ルールの詳細については、「インスタンスファミリの概要」をご参照ください。
ACK コンソール にログインします。 左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。 左側のウィンドウで、 を選択します。
[StorageClasses] ページで、[作成] をクリックします。
[作成] ダイアログボックスで、パラメータを構成し、[作成] をクリックします。
パラメータ
説明
例
[名前]
StorageClass のカスタム名を入力します。 名前は、ACK コンソールに表示される形式の要件に従う必要があります。
alicloud-disk-wait-for-first-consumer
[PV タイプ]
[クラウドディスク] を選択します。
クラウドディスク
[パラメータ]
デフォルトでは、
type
パラメータが追加されます。 このパラメータは、ディスクカテゴリを指定します。 有効値:cloud_auto
: ESSD AutoPL ディスク。cloud_essd
: ESSD。 これはデフォルト値です。cloud_essd_entry
: ESSD Entry ディスク。cloud_ssd
: 標準 SSD。cloud_efficiency
: Ultra ディスク。elastic_ephemeral_disk_standard
: 標準エラスティック一時ディスク。elastic_ephemeral_disk_premium
: プレミアムエラスティック一時ディスク。cloud_regional_disk_auto
: リージョン ESSD。
このパラメータは、前述の値の任意の組み合わせに設定できます。 たとえば、このパラメータを
type: cloud_ssd,cloud_essd,cloud_auto
に設定できます。 この場合、システムはカテゴリの指定された順序でディスクの作成を試みます。 ディスクが作成されると、システムは試行を停止します。重要クラスタ内のノードのゾーンとインスタンスタイプ、およびディスクの課金とパフォーマンスの要件に基づいて、ディスクカテゴリを指定できます。 詳細については、以下のトピックをご参照ください。
type: cloud_auto,cloud_essd,cloud_ssd
[再利用ポリシー]
ディスクの再利用ポリシー。 デフォルト値:
Delete
。Retain
に設定することもできます。Delete
: PVC が削除されると、PV とクラウドディスクも削除されます。Retain
: PVC が削除されると、PV とクラウドディスクは保持されます。 PV とクラウドディスクは手動で削除する必要があります。
データセキュリティの要件が高い場合は、値を Retain に設定することをお勧めします。
Retain
[バインディングモード]
ディスクのバインディングモード。 デフォルト値:
Immediate
。WaitForFirstConsumer
に設定することもできます。Immediate
: StorageClass を使用する PVC が作成されるときにディスクを作成します。 これにより、ディスクを使用するポッドを作成する前に、ディスクが作成およびプロビジョニングされます。WaitForFirstConsumer
: PVC を使用するポッドが作成されるまで、PV のバインディングとプロビジョニングを遅らせます。 ポッドがノードにスケジュールされると、ノードがデプロイされているゾーンにディスクが作成され、PV としてプロビジョニングされます。
システムは、ボリュームバインディングモードに基づいてディスクが作成されるゾーンを選択します。
WaitForFirstConsumer
モードが使用されている場合、システムは PVC を使用する最初のポッドがデプロイされているゾーンにディスクを作成します。Immediate
モードが使用されている場合、システムはzoneId
パラメータの値に基づいてディスクが作成されるゾーンを選択します。 zoneId パラメータに 1 つのゾーン ID のみが指定されている場合、システムは指定されたゾーンにディスクを作成します。zoneId
パラメータに複数のゾーン ID が指定されている場合、システムは指定されたゾーンからラウンドロビン方式でゾーンを選択します。
重要クラスタが複数のゾーンにデプロイされている場合は、クラウドディスクと ECS ノード間のゾーンの不整合によるマウントの失敗を防ぐために、
ことをお勧めします。WaitForFirstConsumer モード
を使用する StorageClass を作成する次のスケジュール方法またはアノテーションを使用して、クラウドディスクをマウントするポッドを仮想ノードにスケジュールする場合、
WaitForFirstConsumer モード
を使用する StorageClasses はサポートされません。alibabacloud.com/eci: "true"
ラベルを Elastic Container Instance ベースのポッドまたはポッドの名前空間に追加します。alibabacloud.com/acs: "true"
ラベルを ACS ポッドに追加します。ポッド構成で nodeName パラメータを指定して、ポッドを仮想ノードにスケジュールします。 仮想ノードには、
virtual-kubelet
というプレフィックスが付いています。k8s.aliyun.com/eci-vswitch
アノテーションを追加して、Elastic Container Instance ベースのポッドの vSwitch を指定します。k8s.aliyun.com/eci-fail-strategy: "fail-fast"
アノテーションを追加して、Elastic Container Instance ベースのポッドのエラー処理ポリシーを fail-fast に設定します。
WaitForFirstConsumer
StorageClass を作成した後、[StorageClass] ページで StorageClass を表示できます。
ステップ 2:PVC を作成する
ACK コンソールのクラスタ詳細ページの左側のナビゲーションウィンドウで、
を選択します。[永続ボリューム要求] ページの右上隅にある [作成] をクリックします。
[作成] ダイアログボックスで、パラメータを構成し、[作成] をクリックします。
パラメータ
説明
例
[PVC タイプ]
[クラウドディスク] を選択します。
クラウドディスク
[名前]
PVC のカスタム名を入力します。 名前は、ACK コンソールに表示される形式の要件に従う必要があります。
diks-pvc
[割り当てモード]
この例では、[StorageClass を使用する] が選択されています。
StorageClass を使用する
[既存のストレージクラス]
PVC に関連付ける StorageClass を選択します。
alicloud-disk-topology-alltype
[容量]
ポッドに割り当てるストレージ容量を指定します。 これはディスクの容量でもあります。
説明さまざまなディスクカテゴリでサポートされている容量範囲の詳細については、「ブロックストレージのパフォーマンス」をご参照ください。
20Gi
[アクセスモード]
[ReadWriteOnce] を選択する必要があります。これは、ボリュームが読み取り/書き込みモードで 1 つのポッドにのみマウントされることを示します。
ReadWriteOnce
PVC を作成した後、[永続ボリューム要求] ページで PVC を表示できます。
ステップ 3:アプリケーションを作成し、ディスクをアプリケーションにマウントする
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[StatefulSet] ページの右上隅にある [イメージから作成] をクリックします。
StatefulSet のパラメータを構成し、[作成] をクリックします。
次の表に、いくつかのパラメータを示します。 ビジネス要件に基づいて他のパラメータを構成します。 詳細については、「StatefulSet を使用してステートフルアプリケーションを作成する」をご参照ください。
ウィザードページ
パラメータ
説明
例
[基本情報]
[名前]
StatefulSet のカスタム名を入力します。 名前は、UI に表示される形式の要件に従う必要があります。
disk-test
[レプリカ]
StatefulSet によってプロビジョニングされるポッドレプリカの数。
1
[コンテナ]
[イメージ名]
アプリケーションのデプロイに使用されるイメージのアドレス。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
[必要なリソース]
アプリケーションに必要な vCore の数、メモリ量、および一時ストレージ量を指定します。
CPU: 0.25 vCore
メモリ: 512 MiB
一時ストレージ: スキップ
[ボリューム]
[PVC を追加] をクリックして、パラメータを構成します。
[マウントソース]: ステップ 2 で作成した PVC を選択します。
[コンテナパス]: ディスクをマウントするコンテナパスを指定します。
マウントソース: disk-pvc。
コンテナパス: /data
アプリケーションがデプロイされているかどうかを確認します。
[StatefulSet] ページで、作成したアプリケーションの名前をクリックします。
[ポッド] タブで、ポッドが Running 状態かどうかを確認します。
kubectl を使用して、ディスクに基づいてデータの永続性が有効になっているかどうかを確認する
前の例で作成した StatefulSet は 1 つのポッドをプロビジョニングし、ディスクがポッドにマウントされます。 ポッドを削除すると、システムは自動的にポッドを再作成します。 元のディスクは新しいポッドにマウントされ、データはディスクに保持されます。 データがディスクに永続化されているかどうかをテストするには、次の手順を実行します。
マウントパス内のファイルを表示して、ディスク上のファイルを表示できるかどうかを確認します。
kubectl exec disk-test-0 -- ls /data
予期される出力:
lost+found
ディスクにファイルを作成します。
kubectl exec disk-test-0 -- touch /data/test
ポッドを削除します。
kubectl delete pod disk-test-0
説明ポッドを削除すると、システムは自動的にポッドを再作成します。
新しいポッドを確認します。
kubectl get pod -l app=nginx
次の出力は、新しいポッドの名前が削除したポッドと同じであることを示しています。
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 27s
元のディスクがポッドにマウントされていて、ファイルがディスクに保持されているかどうかを確認します。
kubectl exec disk-test-0 -- ls /data
次の出力は、
test
ファイルがディスクに保持されていることを示しています。lost+found test
参考資料
ディスクボリュームの使用時にエラーが発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。
ディスクサイズがビジネス要件を満たしていない場合、またはディスクがいっぱいの場合にディスクのサイズを変更する方法の詳細については、「ディスクボリュームを拡張する」をご参照ください。
リアルタイムのディスク使用状況の詳細については、「コンテナストレージモニタリングの概要」をご参照ください。