Terway で高接続のワークロードに対応するには、eBPF conntrack テーブルのサイズとタイムアウト設定を調整します。
conntrack テーブルサイズの確認
eBPF conntrack テーブルのサイズは、ノードのメモリ容量に依存します。
ノード上の conntrack テーブルのサイズを表示するには、次の手順を実行します。
-
terway-eniip Pod 名を取得します。
# kubectl describe node <nodename> | grep terway-eniip
kube-system terway-eniip-xxxx 350m (8%) 1100m (28%) 200Mi (3%) 256Mi (3%) 16h
-
conntrack テーブルのサイズを照会します。
# kubectl exec -it -nkube-system terway-eniip-xxxx -c policy -- cilium status --verbose
...
BPF Maps: dynamic sizing: on (ratio: 0.002500)
Name Size
Auth 524288
Non-TCP connection tracking 65536
TCP connection tracking 131072
Endpoint policy 65535
...
パラメーター:
-
dynamic sizing: on: eBPF マップは動的な上限を使用します。offに設定した場合、動的に調整するにはbpf-map-dynamic-size-ratioを設定するか、固定サイズにするにはbpf-ct-global-any-max、bpf-ct-global-tcp-max、およびbpf-nat-global-maxを設定します。 -
ratio: 0.002500:総システムメモリに対する eBPF マップの最大サイズの割合です。 -
Non-TCP connection tracking:非 TCP conntrack テーブルの最大エントリ数です。 -
TCP connection tracking:TCP conntrack テーブルの最大エントリ数です。
conntrack エントリ数の確認
デフォルトでは、各ノードはポート 9962 で Prometheus メトリクスを公開します。
|
メトリクス |
ラベルと値 |
|
cilium_datapath_conntrack_gc_entries |
family: IP アドレスタイプ。有効な値: protocol: プロトコルタイプ。有効な値: status: クリーンアップのステータス。すべての状態を合計すると、クリーンアップ前の conntrack エントリ数が得られます。有効な値: |
デフォルトの監視ポートの変更
|
パラメーター |
説明 |
|
prometheus-serve-addr |
Prometheus のリッスンポート。無効にするには
|
このパラメーターを変更するには、「Terway 設定パラメーターのカスタマイズ」の cilium_args をご参照ください。
eBPF conntrack サイズの調整
eBPF conntrack と Linux conntrack は機能的に同じです。デフォルト設定はほとんどのシナリオに適しています。
次のシナリオでは、設定を変更してください。
-
長時間継続する接続が多数ある場合。
-
Pod がインターネットに公開されていて、半開きの接続が多数発生する可能性がある場合。
conntrack テーブルサイズの調整はリスクの高い操作です。本番環境に変更を適用する前に、影響を評価してください。調整後、「conntrack テーブルサイズの確認」で説明されているように結果を確認してください。
|
パラメーター |
説明 |
|
bpf-map-dynamic-size-ratio |
総システムメモリに対する eBPF マップの最大サイズの割合です。
|
|
bpf-ct-timeout-regular-any |
非 TCP conntrack エントリのタイムアウト。 デフォルト値: |
|
bpf-ct-timeout-regular-tcp |
確立された TCP conntrack エントリのタイムアウト。 デフォルト値: |
|
bpf-ct-timeout-regular-tcp-fin |
TCP conntrack エントリを閉じるためのタイムアウト。 デフォルト値: |
|
bpf-ct-timeout-regular-tcp-syn |
TCP conntrack エントリを確立するためのタイムアウト。 デフォルト値: |
|
bpf-ct-timeout-service-any |
非 TCP サービスの conntrack エントリのタイムアウト。 デフォルト値: |
|
bpf-ct-timeout-service-tcp |
確立された TCP サービスの conntrack エントリのタイムアウト。 デフォルト値: |
|
bpf-ct-timeout-service-tcp-grace |
TCP サービスのグレースフルシャットダウンのタイムアウト。 デフォルト値: |
|
conntrack-gc-interval |
conntrack テーブルのクリーンアップ間隔。 デフォルト値: 説明
cilium-agent が conntrack テーブルをクリーンアップする間隔。デフォルト値を超えないようにしてください。 間隔を短くすると、cilium-agent の CPU 使用率が増加しますが、conntrack テーブルがいっぱいになるのを防ぎます。ACK コンソールで Terway コンテナの CPU 制限を調整してください。 |
|
bpf-ct-global-any-max |
非 TCP サービスの conntrack テーブルの最大サイズ。 説明
動的サイジングが有効な場合、 |
|
bpf-ct-global-tcp-max |
TCP サービスの conntrack テーブルの最大サイズ。 説明
動的サイジングが有効な場合、 |
|
bpf-nat-global-max |
BPF NAT テーブルの最大サイズ。 説明
bpf-ct-global-any-max と bpf-ct-global-tcp-max の合計より小さくする必要があります。 デフォルト = (bpf-ct-global-any-max + bpf-ct-global-tcp-max) × 2/3 動的サイジングが有効な場合、 |
これらのパラメーターを変更するには、「Terway 設定パラメーターのカスタマイズ」の cilium_args をご参照ください。
bpf-map-dynamic-size-ratio を 0.0025 に設定した場合のマップサイズ:
|
ノードメモリ |
CT マップサイズ (TCP) |
CT マップサイズ (any) |
NAT マップサイズ |
|
7.5 GiB |
131,072 |
65,536 |
131,072 |
|
16 GiB |
151,765 |
75,882 |
151,765 |
|
30 GiB |
284,560 |
142,280 |
284,560 |
|
240 GiB |
2,276,484 |
1,138,242 |
2,276,484 |
例
bpf-map-dynamic-size-ratio を 0.003 に、bpf-ct-timeout-regular-tcp を 1h に設定します:
10-terway.conf: |
{
"cniVersion": "0.4.0",
"name": "terway",
"capabilities": {"bandwidth": true},
"eniip_virtual_type": "IPvlan",
"cilium_args": "--bpf-map-dynamic-size-ratio=0.003 --bpf-ct-timeout-regular-tcp=1h",
"type": "terway"
}