動的ボリュームプロビジョニングは、各アプリケーションレプリカに対して独立したディスクを自動的に作成し、マウントします。これは、高い I/O と低レイテンシーを必要とするデータベース、ミドルウェア、その他のワークロードに適しており、ストレージライフサイクル管理を簡素化します。
仕組み
StatefulSet を使用した動的ディスクプロビジョニングは、次の 3 つのステップで行われます。
テンプレートの定義。 新しい StorageClass を作成するか、デフォルトの StorageClass を使用します。テンプレートでは、ディスクタイプ、パフォーマンスレベル、リクレイムポリシーなどのパラメーターを定義します。
ストレージ要件の宣言。 StatefulSet で
volumeClaimTemplatesを定義し、StorageClass を参照します。これにより、各 Pod が使用するストレージ容量やアクセスモードなどの PVC 仕様を宣言します。ボリュームの自動作成とマウント。 StatefulSet が Pod を作成すると、システムはテンプレートに基づいて Pod ごとに一意の PVC を生成します。Container Storage Interface (CSI) コンポーネントは、StorageClass のルールに基づいて永続ボリューム (PV) を作成し、PV を PVC にバインドして、ディスクを Pod にマウントします。
適用範囲と制限事項
ゾーンの制限: リージョン ESSD (エンタープライズ SSD) を除くすべてのディスクタイプは、ゾーンをまたいでマウントすることはできません。同じゾーン内の Pod にのみマウントできます。
インスタンスファミリーの制約:一部のディスクタイプは、特定のインスタンスファミリーにのみアタッチできます。
CSI コンポーネントの要件: csi-plugin および csi-provisioner コンポーネントがインストールされている必要があります。 > 注: CSI コンポーネントはデフォルトでインストールされています。 手動でアンインストールしていないことを確認してください。 インストールステータスは [アドオン] ページで確認してください。 最適なエクスペリエンスを得るには、CSI コンポーネントをアップグレードして最新バージョンにしてください。
仮想ノードの要件: 仮想ノードでディスクを使用するには、クラスターと kube-scheduler のバージョンが次の要件を満たす必要があります。
クラスターバージョン
kube-scheduler バージョン
1.28 以降
6.9.3 以降
1.26
6.8.7
1.24
6.4.7
1.22
6.4.5
StorageClass の選択
Container Service for Kubernetes (ACK) は、複数のデフォルト StorageClass を提供します。StorageClass は作成後に変更できません。デフォルトの StorageClass が要件を満たさない場合は、新しい StorageClass を作成してください。詳細については、「手動での StorageClass の作成」をご参照ください。
デフォルトの StorageClass
デフォルトの StorageClass を選択し、アプリケーションの storageClassName フィールドでその名前を参照します。
StorageClass 名 | 動的に作成されるディスクタイプ |
| ゾーンの不一致によるマウント失敗を防ぐために、ディスクを作成する前に Pod をスケジュールします ( |
| ESSD (エンタープライズ SSD)。デフォルトのパフォーマンスレベルは PL1 で、最小ディスク容量は 20 GiB です。 重要 CloudBox の ESSD は、PL0 パフォーマンスレベルのみをサポートします。手動で StorageClass を作成し、 |
| 標準 SSD。最小ディスク容量は 20 GiB です。 |
| Ultra ディスク。最小ディスク容量は 20 GiB です。 |
kubectl describe sc <storageclass-name> を実行して、StorageClass の詳細な構成を表示します。手動での StorageClass の作成
kubectl
disk-sc.yamlという名前のファイルを作成します。次の例は、volumeBindingMode: WaitForFirstConsumerを使用して PV バインドを遅延させる StorageClass を示しています。StorageClass パラメーター > 注意: 特定のスケジューリングメソッドを使用したり、特定の Annotation を追加したりして Pod を仮想ノードにスケジュールする場合、WaitForFirstConsumerタイプの StorageClass は使用できません。詳細については、「ディスクをマウントした Pod を仮想ノードにスケジュールしたときに、PVC が Pending 状態のままになる場合はどうすればよいですか?」をご参照ください。パラメーター
説明
provisionerドライバーのタイプ。必須。Alibaba Cloud ディスク CSI プラグインの場合は
diskplugin.csi.alibabacloud.comに設定します。parameters.typeディスクタイプ。必須。有効な値:
cloud_essd(デフォルト): ESSD (エンタープライズ SSD)cloud_auto: ESSD AutoPL ディスクcloud_essd_entry: ESSD エントリーディスクcloud_ssd: 標準 SSDcloud_efficiency: Ultra ディスクelastic_ephemeral_disk_standard: Standard Edition Elastic エフェメラルディスクelastic_ephemeral_disk_premium: プレミアムエラスティックエフェメラルディスクcloud_regional_disk_auto: リージョナル ESSD (エンタープライズ SSD)
これらの値を任意に組み合わせて指定できます。例:
type: cloud_ssd,cloud_essd,cloud_auto。システムは指定された順序でディスクの作成を試みます。最終的なディスクタイプは、ノードインスタンスやゾーンでサポートされているディスクタイプなどの要因によって決まります。parameters.resourceGroupIdディスクが属するリソースグループ。デフォルト:
""。parameters.regionIdディスクが配置されるリージョン。クラスターのリージョンと一致する必要があります。
parameters.fstypeファイルシステムタイプ。有効な値:
ext4(デフォルト) とxfs。parameters.mkfsOptionsディスクをフォーマットするためのパラメーター。例:
mkfsOptions: "-O project,quota"。parameters.diskTagsディスクのタグ。例:
diskTags: "a:b,b:c"。diskTags/a: b形式でタグを指定することもできます。CSI v1.30.3 以降が必要です。parameters.encryptedディスクを暗号化するかどうか。デフォルト:
false(暗号化しない)。parameters.performanceLevelESSD パフォーマンスレベル。 有効な値:
PL0、PL1(デフォルト)、PL2、PL3。 CloudBox と併用する場合は、PL0に設定します。parameters.volumeExpandAutoSnapshot[非推奨]CSI v1.31.4 以降、非推奨になりました。
parameters.provisionedIopsESSD AutoPL ディスクのプロビジョニングされたパフォーマンス (IOPS)。
parameters.burstingEnabledESSD AutoPL ディスクのバースト (パフォーマンスバースト) を有効にするかどうか。 デフォルト:
false。parameters.multiAttachディスク マルチアタッチ機能を有効にするかどうかを指定します。ディスク マルチアタッチ機能。デフォルト:
false。volumeBindingModeバインドモード。有効な値:
Immediate(デフォルト):Pod を作成する前にディスクを作成します。WaitForFirstConsumer:バインドを遅延させます。Pod が最初にスケジュールされ、その後、Pod と同じゾーンにディスクが作成されます。
マルチゾーンシナリオでは、ディスクと ECS ノードが異なるゾーンにあることによるマウント失敗を防ぐために
WaitForFirstConsumerを使用します。reclaimPolicyリクレイムポリシー。有効な値:
Delete(デフォルト):PVC が削除されると、PV とディスクも削除されます。Retain:PVC が削除されても、PV とディスクデータは削除されません。手動で削除する必要があります。
データセキュリティを優先する場合は、意図しないデータ削除を防ぐために
Retainを使用します。allowVolumeExpansiontrueに設定すると、オンラインディスクボリュームの拡張を許可します。allowedTopologiesディスクの作成を特定のトポロジードメインに制限します。
key:トポロジードメインのラベル。サポートされている値:topology.diskplugin.csi.alibabacloud.com/zone:Alibaba Cloud CSI プラグインが提供する専用のトポロジーキー。alibabacloud.com/ecs-instance-id:エラスティックエフェメラルディスクを使用する際にノードを指定するために使用します。
values:ゾーンまたはノード ID のリスト。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: # StorageClass の名前 name: alicloud-disk-wait-for-first-consumer # ドライバーのタイプ。Alibaba Cloud ディスク CSI プラグインを使用する場合、この値は固定です。 provisioner: diskplugin.csi.alibabacloud.com parameters: # ディスクタイプ。システムは優先順位に基づいてタイプを選択します。 type: cloud_auto,cloud_essd,cloud_ssd # ファイルシステムタイプ fstype: ext4 diskTags: "a:b,b:c" encrypted: "false" # ESSD のパフォーマンスレベル performanceLevel: PL1 provisionedIops: "40000" burstingEnabled: "false" # バインドモード。マルチゾーンシナリオでは WaitForFirstConsumer を使用します。 volumeBindingMode: WaitForFirstConsumer # リクレイムポリシー reclaimPolicy: Retain # ボリューム拡張を許可するかどうかを指定します allowVolumeExpansion: true # トポロジー制約:ディスクの作成を指定されたゾーンに制限します allowedTopologies: - matchLabelExpressions: - key: topology.diskplugin.csi.alibabacloud.com/zone values: # 実際のゾーンに置き換えてください - cn-hangzhou-i - cn-hangzhou-kStorageClass を作成します。
kubectl create -f disk-sc.yamlStorageClass を表示します。出力は、StorageClass が
WaitForFirstConsumerバインドモードで作成されたことを示しています。kubectl get scNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE alicloud-disk-wait-for-first-consumer diskplugin.csi.alibabacloud.com Retain WaitForFirstConsumer true 10s
コンソール
「クラスター」ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、「ストレージ」>「StorageClasses」を選択します。
[作成] をクリックし、PV タイプとして [クラウドディスク] を選択し、パラメーターを設定して、[OK] をクリックします。 > 注意: 特定のスケジューリングメソッドを使用するか、特定の Annotation を追加して Pod を仮想ノードにスケジュールする場合、
WaitForFirstConsumerタイプのストレージクラスは使用できません。 詳細については、「ディスクをマウントした Pod を仮想ノードにスケジュールした際に PVC が保留 (Pending) 状態のままになる場合」をご参照ください。 ストレージクラスが作成されると、[ストレージクラス] ページで表示できます。パラメーター
説明
パラメーター
デフォルトパラメーター:
type。ディスクタイプ。必須。有効な値:cloud_essd(デフォルト): エンタープライズ SSD (ESSD)cloud_auto: ESSD AutoPL diskcloud_essd_entry: ESSD エントリーディスクcloud_ssd: 標準 SSDcloud_efficiency: Ultra ディスクelastic_ephemeral_disk_standard: Standard Edition 弾性一時ディスクelastic_ephemeral_disk_premium: プレミアムエラスティックエフェメラルディスクcloud_regional_disk_auto: リージョン単位の ESSD (エンタープライズ SSD)
これらの値を任意に組み合わせて指定できます。例:
type: cloud_ssd,cloud_essd,cloud_auto。システムは指定された順序でディスクを作成します。最終的なディスクタイプは、ノードインスタンスやゾーンでサポートされているディスクタイプなどの要因によって決まります。
オプションパラメーター:resourceGroupId:ディスクが属するリソースグループ。デフォルト:""。regionId:ディスクが配置されるリージョン。クラスターのリージョンと一致する必要があります。fstype:ファイルシステムタイプ。有効な値:ext4(デフォルト) とxfs。mkfsOptions:ディスクをフォーマットするためのパラメーター。例:mkfsOptions: "-O project,quota"。diskTags:ディスクのタグ。例:diskTags: "a:b,b:c"。diskTags/a: b形式もサポートしています。CSI v1.30.3 以降が必要です。encrypted:ディスクを暗号化するかどうか。デフォルト:false。performanceLevel: ESSD パフォーマンスレベル。有効な値:PL0、PL1(デフォルト)、PL2、PL3。CloudBox と併用する場合は、PL0に設定します。provisionedIops: ESSD AutoPL ディスクのプロビジョニングされたパフォーマンス (IOPS)。burstingEnabled: ESSD AutoPL ディスクで バースト(パフォーマンスのバースト) を有効にするかどうか。デフォルト:false。multiAttach: ディスクマルチアタッチ機能を有効にするかどうかを指定します。デフォルト:false。
回収ポリシー
リクレイムポリシー。有効な値:
Delete(デフォルト):PVC が削除されると、PV とディスクも削除されます。Retain:PVC が削除されても、PV とディスクデータは削除されません。手動で削除する必要があります。
データセキュリティを優先する場合は、意図しないデータ削除を防ぐために
Retainを使用します。バインドモード
バインドモード。有効な値:
Immediate(デフォルト):Pod を作成する前にディスクを作成します。WaitForFirstConsumer:バインドを遅延させます。Pod が最初にスケジュールされ、その後、Pod と同じゾーンにディスクが作成されます。
マルチゾーンシナリオでは、ディスクと ECS ノードが異なるゾーンにあることによるマウント失敗を防ぐために
WaitForFirstConsumerを使用します。
StatefulSet へのディスクのマウント
各 Pod レプリカが独自の独立したディスクを必要とする場合は、StatefulSet を使用します。
ディスクは非共有ストレージです。マルチアタッチが有効になっていない場合、ディスクは一度に 1 つの Pod にしかマウントできません。複数レプリカの Deployment で PVC を共有すると、既存の Pod で使用中のディスクをマウントできないため、新しい Pod は失敗します。StatefulSet を使用するか、Pod ごとに個別のディスクをマウントしてください。Deployment でクラウドディスクを使用するには、「一時ストレージボリュームとしてクラウドディスクを使用する」をご参照ください。マルチアタッチを有効にするには、「マルチアタッチと予約で NVMe クラウドディスクを使用する」をご参照ください。
statefulset.yamlという名前のファイルを作成します。次の例では、2 つの Pod を持つ StatefulSet を作成します。volumeClaimTemplatesを使用して、各 Pod に独立した永続ストレージを自動的に作成し、バインドします。> 重要: Pod でsecurityContext.fsGroupを設定すると、ボリュームのマウント時に kubelet がファイルの権限を再帰的に変更 (chmod/chown) します。ボリュームに多数のファイルが含まれている場合、これによりマウント時間が大幅に増加します。> > Kubernetes 1.20 以降を実行しているクラスターでは、fsGroupChangePolicyをOnRootMismatchに設定します。これにより、ボリュームのルートディレクトリの権限が必要な権限と一致しない場合にのみ、最初のマウント時に再帰的な権限変更が実行されます。さらなるパフォーマンスチューニングや、より詳細な権限制御が必要な場合は、initContainerを使用して、メインのアプリケーションコンテナーが開始する前に権限調整コマンドを実行します。apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: # マウントパフォーマンスを最適化するために、次の securityContext を設定します securityContext: fsGroup: 1000 fsGroupChangePolicy: "OnRootMismatch" containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: # データボリュームをコンテナーの /data ディレクトリにマウントします # 名前は volumeClaimTemplates で定義された metadata.name と同じでなければなりません - name: pvc-disk mountPath: /data # PVC テンプレートを定義します volumeClaimTemplates: - metadata: name: pvc-disk spec: # アクセスモード accessModes: [ "ReadWriteOnce" ] # 事前に作成した StorageClass を関連付けます storageClassName: "alicloud-disk-wait-for-first-consumer" resources: requests: # 要求されたストレージ容量、つまりディスクサイズ storage: 20GiStatefulSet を作成します。
kubectl create -f statefulset.yamlPod が Running 状態であることを確認します。
kubectl get pod -l app=nginxマウントパスをチェックし、ディスクがマウントされていることを確認します。> 注意: この例では、Pod 名は
web-1です。実際の Pod 名に置き換えてください。期待される出力:kubectl exec web-1 -- df -h /dataFilesystem Size Used Avail Use% Mounted on /dev/vdb 20G 24K 20G 1% /data
永続ストレージの検証
Pod が再作成された後もデータが永続化されることを確認するには、Pod にデータを書き込み、Pod を削除してから、データが残っているかどうかを確認します。
Pod にテストデータを書き込みます。Pod
web-1の場合、マウントされたディスクパス/dataにtestファイルを作成します。期待される出力:kubectl exec web-1 -- touch /data/test kubectl exec web-1 -- ls /datalost+found testPod を削除して Pod の障害をシミュレートします。
kubectl get pod -l app=nginxを再度実行します。web-1という名前の新しい Pod が自動的に作成されます。kubectl delete pod web-1新しい Pod のデータを確認します。新しい Pod
web-1の/dataフォルダをチェックします。testファイルがまだ存在しており、Pod が削除されて再作成された後もデータが永続化されることが確認できます。kubectl exec web-1 -- ls /datalost+found test
単一 Pod または単一レプリカ Deployment へのディスクのマウント
マルチレプリカのスケーリングや安定したネットワーク ID を必要としないアプリケーションの場合は、手動で PVC を作成し、Pod または Deployment にマウントします。
プロセス:StorageClass を選択し、PVC を作成し、アプリケーションで PVC をマウントします。
StorageClass を準備します。
PVC を作成してストレージリソースを要求します。
kubectl
disk-pvc.yamlという名前のファイルを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: # アクセスモード accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: # 要求されたストレージ容量、つまりディスクサイズ storage: 20Gi # 事前に作成した StorageClass に関連付けます storageClassName: alicloud-disk-topology-alltype次の表にパラメーターを説明します。
パラメーター
説明
accessModesボリュームのアクセスモード。有効な値:
ReadWriteOnce、ReadOnlyMany、ReadWriteMany。サポートされる値は、StorageClass のmultiAttach設定および PVC のvolumeMode設定によって異なります。multiAttachは、ディスクのマルチアタッチを有効にするかどうかを指定します。デフォルト:false。multiAttachがfalseで、volumeModeが任意の値に設定されている場合、ReadWriteOnceのみがサポートされます。multiAttachがtrueで、volumeModeがFilesystemの場合、ReadWriteOnceとReadOnlyManyのみがサポートされます。multiAttachがtrueで、volumeModeがBlockの場合、3 つすべてのアクセスモードがサポートされます。
重要: このシナリオでは、アクセスモードは通常
ReadWriteOnce(RWO) であり、ボリュームは一度に 1 つの Pod によってのみマウントできることを意味します。Deployment のレプリカ数は 1 を超えることはできません。Deployment をスケールアウトすると、新しい Pod は既に使用中のディスクをマウントできないため、Pending状態のままになります。volumeMode永続ボリュームのモード。有効な値:
Filesystem(デフォルト):ボリュームはフォーマットされ、ディレクトリとしてマウントされます。Block:ボリュームはフォーマットされていないブロックデバイスとして Pod に提供されます。
storageリクエストされたストレージ容量です。容量範囲はディスクタイプによって異なります。ディスク作成の失敗を防ぐため、
storageの値が、参照される StorageClass に対応するディスクタイプの容量制限に準拠していることを確認してください。storageClassNameバインドする StorageClass。
PVC を作成します。
kubectl create -f disk-pvc.yamlPVC を表示します。
kubectl get pvcStorageClass は
WaitForFirstConsumerモードを使用しているため、PVC はそれを使用する最初の Pod が正常にスケジュールされるまでPending状態になります。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Pending alicloud-disk-topology-alltype <unset> 14s
コンソール
クラスター管理ページの左側にあるナビゲーションウィンドウで、[ストレージ] > [永続ボリューム要求] を選択します。
[永続ボリューム要求] ページで、[作成] をクリックします。[PVC タイプ] を [クラウドディスク] に設定し、プロンプトに従ってパラメーターを設定します。
パラメーター
説明
割り当てモード
[StorageClass を使用]を選択します。
既存の StorageClass
デフォルトまたは手動で作成された StorageClass。
容量
リクエストされたストレージ容量です。容量範囲はディスクタイプによって異なります。ディスクの作成が失敗しないように、
storageの値が、参照される StorageClass に対応するディスクタイプの容量制限に準拠していることを確認してください。アクセスモード
[ReadWriteOnce] のみがサポートされています。これは、ボリュームを単一の Pod によって読み書きモードでマウントできることを意味します。
PVC が作成されると、[永続ボリューム要求] ページで表示できます。
アプリケーションで PVC をマウントします。
disk-deployment.yamlという名前のファイルを作成します。apiVersion: apps/v1 kind: Deployment metadata: name: single-pod-app spec: # レプリカ数が 1 であることを確認します replicas: 1 selector: matchLabels: app: nginx-single template: metadata: labels: app: nginx-single spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # コンテナー内のマウントポイントを定義します volumeMounts: - name: my-persistent-storage # 下の volumes で定義された名前と一致する必要があります mountPath: /data # コンテナーの /data ディレクトリにマウントします # Pod レベルで PVC を宣言し、参照します volumes: - name: my-persistent-storage # コンテナーによって参照されるボリューム persistentVolumeClaim: claimName: disk-pvc # 事前に作成した PVC を参照しますDeployment をデプロイします。
kubectl create -f disk-deployment.yaml
マウント結果を確認します。
Pod が実行中であることを確認します。
kubectl get pods -l app=nginx-singlePod にログインし、ディスクが
/dataディレクトリにマウントされているかどうかを確認します。# Pod 名を取得します POD_NAME=$(kubectl get pods -l app=nginx-single -o jsonpath='{.items[0].metadata.name}') # df -h コマンドを実行します kubectl exec $POD_NAME -- df -h /data次の出力は、20 GiB のディスクが正常にマウントされたことを示しています。
Filesystem Size Used Avail Use% Mounted on /dev/vdb 20G 24K 20G 1% /data
本番環境に適用
高可用性
ディスクの選択
ディスクのパフォーマンス、課金方式、ノードのゾーン、およびインスタンスファミリーを評価します。これにより、Pod を互換性のあるノードにスケジュールできるようになります。
「ディスクタイプ」を選択する際は、標準 SSD および Ultra ディスクが段階的に廃止されつつあることに注意してください。Ultra ディスクは PL0 ESSD または ESSD Entry ディスクに置き換え、標準 SSD は ESSD AutoPL ディスクに置き換えてください。
クロスゾーンディザスタリカバリ
アプリケーションレベルのディザスタリカバリ: データベースなどの重要なサービスについては、複数のゾーンにアプリケーションインスタンスをデプロイします。アプリケーションのデータ同期メカニズムを使用して、高可用性を実現します。
ストレージレベルのディザスタリカバリ: マルチゾーンディザスタリカバリをサポートするディスクタイプを選択します。同一リージョン内の異なるゾーンにデータをリアルタイムで書き込み、ゾーン間エラー回復を有効にします。詳細については、「リージョンエンタープライズ SSD (ESSD) の使用」をご参照ください。
データセキュリティとバックアップ
意図しないデータ削除の防止: StorageClass の
reclaimPolicyをRetainに設定します。PVC が削除されても、バックエンドのディスクは削除されません。これにより、データ復元が簡素化されます。定期バックアップ: ダイナミックボリュームはリソースのプロビジョニングを簡素化しますが、データのバックアップに代わるものではありません。コアサービスでは、Backup Center を使用してデータをバックアップおよび復元してください。
保管時の暗号化: 機密性の高いデータを持つアプリケーションには、StorageClass で
encrypted: "true"を設定してディスクを暗号化します。
パフォーマンスとコストの最適化
並列アタッチ: デフォルトでは、シングルノード上のディスク操作は逐次的です。並列ディスクアタッチを使用することで、Pod の起動を高速化できます。
オンラインボリューム拡張: StorageClass で
allowVolumeExpansion: trueを設定します。これにより、ストレージの必要量が増加した際に、ディスクボリュームをオンラインで拡張することができます。ストレージのモニタリングとアラート: コンテナーストレージのモニタリングに基づいてアラートを設定し、ボリュームの異常やパフォーマンスボトルネックを検出します。
課金
StorageClass を使用して動的に作成されたディスクは、従量課金で課金されます。詳細については、「Elastic Block Storage の課金」および「Elastic Block Storage の価格」をご参照ください。
よくある質問
ディスクをマウントした Pod を仮想ノードにスケジュールしたときに、PVC が Pending 状態のままになる場合はどうすればよいですか?
この問題は、仮想ノードへのスケジューリングをサポートしていない StorageClass を使用した場合に発生する可能性があります。特定のラベルやアノテーションを使用して Pod を仮想ノードにスケジュールする場合、volumeBindingMode: WaitForFirstConsumer を持つ StorageClass はサポートされません。
原因: WaitForFirstConsumer モードは、kube-scheduler が Pod の物理ノードを選択することに依存しています。これにより Pod のゾーンが決定され、そのゾーンを使用してディスクが作成されます。しかし、仮想ノードの一部のスケジューリングメカニズムはこのプロセスに従わないため、CSI がゾーン情報を取得できません。その結果、PV を作成できず、PVC は Pending 状態のままになります。
診断: Pod またはその名前空間に、次のいずれかの構成が含まれているかどうかを確認します。
ラベル:
alibabacloud.com/eci: "true":Pod を ECI Pod にスケジュールします。alibabacloud.com/acs: "true":Pod を ACS Pod にスケジュールします。
ノード指定:
Pod が
spec.nodeNameを使用して直接ノードを指定している。ノード名のプレフィックスがvirtual-kubeletである。
アノテーション:
k8s.aliyun.com/eci-vswitch:ECI Pod の vSwitch を指定します。k8s.aliyun.com/eci-fail-strategy: "fail-fast":ECI Pod の障害処理ポリシーを fail-fast に設定します。
参考
ディスクボリュームを使用する際に問題が発生した場合は、「ディスクボリュームに関するよくある質問」をご参照ください。
マルチゾーンディスクデプロイメントの最適化に関する推奨事項については、「ディスクボリュームの高可用性に関する推奨構成」をご参照ください。
クラスターでまだ非推奨のFlexVolume コンポーネントを使用している場合は、FlexVolume を CSI に移行する。
ワークロードの作成方法の詳細については、「StatefulSet を作成する」および「Deployment を作成する」をご参照ください。
ディスクの使用を中止し、その課金を停止したい場合は、ディスクをリリースしてください。ディスクをリリースすると、ディスクとそのデータが削除され、課金が停止されます。