著者: Liu Jiaxu (ニックネーム: Jiaxu)、Alibaba Cloud コンテナ サービス技術専門家
導入
クラウド ネイティブ テクノロジの急速な発展と、エンタープライズ IT 分野でのその応用の深化に伴い、エンタープライズ サービスの可用性、安定性、セキュリティにとって、クラウド ネイティブ シナリオにおける高可用性アーキテクチャの重要性がますます高まっています。合理的なアーキテクチャ設計とクラウド プラットフォームの技術サポートを通じて、クラウド ネイティブの高可用性アーキテクチャは、高可用性、柔軟な拡張性、簡素化された運用および保守管理、信頼性とセキュリティの向上、その他の利点を提供し、企業により信頼性が高く効率的なサービスを提供します。動作環境。
Kubernetes は、クラウド ネイティブのコア テクノロジの 1 つです。インフラストラクチャの自動化、柔軟なスケーラビリティ、マイクロサービス アーキテクチャ、自動化された運用とメンテナンスなどのコンテナ オーケストレーションおよび管理機能を提供します。そのため、Kubernetes のアプリケーション高可用性アーキテクチャはクラウド ネイティブであり、可用性が高くなります。礎石。この記事では、Alibaba Cloud Container Service for Kubernetes (ACK) を例として、ACK に基づく高可用性アーキテクチャとアプリケーションのガバナンスのベスト プラクティスを紹介します。
アプリケーションの高可用性アーキテクチャの設計
クラウド ネイティブ アプリケーションの高可用性アーキテクチャ設計は、アプリケーションの高可用性開発、展開、ガバナンスにとって重要な前提条件であり、次の側面から検討できます。
1. クラスター設計:クラスターのコントロール プレーンとデータ プレーンのコンポーネントとノードは、マルチノードおよびマルチコピーの高可用性を備えて展開され、K8s クラスターの高可用性を確保します。ACK を例に挙げると、コントロール プレーンとデータ プレーンをカバーするクラスターの高可用性機能が提供されます。コントロール プレーンでは、ACK Pro マネージド バージョン クラスタのコントロール プレーン コンポーネントは、複数のコピーを使用してアベイラビリティ ゾーン全体に展開され、コントロール プレーンの負荷圧力に基づいて自動的に伸縮します。ACK 独自バージョンは 3 つまたは 5 つのマスターで構成できます。ノード。データ側では、ACK はユーザーがアベイラビリティ ゾーンおよび ECS デプロイメント セット全体にノードをデプロイおよび追加することを選択できるようにサポートします。
2. コンテナ設計:アプリケーションはクラスタ内に複数のコピーを使用してデプロイされ、アプリケーションのコピーはデプロイメント、Statefulset、OpenKruise CRD に基づいて管理され、アプリケーションの高可用性を実現します。アプリケーションが負荷の動的な変化に対処できるように自動エラスティック ポリシーが構成されます。 。マルチコピー Pod のシナリオでは、プライマリ ロールとセカンダリ ロールにコピーがあるかどうかに応じて、プライマリとセカンダリの高可用性とマルチアクティブな高可用性に分けることができます。
3. リソースのスケジューリング: K8s スケジューラを使用して、アプリケーションの負荷分散とフェイルオーバーを実現します。ラベルとセレクターを使用してアプリケーションのデプロイメント ノード範囲を指定し、アフィニティ、アンチアフィニティ、およびトポロジ スケジューリング制約ルールを使用してアプリケーションのスケジューリング戦略を制御し、ノード、アベイラビリティ ゾーン、デプロイメント セット、トポロジ ドメインなどごとにポッドを実装します。 さまざまなカテゴリ高可用性を実現します。
4. ストレージ設計:データ損失を避けるために、ストレージをマウントするための K8s 永続ボリュームなど、アプリケーション データを保存するために永続ストレージを使用します。ステートフル アプリケーションの場合は、StatefulSet を使用して、ステートフル アプリケーションのレプリカとストレージ ボリュームを管理します。
5. 障害回復: K8s の自動回復メカニズムを使用して、アプリケーション障害を処理します。ヘルスチェックと自動再起動を使用して、アプリケーションの健全性を監視し、アプリケーションに障害が発生した場合にはアプリケーションを自動的に再起動または移行することができます。
6. ネットワーク設計: K8s のサービス検出機能と負荷分散機能を使用してアプリケーション ネットワーク アクセスを実装し、Service と Ingress を使用してアプリケーション サービスを公開します。
7. 監視と警報: K8s 監視および警報システム (Prometheus、Thanos、AlertManager など) を使用して、アプリケーションの実行ステータスを監視し、タイムリーに障害を検出して処理します。
8. フルリンク高可用性設計:フルリンク高可用性とは、クラウド ネイティブ アプリケーション システムおよびサービスに含まれるすべてのコンポーネント、モジュール、サービス、ネットワーク、およびその他のリンクの高可用性を指します。フルリンクの高可用性は、システム全体のアーキテクチャ設計、コンポーネントの選択と構成、サービスの導入、運用と保守に至るまで、包括的な検討と実装が必要となる総合的な考慮事項です。同時に、特定のビジネス ニーズと技術要件に基づいて、適切な妥協とトレードオフを行う必要があります。
つまり、K8s アプリケーションの高可用性アーキテクチャを設計するには、信頼性が高く安定したアプリケーションの高可用性アーキテクチャと機能を実現するために、クラスタ、コンテナ、リソースのスケジューリング、ストレージ、障害回復、ネットワーク、アラームの監視などの要素を包括的に考慮する必要があります。上記の原則を参照することで、既存システムの高可用性変革も実装できます。
以下では、上記の設計原則に基づいて Kubernetes が提供するさまざまな高可用性テクノロジと、ACK に基づいた関連製品の実装を紹介します。
K8s 高可用性テクノロジーと ACK でのその応用
Kubernetes は、クラスターとアプリケーションの高可用性を確保するためのさまざまな高可用性テクノロジーとメカニズムを提供します。トポロジー分散制約、PodAntiAffinity、コンテナーのヘルスチェックと自動再起動、ストレージの冗長性と永続性、サービスの検出とロードバランシングなどが含まれます。これらのテクノロジーとメカニズムは、可用性の高い Kubernetes クラスターとアプリケーションを構築し、安定した信頼性の高いサービスを提供するのに役立ちます。これについては、以下で紹介します。
3.1 コントロール プレーン/データ プレーンは複数のアベイラビリティ ゾーンで高可用性を備えています
クラスタリングは、コントロール プレーンとデータ プレーンのノード/コンポーネントを異なる可用性ゾーンに展開することで高可用性を実現し、重要な高可用性アーキテクチャ設計手法です。アベイラビリティーゾーンは、地理的エリア内のクラウドプロバイダーによって提供される、論理的に独立したデータセンターです。ノードを異なるアベイラビリティーゾーンにデプロイすることで、1 つのアベイラビリティーゾーンに障害が発生したり利用できなくなった場合でも、クラスターがサービスを提供し続けることができます。
アベイラビリティ ゾーンに基づく K8s クラスタ ノードの高可用性設計のキー ポイントは次のとおりです。これを使用して、Kubernetes のアベイラビリティ ゾーンに基づいてコントロール プレーン/データ プレーン ノードの高可用性構成を実装できます。
-
複数のアベイラビリティーゾーンのオプション
単一障害点のリスクを軽減するには、クラスターに対してクラウド ベンダーがサポートする複数のアベイラビリティ ゾーンを選択します。
-
コントロール プレーン ノード/コンポーネントのデプロイ
コントロール プレーン ノードとコンポーネント (etcd、kube-apiserver、kube-controller-manager、kube-scheduler など) をさまざまなアベイラビリティ ゾーンにデプロイし、クラウド ベンダーのロード バランサーまたは DNS 解決を使用してトラフィックをバックエンドに分散します。複数の etcd ノードを使用して高可用性 etcd クラスターを構成し、それらを異なるアベイラビリティーゾーンに分散します。これにより、etcd ノードの 1 つに障害が発生した場合でも、クラスターは引き続き動作できることが保証されます。
-
データ プレーン ノードを展開する
データ プレーン ノードを複数のアベイラビリティ ゾーンに分散して、ポッドを異なるアベイラビリティ ゾーンにスケジュールして、クロス アベイラビリティ ゾーンの高可用性を実現します。
-
監視と自動回復監視システムを構成してクラスターの健全性を監視し、ノードまたはアベイラビリティーゾーンに障害が発生した場合の自動フェイルオーバーと回復のための自動回復メカニズムを設定します。
コントロール プレーン ノード/コンポーネントとデータ プレーン ノードを複数のアベイラビリティ ゾーンにデプロイすることで、Kubernetes クラスターの可用性とフォールト トレランスが向上し、単一のアベイラビリティ ゾーンまたはノードに障害が発生した場合でもクラスターがサービスを提供し続けることができます。
ACK は、コントロール プレーンとデータ プレーンをカバーするクラスターの高可用性機能を提供します。ACK コンテナ サービスは、Kubernetes on Kubernetes アーキテクチャを使用して、etcd、API サーバー、スケジューラなどのユーザーの Kubernetes クラスタ コントロール プレーン コンポーネントをホストします。各コントロール プレーン コンポーネントの複数のインスタンスは、高可用性アーキテクチャを使用してデプロイおよび管理されます。ACK Pro クラスターが配置されているリージョンのアベイラビリティーゾーンの数が 3 以上の場合、ACK Pro 管理対象クラスターのコントロール プレーンの SLA は 99.95% です。ACK Pro クラスターが配置されているリージョンのアベイラビリティーゾーンの数は 99.95% です。見つかった値が 2 以下の場合、ACK Pro が管理するクラスター コントロール プレーンの SLA は 99.50% です。
ACK コンテナ サービスは、ホスティング コンポーネントの高可用性、セキュリティ、柔軟な拡張と縮小を担当します。ACK Pro クラスターは、管理対象コンポーネントに完全な可観測性機能を提供し、ユーザーがクラスターのステータスを監視および警告できるようにします。
以下では、アベイラビリティ ゾーンによる高可用性のフラグメンテーションを制御するための一般的なテクノロジと、ACK シナリオでのその使用方法を紹介します。これらのテクノロジは、データ プレーンの高可用性シナリオで広く使用されています。
3.1.1 トポロジースプレッドの制約
Topology Spread Constraints は、Kubernetes クラスター内の Pod の分散を管理する機能です。これにより、Pod がさまざまなノードおよび可用性ゾーンに均等に分散され、アプリケーションの高可用性と安定性が向上します。このテクノロジーは、Deployment、StatefulSet、DaemonSet、および Job/CronJob のワークロードに適用されます。
トポロジー分散制約を使用すると、次の構成を設定して Pod の分散を制御できます。
-
マックススキュー
各トポロジドメイン内のPodの最大偏差値を指定します。トポロジ ドメインには、ノード、可用性ゾーン、またはその他のカスタム トポロジ ドメインを指定できます。最大偏差値は、クラスターの任意の 2 つのトポロジ ドメイン内のポッド間の最大差を表す整数です。たとえば、MaxSkew が 2 に設定されている場合、2 つのトポロジ ドメイン内のポッド数の差は 2 を超えてはなりません。
-
トポロジーキー
トポロジー・ドメインのラベルまたはアノテーションを識別するために使用されるキーを指定します。ノード ラベル (node.kubernetes.io/zone など)、またはカスタム ラベルやアノテーションを使用できます。
-
満足できない場合
トポロジー分布の制約を満たせない場合に実行するアクションを指定します。選択できる操作は、DoNotSchedule (Pod をスケジュールしない)、ScheduleAnyway (Pod を強制的にスケジュールする)、および RequireDuringSchedulingIgnoredDuringExecution (トポロジ分散制約を要求するが、強制しない) です。
これらの構成を使用すると、トポロジー分散制約を含むポリシーを作成し、目的のトポロジー分散に従ってポッドがクラスターにデプロイされるようにすることができます。これは、信頼性と可用性を向上させるために、異なるアベイラビリティーゾーンまたはノード間で負荷を均等に分散する必要があるアプリケーションに役立ちます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-run-per-zone
spec:
replicas: 3
selector:
matchLabels:
app: app-run-per-zone
template:
metadata:
labels:
app: app-run-per-zone
spec:
containers:
- name: app-container
image: app-image
topologySpreadConstraints:
- maxSkew: 1
topologyKey: "topology.kubernetes.io/zone"
whenUnsatisfiable: DoNotSchedule
上記の例では、maxSkew を 1 に設定し、topologyKey を「topology.kubernetes.io/zone」に設定し、whenUnsatisfiable を DoNotSchedule に設定して、トポロジ分散制約が作成されます。これは、ノードのラベル「topology.kubernetes.io/zone」(クラウドベンダーの可用性ゾーンに対応)で定義されたトポロジドメインと、トポロジ間のポッド数の最大差に従って、ポッドが可用性ゾーンごとに強制的に分散されることを意味します。ドメインは1です。このようにして、可能な限り可用性ゾーンに従って Workload Pod を分散し、スケジュールすることができます。
ACK K8s クラスター コントロール プレーンは、デフォルトでマルチ アベイラビリティ ゾーンの高可用性アーキテクチャを採用していますが、さらにデータ プレーンに対してマルチ アベイラビリティ ゾーン アーキテクチャを実装する必要があります。ACK クラスターのデータ プレーンは、ノード プールと仮想ノードで構成されます。各ノード プールは ECS インスタンスのグループであり、ユーザーはノード プールを通じてノードの管理、拡張、縮小、日常の運用とメンテナンスを行うことができます。仮想ノードは、エラスティック コンテナ インスタンス ECI を通じてサーバーレス コンテナ実行環境を提供できます。
各ノード プールの背後には Elastic Scaling Group (ESS) があり、ノードの手動拡張と自動拡張をサポートします。ACK ノード プールはデプロイメント セットをサポートしており、異なる物理サーバー上の同じデプロイメント セットに ECS インスタンスを分散してデプロイできるため、1 台の物理マシンの障害による複数の ECS インスタンスのダウンタイムを回避できます。ACK はマルチ AZ ノード プールもサポートしています。作成および運用中に、異なる AZ にまたがる複数の vSwitch をノード プールに対して選択できます。そして、スケーリング グループによって指定された (つまり、複数の VPC スイッチを指定して) ECS インスタンスが複数のアベイラビリティ ゾーン間で均等に分散できるように、バランスの取れた分散戦略を選択します。在庫不足などの理由で可用性ゾーンのバランスが崩れた場合は、バランシング操作を実行して、可用性ゾーンのリソース配分のバランスを調整できます。
ノード、デプロイメントセット、AZ などのさまざまな障害ドメインのメタ情報に基づいて、K8s スケジューリングのトポロジー分散制約 (トポロジー分散制約) と組み合わせることで、さまざまなレベルの障害ドメイン分離機能を実現できます。まず、ACK ノード プール内のすべてのノードは、「kubernetes.io/hostname」、「topology.kubernetes.io/zone」、「topology.kubernetes.io/region」などのトポロジ関連のラベルを自動的に追加します。開発者は、トポロジー分散制約を使用して、さまざまな障害ドメイン間での Pod の分散を制御し、基盤となるインフラストラクチャ障害に対する耐性を向上させることができます。
3.1.2 トポロジ分布制約と NodeAffinity/NodeSelector の関係
トポロジ分散制約と NodeAffinity/NodeSelector の関係は、ノード アフィニティとノード セレクタは主に特定範囲のノードへの Pod のスケジューリングを制御するために使用され、トポロジ分散制約は異なるトポロジ ドメイン間の Pod の分散を制御することに重点を置いています。 。これらのメカニズムを組み合わせて、Pod のスケジューリングと分散をより詳細に制御できます。
NodeAffinity および NodeSelector は、トポロジ分散制約とともに使用できます。まず NodeAffinity と NodeSelector を使用して特定の条件を満たすノードを選択し、次にトポロジ分散制約を使用して、これらのノード上の Pod の分散が予想されるトポロジ分散要件を満たしていることを確認できます。
詳細については [1]を参照してください。
トポロジー分散制約を伴うノード アフィニティとノード セレクターの混合使用については、 [2]を参照してください。
3.1.3 トポロジカル分布制約の欠点
トポロジー分散制約にはいくつかの制限と欠点があるため、注意する必要があります。
-
アベイラビリティーゾーンの数の制限: アベイラビリティーゾーンの数が非常に限られている場合、または使用可能なアベイラビリティーゾーンが 1 つだけの場合、トポロジー分散制約を使用しても利点が得られない可能性があります。この場合、真の可用性ゾーンの障害分離と高可用性は実現できません。
-
ポッドが削除された場合、制約がまだ満たされているという保証はありません。たとえば、デプロイメントをスケールダウンすると、ポッドの分散が不均一になる可能性があります。
-
スケジューラは、クラスタ内のすべての領域または他のトポロジ ドメインについての事前知識を持っていません。これらは、クラスター内の既存のノードに基づいて決定されます。これにより、ノード プール (またはノード グループ) がノード 0 に削減され、ユーザーがクラスターがスケーリングできることを期待している場合、自動スケーリング クラスターで問題が発生する可能性があります。その時点では、これらのトポロジ ドメインは少なくとも考慮されません。その中にノードが入っています。
詳細については、 [3]を参照してください。
3.1.4 複数のアベイラビリティ ゾーンにより、同時かつ迅速な弾性拡張を実現
ACK ノードの自動スケーリング コンポーネントは、事前スケジュールを通じてサービスを特定のスケーリング グループにデプロイできるかどうかを判断し、指定されたスケーリング グループにインスタンスの数を拡張するリクエストを送信し、最後に ESS スケーリング グループがインスタンスを生成します。 。ただし、スケーリング グループ上で複数のアベイラビリティ ゾーン vSwtich を構成するこのモデル機能では、次の問題が発生します。
クラスターリソースが不十分なためにマルチ AZ ビジネスポッドをスケジュールできない場合、ノード自動スケーリングサービスはスケーリンググループの拡張をトリガーしますが、アベイラビリティーゾーンと拡張する必要があるインスタンスの間の関係をアベイラビリティーゾーンに渡すことはできません。同時に複数の vSwtich にポップアップするのではなく、特定のリージョンに複数のインスタンスがあると、複数のアベイラビリティ ゾーンでの同時拡張のニーズを満たすことができません。
マルチアベイラビリティ ゾーン バランシングは、データ型の高可用性シナリオにおける一般的な展開方法です。ビジネスのプレッシャーが高まると、マルチアベイラビリティーゾーンのバランスの取れたスケジューリング戦略を適用することで、クラスターのスケジューリングレベルを満たすために複数のアベイラビリティーゾーンのインスタンスを自動的に拡張することが期待されます。
複数のアベイラビリティ ゾーンでノードを同時に拡張する問題を解決するために、Container Service ACK には ack-autoscaling-placeholder コンポーネントが導入されています。このコンポーネントは、少量のリソース冗長性を使用して、複数のアベイラビリティ ゾーンの柔軟なスケーリング問題を方向性のあるスケーリング問題に変換します。同時ノード プールの数。
具体的な原則は次のとおりです。
-
まず、各アベイラビリティ ゾーンのノード プールを作成し、各ノード プールにアベイラビリティ ゾーンのラベルを付けます。
-
アベイラビリティ ゾーン ラベルの nodeSelector を設定することで、ack-autoscaling-placeholder を使用して、各アベイラビリティ ゾーンのプレースホルダー ポッドを作成します。デフォルトのプレースホルダー ポッドには比較的低重みの PriorityClass があり、アプリケーション ポッドの優先順位はプレースホルダー ポッドよりも高くなります。
-
このようにして、ビジネスがポッド保留を適用した後、各アベイラビリティーゾーンのポッドをプリエンプトします。可用性ゾーンのノードノードセレクターを持つマルチアベイラビリティーゾーンのポッドが保留中になると、ノード自動スケーリングコンポーネントによって認識されるスケジューリングポリシーは次のようになります。アンチアフィニティはアベイラビリティーゾーンのノードセレクターになり、拡張ゾーンを発行するノードからのリクエストの処理が容易になります。
下図の 2 つのアベイラビリティ ゾーンを例に、既存のアーキテクチャを利用して複数のアベイラビリティ ゾーンの同時拡張に対応する方法を紹介します。
詳細については [4]を参照してください。
3.1.5 アベイラビリティゾーンの容量が損傷した後の自動回復
マルチゾーンの高可用性クラスターで AZ 障害が発生した場合、アプリケーションの容量が損傷していることが多く、K8s はアプリケーションのコピー数または HPA (水平ポッド スケーリング) 構成に基づいて容量を自動的に拡張します。これには、クラスター リソースの自動拡張を実現するために、クラスターをクラスター AutoScaler または仮想ノードで構成する必要があります。Cluster AutoScaler を使用すると、過剰割り当てを通じてリソースを予約できるため、コンテナ アプリケーションを迅速に起動し、基盤となる拡張の遅さや失敗によるビジネスの中断を回避できます。詳細については [5]を参照してください。
3.2 ノードごとに Pod アンチアフィニティを適用する (PodAntiAffinity)
ポッド アンチアフィニティは、ポッドをスケジュールするときに同じノードにスケジュールされないようにするために使用される Kubernetes のスケジューリング戦略です。これを使用して Pod ノードを分散し、アプリケーションの高可用性と障害分離機能を向上させることができます。
ポッドのアンチアフィニティ ポリシーを使用すると、次の方法を設定してポッドのノード分散を制御できます。
1.スケジューリング中に必須、実行中に無視
これは、スケジューリング時にポッド間の非アフィニティ関係が満たされることを要求する強制ポリシーです。これは、Kubernetes スケジューラが、ポッドをスケジュールするときに、それらが同じノード上でスケジュールされないよう最善を尽くすことを意味します。ただし、スケジュール設定後、ノードのリソースが不十分な場合、またはその他の理由によりこれらのポッドを同じノードで実行する必要がある場合、Kubernetes はこの反アフィニティ ポリシーを無視します。
2.スケジュール中は優先、実行中は無視
これは、Pod 間の非アフィニティ関係を維持することを推奨する推奨戦略ですが、必須ではありません。スケジューラに複数の選択肢がある場合、同じノード上でこれらの Pod をスケジュールすることを回避しようとします。ただし、他に利用可能なオプションがない場合でも、スケジューラは同じノード上でこれらの Pod をスケジュールできます。
ポッドのアンチアフィニティ ポリシーを使用すると、クラスター内のポッドの分散を制御し、同じノード上でポッドをスケジュールすることを回避し、ノードの分散を実現できます。これは、可用性と障害分離を向上させるために、別のノードでポッドを実行する必要があるアプリケーションに役立ちます。
以下は Pod アンチアフィニティの例です。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-run-per-node
spec:
replicas: 3
selector:
matchLabels:
app: app-run-per-node
template:
metadata:
labels:
app: app-run-per-node
spec:
containers:
- name: app-container
image: app-image
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- app-run-per-node
topologyKey: "kubernetes.io/hostname"
上記の例では、Pod に非アフィニティ設定が設定されており、スケジューラは、スケジューリング時にこれらの Pod が同じノードにスケジュールされないようにする必要があります。トポロジ キーは「kubernetes.io/hostname」に設定されており、スケジューラーが異なるノード間で分散できるようになります。
ポッドのアンチアフィニティとノード アフィニティ (Node Affinity) は異なる概念であることに注意してください。ノード アフィニティは、Pod が特定のラベルを持つノード上でスケジュールされることを優先するように指定するために使用され、Pod アンチアフィニティは、Pod が同じノードにスケジュールされないようにするために使用されます。これら 2 つのスケジューリング戦略を組み合わせることで、より柔軟でフォールトトレラントなスケジューリングとノード分散が可能になります。
TopologySpreadConstraints に基づいて、ノードごとに Pod の高可用性スケジューリング効果を実現することもできます。topologyKey: "kubernetes.io/hostname" を指定することは、各ノードがトポロジ ドメインであることに相当し、ノード間のスキュー比較を実現します。次に、トポロジ分散制約の例を示します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-app-image
topologySpreadConstraints:
- maxSkew: 1
topologyKey: "kubernetes.io/hostname"
whenUnsatisfiable: DoNotSchedule
上記の例では、maxSkew を 1 に設定し、topologyKey を「kubernetes.io/hostname」に設定し、whenUnsatisfiable を DoNotSchedule に設定して、トポロジ分散制約が作成されます。これは、高可用性を実現するためにノードごとにポッドを強制的に分散させるために、各ノードで実行できるポッドは 1 つだけであることを意味します。
3.3 アプリケーションのマルチコピーの高可用性
Kubernetes では、デプロイメント、Statefulset、OpenKruise などの CRD 高度なリソースなど、さまざまなワークロードに基づいてアプリケーションのマルチコピー高可用性を実現できます。Deployment を例にとると、Deployment リソースは Pod のコピー数を定義するために使用されるコントローラーであり、指定された数のコピーが常に実行されていることを確認し、コピーが失敗した場合には自動的に新しいコピーを作成する役割を果たします。
3.3.1 アプリケーションのマルチアクティビティと高可用性
アプリケーションのマルチアクティビティと高可用性とは、アプリケーションの複数のコピーがトラフィックを受信してサービスを個別に処理できることを意味します。コピーの数は HPA を通じて構成でき、負荷圧力によってトリガーされる自動弾力性を使用して、動的トラフィックに適応できます。 API サーバーおよび Nginx Ingress コントローラーとして。この形式の高可用性設計では、データの一貫性や複数のコピーのパフォーマンスなどの問題を考慮する必要があります。
3.3.2 アプリケーションのアクティブおよびバックアップの高可用性
アプリケーションのマスターとバックアップの高可用性とは、アプリケーションの複数のコピーにマスター コピーとバックアップ コピーが存在することを意味します。最も一般的なのは、1 つのマスターと 1 つのバックアップです。1 つのマスターと複数のスレーブなど、より複雑な形式もありますマスターはロック取得などの方法に基づいて選択され、コントローラーの形式で適用可能なコンポーネントです。たとえば、Etcd、KubeControllerManager、および KubeScheduler はすべて、アクティブ モードとバックアップ モードの高可用性アプリケーションです。
ユーザーは、自社のビジネス形態やシナリオに合わせて、マルチアクティブまたはアクティブスタンバイを使用するようにコントローラーを設計できます。
3.3.3 PDB によりアプリケーションの高可用性が向上
アプリケーションの可用性をさらに向上させるために、Kubernetes では Pod Disruption Budget (PDB) 構成を使用することもできます。PDB を使用すると、ユーザーは使用可能なレプリカの最小数を定義でき、ノードのメンテナンスや障害が発生した場合、Kubernetes は少なくとも指定された数のレプリカが実行されたままであることを保証します。PDB は、同時に終了されるレプリカが多すぎるのを防ぐことができます。これは、MessageQueue 製品など、複数のライブ レプリカがトラフィックを処理するシナリオに特に適しており、それによってサービスの中断を回避できます。
PDB を使用するには、PDB リソースを Deployment または StatefulSet の構成に追加し、使用可能なレプリカの最小数を指定します。たとえば、次は PDB を使用したデプロイメント構成の例です。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-with-pdb
spec:
replicas: 3
selector:
matchLabels:
app: app-with-pdb
template:
metadata:
labels:
app: app-with-pdb
spec:
containers:
- name: app-container
image: app-container-image
ports:
- containerPort: 80
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: pdb-for-app
spec:
minAvailable: 2
selector:
matchLabels:
app: app-with-pdb
上記の例では、デプロイメント構成は 3 つのレプリカを定義し、PDB 構成は少なくとも 2 つのレプリカを使用可能な状態に保つように指定しています。つまり、ノードのメンテナンス中や障害中であっても、Kubernetes は少なくとも 2 つのレプリカが常に実行されていることを保証し、Kubernetes クラスター内のアプリケーションの可用性を向上させ、サービス中断の可能性を減らします。
3.4 健全性の検出と自己修復
Kubernetes では、さまざまな種類のプローブを構成することで、コンテナーのステータスと可用性を監視および管理できます。Kubernetes で一般的に使用されるプローブ構成と戦略は次のとおりです。
-
Liveness プローブLiveness プローブは、コンテナーがまだ正常に実行されているかどうかを監視するために使用されます。liveness プローブが失敗した場合 (200 以外のステータス コードを返した場合)、Kubernetes はコンテナを再起動します。Survival Probe を構成すると、問題が発生したときにコンテナーが自動的に再起動できるようになります。Liveness プローブは、HTTP リクエスト、TCP ソケット、またはコマンド実行を使用して検出できます。
-
Readiness プローブReadiness プローブは、コンテナーがトラフィックを受信する準備ができているかどうかを監視するために使用されます。Kubernetes は、readiness プローブが成功した場合 (ステータス コード 200 を返した場合) にのみ、トラフィックをコンテナに転送します。readiness プローブを構成すると、コンテナーが完全に開始され、リクエストを受信する準備ができた場合にのみ、サービスのロード バランサーにコンテナーが追加されるようにすることができます。
-
起動プローブ起動プローブは、コンテナが起動しているかどうかを監視するために使用されます。liveness プローブや readiness プローブとは異なり、起動プローブはコンテナーの起動中に実行され、コンテナーはプローブが成功した後にのみ準備完了としてマークされます。プローブの開始が失敗した場合、Kubernetes はコンテナーを失敗としてマークし、コンテナーを再起動します。
-
再起動ポリシー 再起動ポリシーは、コンテナが終了したときに実行する必要があるアクションを定義します。Kubernetes は、次の 3 つの再起動戦略をサポートしています。
<!---->
-
- Always: Kubernetes は、コンテナーがどのように終了したかに関係なく、コンテナーを自動的に再起動します。
- OnFailure: Kubernetes は、コンテナーがゼロ以外のステータスで終了した場合にのみ、コンテナーを自動的に再起動します。
- Never: Kubernetes は、コンテナがどのように終了しても、コンテナを自動的に再起動しません。
これは、ポッドまたはデプロイメントの構成に対応するプローブと再起動ポリシーを追加することで構成できます。次に例を示します。
apiVersion: v1
kind: Pod
metadata:
name: app-with-probe
spec:
containers:
- name: app-container
image: app-image
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 10
periodSeconds: 5
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
startupProbe:
exec:
command:
- cat
- /tmp/ready
initialDelaySeconds: 20
periodSeconds: 15
restartPolicy: Always
上記の例では、liveness プローブ (HTTP GET リクエストを通じてパス /health を持つポート 80 を検出)、readiness プローブ (TCP ソケットを通じてポート 8080 を検出)、および起動プローブ (コマンド cat /tmp/ready を使用)コンテナが開始されているかどうかを検出します)、再起動ポリシーは常にです。実際のニーズに応じて、コンテナの特性とヘルスチェック要件に基づいて適切な構成を行うことができます。
3.5 アプリケーションとデータの分離
Kubernetes では、Persistent Volume (PV) と Persistent Volume Claims (PVC) を使用してアプリケーションとデータの分離を実現することも、適切なバックエンド データベース サービス ストレージを選択することもできます。
PV と PVC は、アプリケーションが基礎となるストレージ テクノロジとは独立して使用できる抽象化レイヤーを提供します。永続ボリュームはクラスター内のストレージ リソースであり、ポッドやノードから独立しています。Persistent Volume Claim は、ストレージ リソースをアプリケーションのポッドにバインドするために使用される Persistent Volume に対するリクエストです。
適切な Persistent Volume Claims と Persistent Volume を選択するには、考慮すべき要素がいくつかあります。
-
ストレージタイプ
アプリケーションのニーズに基づいて、適切なストレージ タイプを選択してください。Kubernetes は、ローカル ストレージ、ネットワーク ストレージ (NFS、iSCSI など)、クラウド プロバイダーの永続ストレージ (Alibaba Cloud OSS など)、外部ストレージ プラグイン (Ceph など) を含むさまざまなストレージ タイプをサポートします。 、GlusterFS など)。アプリケーションの読み取りおよび書き込みパフォーマンス、データ保護、可用性の要件に基づいて、適切なストレージ タイプを選択してください。
-
ストレージ
アプリケーションのストレージのニーズに基づいて、適切なストレージ容量を選択してください。永続ボリュームを作成するときに、ストレージ容量のサイズ範囲を指定できます。Persistent Volume Claim を作成するときに、必要なストレージ容量を指定できます。データ ストレージのニーズを満たすのに十分なストレージ領域をアプリケーションに提供するようにしてください。
-
アクセスモード
アプリケーションのアクセス モードに基づいて、適切なアクセス モードを選択します。Kubernetes は、一貫した読み取りと書き込み (ReadWriteOnce)、複数回の読み取りと書き込み (ReadWriteMany)、読み取り専用 (ReadOnlyMany) などの複数のアクセス モードをサポートします。アプリケーションのマルチノード アクセスのニーズに基づいて、適切なアクセス モードを選択します。
RDS などの適切なバックエンド データ サービスを選択する場合は、次の要素を考慮する必要があります。
-
データベースの種類と機能
アプリケーションのニーズに基づいて、適切なデータベースの種類を選択してください。リレーショナル データベース (MySQL、PostgreSQL など)、NoSQL データベース (MongoDB、Cassandra など) などのデータベースの種類が異なると、異なる機能と適応性が提供されます。アプリケーションのデータ モデルとクエリのニーズに基づいて、適切なデータベース タイプを選択します。
-
パフォーマンスとスケーラビリティ
アプリケーションのパフォーマンス要件に基づいてバックエンド データ サービスを選択します。データベースのパフォーマンス指標 (スループット、レイテンシーなど) とそのスケーリング能力を考慮してください。
-
可用性と信頼性
バックエンド データ サービスを選択するときは、可用性と信頼性を考慮してください。クラウド プロバイダーのマネージド データベース サービスは通常、高可用性と自動バックアップ機能を提供します。アプリケーションの可用性とデータ保護のニーズを満たすバックエンド データ サービスを必ず選択してください。
3.6 負荷分散の高可用性構成
従来の負荷分散 CLB は、ほとんどのリージョンに複数のアベイラビリティ ゾーンをデプロイして、同じリージョン内でマシン ルーム間のディザスタ リカバリを実現していました。サービス アノテーションを使用して、SLB/CLB のアクティブ アベイラビリティ ゾーンとバックアップ アベイラビリティ ゾーンを指定できます。アクティブ アベイラビリティ ゾーンとバックアップ アベイラビリティ ゾーンは、ノード プール内の ECS アベイラビリティ ゾーンと一致している必要があります。これにより、アベイラビリティ ゾーン間のデータ転送が削減され、ネットワーク アクセスが向上します。パフォーマンス。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-master-zoneid: "cn-hangzhou-a"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-slave-zoneid: "cn-hangzhou-b"
name: nginx
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: LoadBalancer
クロスアベイラビリティゾーンのネットワークトラフィックを削減し、ネットワークパフォーマンスを向上させるため。Kubernetes 1.23 で導入された Topology Aware Hints を使用して、トポロジーを認識した最近接ルーティング機能を実装できます。
3.7 クラウドディスクの高可用性構成
現在、Alibaba Cloud クラウド ディスクは単一のアベイラビリティ ゾーンでのみ作成およびマウントできます。マルチ アベイラビリティ ゾーン クラスタ内の永続アプリケーションのデータ ストレージとしてクラウド ディスクを使用するには、トポロジ対応のクラウド ディスク ストレージ タイプ alicloud- を選択する必要があります。 ACK によって提供されるディスク トポロジ [6]を使用して、Persistent VolumeClaim を作成します。このストレージ クラスのボリューム バインディング モードは、デフォルトで WaitForFirstConsumer に設定されており、対応するアベイラビリティ ゾーンで Persistent VolumeClaim が作成されるまで遅延バインディングをサポートします。マルチ アベイラビリティ ゾーン トポロジ認識を指定してストレージ ボリュームを生成する、より洗練された ESSD クラウド ディスク ストレージ クラスを作成できます。ストレージ宣言と永続化アプリケーションは次のとおりです。詳細については、ドキュメント [7] を参照して ください。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alicloud-disk-topology-essd
provisioner: diskplugin.csi.alibabacloud.com
parameters:
type: cloud_essd
fstype: ext4
diskTags: "a:b,b:c"
zoneId: “cn-hangzhou-a,cn-hangzhou-b,cn-hangzhou-c” #指定可用区范围来生成云盘
encrypted: "false"
performanceLevel: PL1 #指定性能类型
volumeExpandAutoSnapshot: "forced" #指定扩容编配的自动备份开关,该设置仅在type为"cloud_essd"时生效。
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
allowVolumeExpansion: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: topology-disk-pvc
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 100Gi
storageClassName: alicloud-disk-topology-essd
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql"
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "mysql"
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: topology-disk-pvc
3.8 仮想ノードの高可用性構成
仮想ノードは、エラスティック コンテナ インスタンス ECI にデプロイされる Kubernetes アプリケーションをサポートしているため、ノードの運用とメンテナンスの必要性がなくなり、オンデマンドでノードを作成できるため、予約されたリソースの無駄が削減されます。突発的なトラフィックに対応するためにビジネスを急速に水平展開する場合や、ジョブタスクを処理するために多数のインスタンスを起動する場合、アベイラビリティゾーン内で対応する仕様のインスタンスの在庫が不足したり、指定されたスイッチ IP が枯渇したりする状況が発生する可能性があります。 ECI インスタンスの作成に失敗しました。ACK サーバーレスのマルチアベイラビリティーゾーン機能を使用すると、ECI インスタンスの作成の成功率を向上させることができます。
ECI プロファイルを通じて異なる AZ 間で vSwitch を構成することで、複数の AZ アプリケーション間で仮想ノードをデプロイできます。
- ECI は、圧力を分散する効果を得るために、Pod を作成するリクエストをすべての vSwitch に分散します。
- ポッド作成リクエストで vSwitch にインベントリがない状況が発生した場合、自動的に次の vSwitch に切り替えて作成を試行し続けます。
実際のニーズに応じて、kube-system/eci-profile configmap の vswitch フィールドを変更すると、変更はすぐに有効になります。
kubectl -n kube-system edit cm eci-profile
apiVersion: v1
data:
kube-proxy: "true"
privatezone: "true"
quota-cpu: "192000"
quota-memory: 640Ti
quota-pods: "4000"
regionId: cn-hangzhou
resourcegroup: ""
securitygroupId: sg-xxx
vpcId: vpc-xxx
vswitchIds: vsw-xxx,vsw-yyy,vsw-zzz
kind: ConfigMap
関連するコンテンツは [8] にあります 。
3.9 アラーム設定の監視
K8s 自体や kube-state-metrics などのコンポーネントによって明らかにされる指標を通じて、ポッドやノードなどのリソースの高可用性と利用可能なゾーンの分布を効果的に監視できます。これは、問題を迅速に発見して特定するために非常に重要です。本番環境では、監視・警報システムは継続的に構築され、K8sのバージョンアップやコンポーネントのバージョンアップに合わせて更新が繰り返されるため、常に新しい指標に注目し、ビジネスシナリオに応じて監視・警報システムに導入することをお勧めします。以下に、リソースの高可用性のための 2 つのアラーム設定を参考として示します。
3.9.1 アプリケーションのロードコピーが利用できないというアラームの監視
K8s の kube-state-metrics は、アプリケーション負荷の Deployment/Statefulset/Daemonset の使用できないコピーの数、コピーの総数などを集計して分析することができ、この種の指標に基づいて、アプリケーション内に使用できないコピーがあるかどうかを確認できます。コピーの合計数に占める使用できないコピーの割合 部分的または完全に影響を受けるサービスの監視と警告を実現します。
Deployment を例として、AlertManager/Thanos Ruler のアラームの例は次のとおりです。
# kube-system或者monitoring中的Deployment存在不可用副本,持续1m,则触发告警,告警serverity配置为L1
- alert: SystemPodReplicasUnavailable
expr: kube_deployment_status_replicas_unavailable{namespace=~"kube-system|monitoring",deployment!~"ack-stub|kubernetes-kdm"} > 0
labels:
severity: L1
annotations:
summary: "namespace={{$labels.namespace}}, deployment={{$labels.deployment}}: Deployment存在不可用Replica"
for: 1m
# kube-system或者monitoring中的Deployment副本总数>0,且全部副本不可用,持续1m,则触发告警,告警serverity配置为L1
- alert: SystemAllPodReplicasUnavailable
expr: kube_deployment_status_replicas_unavailable{namespace=~"kube-system|monitoring"} == kube_deployment_status_replicas{namespace=~"kube-system|monitoring"} and kube_deployment_status_replicas{namespace=~"kube-system|monitoring"} > 0
labels:
severity: L1
annotations:
summary: "namespace={{$labels.namespace}}, deployment={{$labels.deployment}}: Deployment全部Replicas不可用"
for: 1m
3.9.2 クラスター可用性ゾーン内の異常なノードの割合に関するアラームの監視
K8s の kube-controller-manager コンポーネントは、異常なノードの数、正常なノードの割合、およびアベイラビリティ ゾーン内のノードの総数をカウントし、関連するアラームを構成できます。
# HELP node_collector_unhealthy_nodes_in_zone [ALPHA] Gauge measuring number of not Ready Nodes per zones.
# TYPE node_collector_unhealthy_nodes_in_zone gauge
node_collector_unhealthy_nodes_in_zone{zone="cn-shanghai::cn-shanghai-e"} 0
node_collector_unhealthy_nodes_in_zone{zone="cn-shanghai::cn-shanghai-g"} 0
node_collector_unhealthy_nodes_in_zone{zone="cn-shanghai::cn-shanghai-l"} 0
node_collector_unhealthy_nodes_in_zone{zone="cn-shanghai::cn-shanghai-m"} 0
node_collector_unhealthy_nodes_in_zone{zone="cn-shanghai::cn-shanghai-n"} 0
# HELP node_collector_zone_health [ALPHA] Gauge measuring percentage of healthy nodes per zone.
# TYPE node_collector_zone_health gauge
node_collector_zone_health{zone="cn-shanghai::cn-shanghai-e"} 100
node_collector_zone_health{zone="cn-shanghai::cn-shanghai-g"} 100
node_collector_zone_health{zone="cn-shanghai::cn-shanghai-l"} 100
node_collector_zone_health{zone="cn-shanghai::cn-shanghai-m"} 100
node_collector_zone_health{zone="cn-shanghai::cn-shanghai-n"} 100
# HELP node_collector_zone_size [ALPHA] Gauge measuring number of registered Nodes per zones.
# TYPE node_collector_zone_size gauge
node_collector_zone_size{zone="cn-shanghai::cn-shanghai-e"} 21
node_collector_zone_size{zone="cn-shanghai::cn-shanghai-g"} 21
node_collector_zone_size{zone="cn-shanghai::cn-shanghai-l"} 21
node_collector_zone_size{zone="cn-shanghai::cn-shanghai-m"} 21
node_collector_zone_size{zone="cn-shanghai::cn-shanghai-n"} 21
AlertManager/Thanos Rulerのアラーム例は以下のとおりです。
# node_collector_zone_health <= 80 如果可用区内健康节点比例小于80%,就触发告警。
- alert: HealthyNodePercentagePerZoneLessThan80
expr: node_collector_zone_health <= 80
labels:
severity: L1
annotations:
summary: "zone={{$labels.zone}}: 可用区内健康节点与节点总数百分比 <= 80%"
for: 5m
アプリケーション向けの単一/マルチクラスター高可用性アーキテクチャ
上記の第 3 章で紹介した高可用性テクノロジーと、Alibaba Cloud の製品機能によって提供される製品機能に基づいて、単一クラスター内の高可用性アーキテクチャを完全に実現できます。マルチクラスター高可用性アーキテクチャは、単一クラスター高可用性アーキテクチャをさらにアップグレードした高可用性アーキテクチャであり、クラスター/リージョン全体で高可用性サービス機能を提供します。
マルチリージョン、マルチクラスターの展開とユニット化されたアプリケーション アーキテクチャを通じて、高可用性を確保しながら、クロスリージョンのネットワーク伝送遅延、コスト、障害率の課題を克服できます。これにより、ビジネスの安定性と信頼性を確保しながら、ユーザーに優れたユーザー エクスペリエンスを提供できます。
4.1 単一リージョン、マルチアベイラビリティゾーンの高可用性クラスター
上記の第 3 章で紹介した高可用性テクノロジーと Alibaba Cloud 製品によって提供される機能に基づいて、単一クラスター ディメンション内の高可用性アーキテクチャを実現できますが、ここでは再度説明しません。
4.2 単一リージョンのマルチクラスターの高可用性 + マルチリージョンのマルチクラスターの高可用性
まず、各 ACK クラスターはマルチ アベイラビリティ ゾーンの高可用性アーキテクチャを採用し、ビジネス アプリケーションはマルチ アベイラビリティ ゾーン展開モードを採用して、SLB を通じて外部サービスを提供します。
マルチリージョン デプロイメントとマルチ AZ デプロイメントは本質的に似ていますが、リージョン間のネットワーク伝送遅延、コスト、障害率の違いにより、適応するには異なるデプロイメントとアプリケーション アーキテクチャが必要になります。プラットフォーム層については、クロスリージョンの Kubernetes クラスターを実装することは推奨されません。代わりに、マルチリージョンのマルチクラスター アプローチを採用し、それをユニット化されたアプリケーション アーキテクチャと組み合わせて、マルチリージョンの高可用性アーキテクチャを実現することをお勧めします。 。複数の独立した Kubernetes クラスターを異なるリージョンにデプロイし、各クラスターが独自のノードとアプリケーションを管理します。各リージョンのクラスターは独立しており、独自のマスター ノードとワーカー ノードを持ちます。これにより、地域間のネットワーク遅延と障害率が軽減され、アプリケーションの可用性とパフォーマンスが向上します。
同時に、ユニット化されたアプリケーション アーキテクチャを採用してアプリケーションを独立したユニットに分割し、各ユニットが複数のリージョンのクラスターにコピーをデプロイします。ロード バランシングと DNS 解決テクノロジを通じて、ユーザーのリクエストを最も近い場所にルーティングし、トラフィックを最も近いリージョンに分散し、ネットワーク遅延を短縮し、高可用性と災害復旧機能を提供できます。
クロスリージョン ACK クラスターがネットワーク相互接続を必要とする場合、マルチリージョン VPC 間の相互接続はクラウド エンタープライズ ネットワーク (CEN) を通じて実現できます。地域間のビジネス トラフィック スケジューリングは、グローバル トラフィック管理 GTM およびクラウド分析サービスを通じて実装されます。
可観測性、セキュリティ ポリシー、クラスタ間でのアプリケーションの統合配信など、複数のリージョンにある複数のクラスタの統合管理を実行したい場合。ACK One を使用してこれを実現できます。分散クラウド コンテナ プラットフォーム ACK One (Kubernetes 用分散クラウド コンテナ プラットフォーム) は、ハイブリッド クラウド、マルチクラスター、分散コンピューティング、災害復旧などのシナリオ向けに Alibaba Cloud によって開始されたエンタープライズ レベルのクラウドネイティブ プラットフォームです。ACK One は、任意のリージョンおよび任意のインフラストラクチャ上のユーザーの Kubernetes クラスターに接続して管理でき、コンピューティング、ネットワーク、ストレージ、セキュリティ、モニタリング、ログ、ジョブ、アプリケーション、トラフィックなどをサポートする一貫した管理およびコミュニティ互換 API を提供します。運用保守管理・制御を一元的に行うことができます。ACK One についてさらに詳しく知りたい場合は、DingTalk 検索グループ番号: 35688562 を使用してグループに参加してください。
ACK One は、アプリケーションシステムのディザスタリカバリソリューションを 2 か所 3 センターで構築しています (関連コンテンツは [9] を参照してください)。
リンクの概要
クラウド ネイティブ シナリオにおけるアプリケーションの高可用性アーキテクチャと設計は、エンタープライズ サービスの可用性、安定性、セキュリティにとって非常に重要であり、アプリケーションの可用性とユーザー エクスペリエンスを効果的に向上させ、障害の分離と耐障害性を実現します。この記事では、クラウド ネイティブ アプリケーションの高可用性アーキテクチャ設計の重要な原則、K8s 高可用性テクノロジ、ACK シナリオでのその使用と実装、および単一クラスタとマルチクラスタの高可用性アーキテクチャの使用について紹介します。関連するニーズを持つ企業にリファレンスとヘルプを提供するために、ACK は安全で安定したパフォーマンスとコストが最適化され、継続的にアップグレードされるクラウドネイティブの製品とサービスを顧客に提供し続けます。
この記事では、Alibaba Cloud Container Service の責任者である Yi Li 氏が ACK 高可用性アーキテクチャの分析について素晴らしい情報を共有してくれたことに言及し、心より感謝の意を表します。
関連リンク:
[2] https://kubernetes.io/blog/2020/05/introducing-podtopologyspread/
[5] https://help.aliyun.com/document_detail/184995.html
[8] https://help.aliyun.com/zh/ack/serverless-kubernetes/user-guide/create-ecis-across-zones
[9] https://developer.aliyun.com/article/913027
Qt 6.6が正式リリース Gomeアプリの抽選ページのポップアップウィンドウが創設者を侮辱 Ubuntu 23.10が正式リリース 金曜日を利用してアップグレードするのもいいかもしれません! RISC-V: 単一の企業や国によって管理されていない Ubuntu 23.10 リリース エピソード: ヘイトスピーチが含まれているため ISO イメージが緊急に「リコール」された ロシアの企業は Loongson プロセッサをベースにしたコンピュータとサーバーを製造している ChromeOS は Google デスクトップを使用する Linux ディストリビューション環境 23 歳の 博士課程学生が Firefox の 22 年前の「ゴーストバグ」を修正 TiDB 7.4 リリース: MySQL 8.0 と正式互換 Microsoft が Windows Terminal Canary バージョンを発表