クロスゾーンデプロイメントのストレージ設定を最適化して、アプリケーションリリースの中断を大幅に削減し、障害が発生した場合でも主要なビジネスシステムとアプリケーションを期待どおりに実行できるようにすることができます。 このトピックでは、クロスゾーンデプロイの推奨ストレージ設定について説明します。
背景情報
Kubernetesは強力なコンテナーオーケストレーション機能を提供し、Kubernetes上で大規模なステートフルアプリケーションを簡単に開発するのに役立ちます。 Kubernetesは、アプリケーションの配布とデプロイを大幅に簡素化し、基盤となるハードウェアロジックをユーザーから隠します。 しかしながら、これは、以下の問題を引き起こし得る。
クロスゾーンクラスター内のアプリケーションは、目的のゾーンであるゾーンaではなく、ゾーンBに誤ってデプロイされます。
永続ボリューム (PV) と永続ボリューム要求 (PVC) を作成してディスクをマウントすると、InvalidDataDiskCatagory.NotSupportedエラーメッセージが表示されます。 詳細については、「」をご参照ください。動的にプロビジョニングされたPVを作成するときに、システムプロンプトInvalidDataDiskCatagory.NotSupportedが表示されるのはなぜですか。 「ディスクボリュームに関するFAQ」トピックのセクション。
ディスクをアプリケーションにマウントすると、指定されたインスタンスのinstanceTypeがこのディスクカテゴリをサポートしていませんというエラーメッセージが表示されます。
アプリケーションをデバッグすると、0/xノードが使用可能です。xノードにボリュームノードアフィニティの競合がありましたエラーメッセージが報告されます。
上記の問題は、アプリケーションのリリースを中断できます。 これらの問題を軽減するために、このトピックで提供されているクロスゾーン展開の推奨ストレージ設定を使用できます。
推奨ストレージ設定
Apsara File Storage NAS (NAS) ファイルシステムの代わりにディスクを使用して、データを永続的に保存します。 ディスクはNASファイルシステムよりも安定しており、データ転送の帯域幅が広くなります。
3つのゾーンにクラスターをデプロイして、十分なノードとストレージリソースを確保します。
クラスターのゾーンでノードを使用できない場合は、ノードを追加します。
複数のタイプのディスクを使用して、マウントの失敗を防ぎます。
アプリケーションが異なるゾーンのノードに均等に分散できることを確認してください。
推奨ノードプールの設定
各ノードプールが1つのゾーンにのみ関連付けられていることを確認し、新しく追加されたゾーンごとにノードプールを作成します。 詳細については、「ノードプールの作成」をご参照ください。
重要各ノードプールが異なるゾーンに関連付けられていることを確認します。 ノードプール名にゾーンIDを指定することを推奨します。
ノードプールの自動スケーリング機能を有効にします。 詳細については、「ノードの自動スケーリングの有効化」をご参照ください。
ゾーン間で同じタイプのElastic Compute Service (ECS) インスタンスを使用するか、同じタイプのブロックストレージをサポートするECSインスタンスを使用します。
ノードプール内のすべてのノードにテイントを追加して、他のアプリケーションポッドがノードにスケジュールされず、現在のアプリケーションに悪影響を与えないようにします。
設定説明 :
各ノードプールを1つのゾーンのみに関連付け、ノードプールの自動スケーリング機能を有効にします。
現在のゾーンでノードを使用できない場合、システムはポッドスケジューリングのために別のゾーンのノードを自動的に選択できます。 次の図は、設定を示しています。
ゾーン間で同じタイプの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をポッドに確実に取り付けることができます。
関連ドキュメント
ディスクボリュームのデータセキュリティを強化する方法の詳細については、「ディスクボリュームのデータセキュリティに関するベストプラクティス」をご参照ください。
ディスクをリアルタイムで監視する方法の詳細については、「csi-pluginを使用したノード側のストレージリソースの監視」をご参照ください。
ディスクサイズがビジネス要件を満たしていない場合、またはディスクがいっぱいになっている場合にディスクを拡張する方法の詳細については、「ディスクボリュームの拡張」をご参照ください。
ディスクマウントの問題の詳細については、「ディスクボリュームに関するFAQ」をご参照ください。