|
1 | 1 | ---
|
2 |
| -title: トポロジーを意識したヒント |
| 2 | +title: トポロジーを意識したルーティング |
3 | 3 | content_type: concept
|
4 | 4 | weight: 100
|
| 5 | +description: >- |
| 6 | + *Topology Aware Routing*は、ネットワークトラフィックを発信元のゾーン内に留めておくのに役立つメカニズムを提供します。クラスター内のPod間で同じゾーンのトラフィックを優先することで、信頼性、パフォーマンス(ネットワークの待ち時間やスループット)の向上、またはコストの削減に役立ちます。 |
5 | 7 | ---
|
6 | 8 |
|
7 | 9 |
|
8 | 10 | <!-- overview -->
|
9 | 11 |
|
10 | 12 | {{< feature-state for_k8s_version="v1.23" state="beta" >}}
|
11 | 13 |
|
12 |
| -*Topology Aware Hint*は、クライアントがendpointをどのように使用するかについての提案を含めることにより、トポロジーを考慮したルーティングを可能にします。このアプローチでは、EndpointSliceおよび/またはEndpointオブジェクトの消費者が、これらのネットワークエンドポイントへのトラフィックを、それが発生した場所の近くにルーティングできるように、メタデータを追加します。 |
| 14 | +{{< note >}} |
| 15 | +Kubernetes 1.27より前には、この機能は、*Topology Aware Hint*として知られていました。 |
| 16 | +{{</ note >}} |
13 | 17 |
|
14 |
| -たとえば、局所的にトラフィックをルーティングすることで、コストを削減したり、ネットワークパフォーマンスを向上させたりできます。 |
| 18 | +*Topology Aware Routing*は、トラフィックを発信元のゾーンに維持するようにルーティング動作を調整します。場合によっては、コストを削減したり、ネットワークパフォーマンスを向上させたりすることができます。 |
15 | 19 |
|
16 | 20 | <!-- body -->
|
17 | 21 |
|
18 | 22 | ## 動機
|
19 | 23 |
|
20 | 24 | Kubernetesクラスターは、マルチゾーン環境で展開されることが多くなっています。
|
21 |
| -*Topology Aware Hint*は、トラフィックを発信元のゾーン内に留めておくのに役立つメカニズムを提供します。このコンセプトは、一般に「Topology Aware Routing」と呼ばれています。EndpointSliceコントローラーは{{< glossary_tooltip term_id="Service" >}}のendpointを計算する際に、各endpointのトポロジー(リージョンとゾーン)を考慮し、ゾーンに割り当てるためのヒントフィールドに値を入力します。 |
22 |
| -EndpointSliceコントローラーは、各endpointのトポロジー(リージョンとゾーン)を考慮し、ゾーンに割り当てるためのヒントフィールドに入力します。 |
23 |
| -{{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}}のようなクラスターコンポーネントは、次にこれらのヒントを消費し、それらを使用してトラフィックがルーティングされる方法に影響を与えることが可能です(トポロジー的に近いendpointを優先します)。 |
| 25 | +*Topology Aware Routing*は、トラフィックを発信元のゾーン内に留めておくのに役立つメカニズムを提供します。EndpointSliceコントローラーは{{< glossary_tooltip term_id="Service" >}}のendpointを計算する際に、各endpointのトポロジー(リージョンとゾーン)を考慮し、ゾーンに割り当てるためのヒントフィールドに値を入力します。{{< glossary_tooltip term_id="kube-proxy" text="kube-proxy" >}}のようなクラスターコンポーネントは、次にこれらのヒントを消費し、それらを使用してトラフィックがルーティングされる方法に影響を与えることが可能です(トポロジー的に近いendpointを優先します)。 |
24 | 26 |
|
| 27 | +## Topology Aware Routingを有効にする |
25 | 28 |
|
26 |
| -## Topology Aware Hintを使う |
| 29 | +{{< note >}} |
| 30 | +Kubernetes 1.27より前には、この動作は`service.kubernetes.io/topology-aware-hints`アノテーションを使用して制御されていました。 |
| 31 | +{{</ note >}} |
27 | 32 |
|
28 |
| -`service.kubernetes.io/topology-aware-hints`アノテーションを`auto`に設定すると、サービスに対してTopology Aware Hintを有効にすることができます。これはEndpointSliceコントローラーが安全と判断した場合に、トポロジーヒントを設定するように指示します。 |
29 |
| -重要なのは、これはヒントが常に設定されることを保証するものではないことです。 |
| 33 | +`service.kubernetes.io/topology-mode`アノテーションを`auto`に設定すると、サービスに対してTopology Aware Routingを有効にすることができます。各ゾーンに十分なendpointがある場合、個々のendpointを特定のゾーンに割り当てるために、トポロジーヒントがEndpointSliceに入力され、その結果、トラフィックは発信元の近くにルーティングされます。 |
30 | 34 |
|
31 |
| -## 使い方 {#implementation} |
| 35 | +## 最も効果的なとき |
32 | 36 |
|
33 |
| -この機能を有効にする機能は、EndpointSliceコントローラーとkube-proxyの2つのコンポーネントに分かれています。このセクションでは、各コンポーネントがこの機能をどのように実装しているか、高レベルの概要を説明します。 |
| 37 | +この機能は、次の場合に最も効果的に動作します。 |
| 38 | + |
| 39 | +### 1. 受信トラフィックが均等に分散されている |
| 40 | + |
| 41 | +トラフィックの大部分が単一のゾーンから発信されている場合、トラフィックはそのゾーンに割り当てられたendpointのサブセットに過負荷を与える可能性があります。受信トラフィックが単一のゾーンから発信されることが予想される場合、この機能は推奨されません。 |
| 42 | + |
| 43 | +### 2. 1つのゾーンに3つ以上のendpointを持つサービス {#three-or-more-endpoints-per-zone} |
| 44 | + |
| 45 | +3つのゾーンからなるクラスターでは、これは9つ以上のendpointがあることを意味します。ゾーン毎のendpointが3つ未満の場合、EndpointSliceコントローラーはendpointを均等に割り当てることができず、代わりにデフォルトのクラスター全体のルーティングアプローチに戻る可能性が高く(約50%)なります。 |
| 46 | + |
| 47 | +## 使い方 {#how-it-works} |
| 48 | + |
| 49 | +「Auto」ヒューリスティックは、各ゾーンに多数のendpointを比例的に割り当てようとします。このヒューリスティックは、非常に多くのendpointを持つサービスに最適です。 |
34 | 50 |
|
35 | 51 | ### EndpointSliceコントローラー {#implementation-control-plane}
|
36 | 52 |
|
37 |
| -この機能が有効な場合、EndpointSliceコントローラーはEndpointSliceにヒントを設定する役割を担います。 |
38 |
| -コントローラーは、各ゾーンに比例した量のendpointを割り当てます。 |
39 |
| -この割合は、そのゾーンで実行されているノードの[割り当て可能な](/ja/docs/task/administer-cluster/reserve-compute-resources/#node-allocatable)CPUコアを基に決定されます。 |
| 53 | +このヒューリスティックが有効な場合、EndpointSliceコントローラーはEndpointSliceにヒントを設定する役割を担います。コントローラーは、各ゾーンに比例した量のendpointを割り当てます。この割合は、そのゾーンで実行されているノードの[割り当て可能な](/ja/docs/task/administer-cluster/reserve-compute-resources/#node-allocatable)CPUコアを基に決定されます。 |
40 | 54 |
|
41 | 55 | たとえば、あるゾーンに2つのCPUコアがあり、別のゾーンに1つのCPUコアしかない場合、コントローラーは2つのCPUコアを持つゾーンに2倍のendpointを割り当てます。
|
42 | 56 |
|
@@ -92,10 +106,17 @@ kube-proxyは、EndpointSliceコントローラーによって設定されたヒ
|
92 | 106 |
|
93 | 107 | * EndpointSliceコントローラーは、各ゾーンの比率を計算するときに、準備ができていないノードを無視します。ノードの大部分の準備ができていない場合、これは意図しない結果をもたらす可能性があります。
|
94 | 108 |
|
| 109 | +* EndpointSliceコントローラーは、`node-role.kubernetes.io/control-plane`または`node-role.kubernetes.io/master`ラベルが設定されたノードを無視します。それらのノードでワークロードが実行されている場合、これは問題になる可能性があります。 |
| 110 | + |
95 | 111 | * EndpointSliceコントローラーは、各ゾーンの比率を計算するデプロイ時に{{< glossary_tooltip text="toleration" term_id="toleration" >}}を考慮しません。サービスをバックアップするPodがクラスター内のノードのサブセットに制限されている場合、これは考慮されません。
|
96 | 112 |
|
97 | 113 | * これはオートスケーリングと相性が悪いかもしれません。例えば、多くのトラフィックが1つのゾーンから発信されている場合、そのゾーンに割り当てられたendpointのみがそのトラフィックを処理することになります。その結果、{{< glossary_tooltip text="Horizontal Pod Autoscaler" term_id="horizontal-pod-autoscaler" >}}がこのイベントを拾えなくなったり、新しく追加されたPodが別のゾーンで開始されたりする可能性があります。
|
98 | 114 |
|
| 115 | +## カスタムヒューリスティック {#custom-heuristics} |
| 116 | + |
| 117 | +Kubernetesは様々な方法でデブロイされ、endpointをゾーンに割り当てるための単独のヒューリスティックは、すべてのユースケースに通用するわけではありません。 |
| 118 | +この機能の主な目的は、内蔵のヒューリスティックがユースケースに合わない場合に、カスタムヒューリスティックを開発できるようにすることです。カスタムヒューリスティックを有効にするための最初のステップは、1.27リリースに含まれています。これは限定的な実装であり、関連する妥当と思われる状況をまだカバーしていない可能性があります。 |
| 119 | + |
99 | 120 | ## {{% heading "whatsnext" %}}
|
100 | 121 |
|
101 | 122 | * [サービスとアプリケーションの接続](/ja/docs/concepts/services-networking/connect-applications-service/)を読む。
|
0 commit comments