サービスメッシュ(ASM)トラフィックスケジューリングスイートは、分散システム内のすべてのトラフィックを一元管理および制御するための、非侵入型でスケーラブルな動的トラフィックスケジューリングアーキテクチャを提供します。これは、クラウドネイティブの分散アプリケーションの信頼性を高め、コストを削減し、リソース使用率を向上させるのに役立ちます。このトピックでは、ASM トラフィックスケジューリングスイートとその機能について説明します。
ASM トラフィックスケジューリングスイートとは
ASM トラフィックスケジューリングスイートは、ASM ベースの一元化されたトラフィックスケジューリングアーキテクチャモデルです。 クラウドネイティブの分散アプリケーションのリクエストを一元的にスケジュールおよび管理するように設計されています。
エージェントとコントローラーで構成される ASM トラフィックスケジューリングスイートは、一連の事前設定されたトラフィックスケジューリングポリシーを提供します。 これらのポリシーは、コントローラーによってエージェントに公開され、トラフィックスケジューリングを動的に制御します。 サイドカープロキシがポッドのインバウンドまたはアウトバウンドリクエストを転送すると、エージェントはトラフィックスケジューリングの決定をサイドカープロキシに渡し、これらのリクエストを調整またはキューイングします。
ASM トラフィックスケジューリングスイートを有効にする
ACK Serverless と Container Compute Service (ACS) は、ASM トラフィックスケジューリングスイートをサポートしていません。
ASM トラフィックスケジューリングスイートを使用するには、ASM インスタンスのバージョンが 1.21.6.82 以降であり、Kubernetes クラスターが ASM インスタンスに追加されていることを確認してください。詳細については、ASM インスタンスへのクラスターの追加 をご参照ください。
ASM トラフィックスケジューリングスイートを有効にするには、次の手順に従います。
ASM コンソールで
ASM コンソール にログインします。 左側のナビゲーションウィンドウで、 を選択します。
ASM インスタンスの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
[高度なトラフィックスケジューリング] タブを選択し、[トラフィックスケジューリングを有効にする] をクリックします。
以下の表を参照し、[OK] をクリックします。
構成項目
説明
[ストレージタイプ]
トラフィックスケジューリングスイートがスケジューリングエージェントとメタデータ間でデータ交換を行うために必要な、有効なストレージタイプ。
[リソースの設定]
エージェント Pod の構成。
[制限] のデフォルトは 2 CPU と 1024MiB です。
[リクエスト] のデフォルトは 0.5 CPU と 512MiB です。
[タイムアウト期間]
トラフィックスケジューリングスイートは、システムが過負荷状態のときにリクエストをキューイングすることをサポートしています。 指定された期間キューイングされたリクエストは破棄されます。
[有効範囲]
構成されていない場合、デフォルトはグローバルスコープです。 サポートされているスコープは次のとおりです。
ゲートウェイスコープ: 特定のゲートウェイに関連付けられたリソースに適用されます。
ワークロードスコープ: 特定のワークロードに適用されます。
名前空間スコープ: 特定の名前空間に適用されます。
kubectl で
kubectl を使用して ASM インスタンスに接続します。 詳細については、「コントロールプレーンで kubectl を使用して Istio リソースにアクセスする」をご参照ください。
次のコマンドを実行します。
kubectl patch asmmeshconfig default --type=merge --patch='{"spec":{"adaptiveSchedulerConfiguration":{"enabled":true,"schedulerScopes":[{"namespace":"default"}]}}}'
ASM トラフィックスケジューリングスイートでサポートされているトラフィックスケジューリングポリシー
次の表に、ASM トラフィックスケジューリングスイートでサポートされているポリシーを示します。
ポリシー | 説明 | 参照 |
トラフィックレート制限 | トラフィックレート制限ポリシーは、RateLimtingPolicy CustomResourceDefinition(CRD)を使用して作成されます。このようなポリシーは、ASM インスタンス内の指定されたサービスに対してグローバルスロットリングを提供します。オープンソースの Istio が提供するスロットリングソリューションと比較して、RateLimtingPolicy CRD を使用して作成されたポリシーは、ユーザー固有のスロットリング、バーストトラフィックウィンドウの設定、リクエストトークンのカスタム消費レートの構成などの高度なスロットリング機能をサポートします。 | |
平均レイテンシに基づく優先順位ベースのリクエストスケジューリング | 優先順位ベースのリクエストスケジューリングポリシーは、リアルタイムレイテンシを過去の平均レイテンシと比較して、トラフィックの過負荷が発生しているかどうかを判断します。トラフィックの過負荷が発生した場合、トークンバケットと優先順位に基づくスケジューリングメカニズムを使用してリクエストがスケジューリングされます。システムが過負荷になっている場合、優先度の高いリクエストを優先的に処理できます。 | AverageLatencySchedulingPolicy を使用して優先順位ベースのリクエストスケジューリングを実装する |
同時実行制御 | 同時実行制御は、処理中のリクエスト(つまり、送信済みだがまだ応答されていないリクエスト)のレコードを保持します。処理中のリクエストの数が指定された制限を超えると、後続の受信リクエストは拒否されます。 | |
制御された同時実行下での優先順位ベースのリクエストスケジューリング | ConcurrencySchedulingPolicy は、同時リクエストの制限に基づいてトラフィックが過負荷になっているかどうかを判断します。同時リクエストの数が指定された上限を超えると、後続のリクエストはキューに入れられ、優先順位に基づいてスケジューリングされます。 | ConcurrencySchedulingPolicy を使用して制御された同時実行下での優先順位ベースのリクエストスケジューリングを実装する |
段階的サービスリリース ポリシー | ASM トラフィックスケジューリングスイートは、段階的サービスリリース ポリシーをサポートしています。新しいサービスをリリースするときに、段階的リリース ポリシーを構成して、サービスが受信するトラフィックを徐々に増やすことができます。これにより、サービスがスムーズにリリースされます。 | |
指定されたリクエストクォータを使用した優先順位ベースのリクエストスケジューリング | システムで単位時間あたりに処理されるリクエストの数が指定されたクォータを超えると、後続のリクエストはキューに入れられ、優先度の高いリクエストを優先的に処理できます。 |
ASM トラフィックスケジューリングスイートの監視メトリックを収集するための構成
Kubernetes クラスタが Managed Service for Prometheus インスタンスまたはセルフビルド Prometheus インスタンスと統合されている場合は、次の構成を実行して ASM リクエストスケジューリングエージェントの監視メトリックを収集できます。 これにより、ASM トラフィックスケジューリングスイートの特定のポリシーが有効になっているかどうかを確認できます。
Managed service for Prometheus
次のコードを実行して、カスタム収集ルールを追加します。 詳細については、「その他の Prometheus サービスディスカバリー構成」をご参照ください。
scrape_configs:
- job_name: asm-adaptive-scheduler-stats
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: http
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_namespace
action: keep
regex: istio-system
- source_labels:
- __meta_kubernetes_pod_container_port_name
action: keep
regex: server
- source_labels:
- __meta_kubernetes_pod_container_name
action: keep
regex: aperture-agentセルフビルド Prometheus インスタンス
Managed Service for Prometheus の JSON ファイルを、Prometheus インスタンスの scrape_configs ノードに追加します。 詳細については、「Prometheus 構成」をご参照ください。