すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:クロスゾーン展開のための推奨ストレージ設定

最終更新日:Nov 14, 2024

クロスゾーンデプロイメントのストレージ設定を最適化して、アプリケーションリリースの中断を大幅に削減し、障害が発生した場合でも主要なビジネスシステムとアプリケーションを期待どおりに実行できるようにすることができます。 このトピックでは、クロスゾーンデプロイの推奨ストレージ設定について説明します。

背景情報

Kubernetesは強力なコンテナーオーケストレーション機能を提供し、Kubernetes上で大規模なステートフルアプリケーションを簡単に開発するのに役立ちます。 Kubernetesは、アプリケーションの配布とデプロイを大幅に簡素化し、基盤となるハードウェアロジックをユーザーから隠します。 しかしながら、これは、以下の問題を引き起こし得る。

  • クロスゾーンクラスター内のアプリケーションは、目的のゾーンであるゾーンaではなく、ゾーンBに誤ってデプロイされます。

  • 永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成してディスクをマウントすると、InvalidDataDiskCatagory.NotSupportedエラーメッセージが表示されます。 詳細については、「」をご参照ください。動的にプロビジョニングされたPVを作成するときに、システムプロンプトInvalidDataDiskCatagory.NotSupportedが表示されるのはなぜですか。 「ディスクボリュームに関するFAQ」トピックのセクション。

  • ディスクをアプリケーションにマウントすると、指定されたインスタンスのinstanceTypeがこのディスクカテゴリをサポートしていませんというエラーメッセージが表示されます。

  • アプリケーションをデバッグすると、0/xノードが使用可能です。xノードにボリュームノードアフィニティの競合がありましたエラーメッセージが報告されます。

上記の問題は、アプリケーションのリリースを中断できます。 これらの問題を軽減するために、このトピックで提供されているクロスゾーン展開の推奨ストレージ設定を使用できます。

推奨ストレージ設定

  • Apsara File Storage NAS (NAS) ファイルシステムの代わりにディスクを使用して、データを永続的に保存します。 ディスクはNASファイルシステムよりも安定しており、データ転送の帯域幅が広くなります。

  • 3つのゾーンにクラスターをデプロイして、十分なノードとストレージリソースを確保します。

  • クラスターのゾーンでノードを使用できない場合は、ノードを追加します。

  • 複数のタイプのディスクを使用して、マウントの失敗を防ぎます。

  • アプリケーションが異なるゾーンのノードに均等に分散できることを確認してください。

image

推奨ノードプールの設定

  • 各ノードプールが1つのゾーンにのみ関連付けられていることを確認し、新しく追加されたゾーンごとにノードプールを作成します。 詳細については、「ノードプールの作成」をご参照ください。

    重要

    各ノードプールが異なるゾーンに関連付けられていることを確認します。 ノードプール名にゾーンIDを指定することを推奨します。

  • ノードプールの自動スケーリング機能を有効にします。 詳細については、「ノードの自動スケーリングの有効化」をご参照ください。

  • ゾーン間で同じタイプのElastic Compute Service (ECS) インスタンスを使用するか、同じタイプのブロックストレージをサポートするECSインスタンスを使用します。

  • ノードプール内のすべてのノードにテイントを追加して、他のアプリケーションポッドがノードにスケジュールされず、現在のアプリケーションに悪影響を与えないようにします。污点

設定説明 :

  • 各ノードプールを1つのゾーンのみに関連付け、ノードプールの自動スケーリング機能を有効にします。

    現在のゾーンでノードを使用できない場合、システムはポッドスケジューリングのために別のゾーンのノードを自動的に選択できます。 次の図は、設定を示しています。pod

  • ゾーン間で同じタイプのECSインスタンスを使用します。

    ECSとブロックストレージは相関しています。 一部のノードが要求されたブロックストレージリソースをサポートしない場合、ゾーン内のポッドスケジューリングは失敗する可能性があります。 その結果、ディスクマウント不良によりポッドを起動できなくなる。

推奨されるクラスター設定

  • クラスタのバージョンが1.20以降であることを確認してください。

  • Container Storage Interface (CSI) プラグインのバージョンが1.22以降であることを確認してください。 詳細については、「csi-provisioner」をご参照ください。

  • 高可用性用に複数のタイプのディスクを指定するには、次のStorageClassテンプレートを使用します。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-disk-topology-alltype
    parameters:
      type: cloud_essd,cloud_ssd,cloud_efficiency
    provisioner: diskplugin.csi.alibabacloud.com
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.diskplugin.csi.alibabacloud.com/zone
        values:
        - cn-beijing-a
        - cn-beijing-b

パラメーターの説明:

  • type: cloud_essd,cloud_ssd,cloud_efficiency:

    このパラメータは、CSIプラグインが好ましくはエンタープライズSSD (ESSD) を作成することを保証する。 ゾーン内のESSDが不十分である場合、CSIプラグインはSSDを作成する。 これにより、ディスクリソース不足によるアプリケーションの起動失敗を防ぐことができます。

  • volumeBindingMode: WaitForFirstConsumer:

    Kubernetesが提供するディスク作成モードを指定します。 このモードでは、ポッドが特定のノードにスケジュールされた後にのみ、CSIプラグインはStorageClassに基づいてディスクを作成します。 このようにして、ポッドがスケジュールされているノードの情報に基づいてディスクを作成できます。

  • allowedTopologies:

    このパラメータは、プロビジョニングされたボリュームのトポロジのゾーンを制限します。 StorageClassがWaitForFirstConsumerモードを使用する場合、ディスクはStorageClassを使用して指定されたトポロジでのみ作成できるため、スケジューラは指定されたトポロジにポッドをスケジュールします。

推奨されるアプリケーション設定

次のサンプルコードは、標準のStatefulSetテンプレートの例を示しています。 ビジネス要件に基づいてテンプレートをカスタマイズできます。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql"
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      topologySpreadConstraints:
      - labelSelector:
          matchLabels:
            app: mysql
        maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: ScheduleAnyway
      containers:
      - image: mysql:5.6
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql"
        volumeMounts:
        - name: disk-csi
          mountPath: /var/lib/mysql
      tolerations:
      - key: "app"
        operator: "Exists"
        effect: "NoSchedule"
  volumeClaimTemplates:
  - metadata:
      name: disk-csi
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: alicloud-disk-topology-alltype
      resources:
        requests:
          storage: 40Gi

パラメーターの説明:

  • topologySpreadConstraints:

    このパラメーターにより、アプリケーションによって作成されたポッドが異なるゾーンにスケジュールされ、高可用性が実装されます。 詳細については、「ポッドトポロジの広がり制約」をご参照ください。

  • volumeClaimTemplates:

    このパラメーターを使用して、レプリケートされた各ポッドのディスクを自動的に作成できます。 これにより、ストレージリソースをすばやくスケールアウトできます。

重要
PVが動的にプロビジョニングされると、PVのYAMLファイルには、PVがマウントされているノードのゾーンに関する情報が含まれます。 PVおよび関連するPVCは、ノードのゾーン内でのみスケジュールすることができる。 これにより、PVをポッドに確実に取り付けることができます。

関連ドキュメント