Terway クラスターで vSwitch の IP アドレスが枯渇した場合、vSwitch を追加して Pod の IP プールを拡張します。
次のような状況でこの操作が必要になる場合があります。
-
vSwitch が枯渇し、Pod が
ContainerCreating状態のままになっている場合。 -
ノードをスケールアウトするにあたり、特定のゾーンでより多くの IP 容量が必要になる場合。
-
IP の使用状況を複数の vSwitch に分散させて、バランスを改善したい場合。
前提条件
開始する前に、次の要件を満たしていることを確認してください。
-
Terway ネットワークモードで実行されている ACK クラスター
-
kube-system名前空間で Terway アドオンの設定または ConfigMap を編集する権限
制限事項
-
新しい vSwitch は、ノードと同じゾーンに存在する必要があります。設定済みの vSwitch がノードのゾーンをカバーしていない場合、Terway はノードのプライマリ ENI の vSwitch にフォールバックします。
-
既存の ENI の vSwitch は変更できません。更新された Pod vSwitch 設定を適用するには、新しいノードを追加するか、ローリング再起動を実行する必要があります。
vSwitch の IP 枯渇の検出
vSwitch の IP アドレスが枯渇すると、新しい ENI を必要とする Pod は ContainerCreating 状態のままになります。
Pod がスケジュールされているノードで Terway のログを確認します。
kubectl logs --tail=100 -f terway-eniip-***** -n kube-system -c terway
出力に次のエラーが含まれている場合、vSwitch に利用可能な IP アドレスがありません。
time="20**-03-17T07:03:40Z" level=warning msg="Assign private ip address failed: Aliyun API Error: RequestId: 2095E971-E473-4BA0-853F-0C41CF52651D Status Code: 403 Code: InvalidVSwitchId.IpNotEnough Message: The specified VSwitch \"vsw-***\" has not enough IpAddress., retrying"
また、[VPC コンソール] の [vSwitch] で [利用可能な IP アドレス] の数を確認してください。数が 0 の場合は、枯渇していることを示します。
変更が有効になるタイミング
Terway は、新しい ENI の作成時にのみ、新しい vSwitch 設定を適用します。既存の ENI には影響しません。
既存のノード: 次の状況では、新しい設定は適用されません。
-
ノード上の ENI がまだ使用中である (Pod またはトランク ENI が実行中)。
-
ノードが ENI の上限 (インスタンスタイプによって設定) に達している。
新しいノード: 更新後に追加されたノードは、すぐに新しい vSwitch を使用します。
Pod 用 vSwitch の変更
コンソールでの操作
Terway v1.4.4 以降が必要です。それ以前のバージョンでは、kubectl での操作を使用してください。
-
ターゲットノードと同じゾーンにあるVPC コンソールで vSwitch を作成します。 詳細については、「vSwitch の作成と管理」をご参照ください。Virtual Private Cloud (VPC) コンソールVirtual Private Cloud (VPC) コンソールVirtual Private Cloud (VPC) コンソール
説明Pod の密度は時間の経過とともに増加するため、Pod vSwitch には /19 以下のサブネットマスク (CIDR ブロックあたり少なくとも 8,192 個の IP) を使用してください。
-
コンテナサービス管理コンソールにログインします。左側のナビゲーションペインで、[クラスター] をクリックします。
-
[クラスター] ページでクラスターの名前をクリックし、左側のナビゲーションペインで [アドオン] をクリックします。
-
[アドオン] ページで [ネットワーク] タブをクリックし、Terway を見つけて [アップグレード] をクリックします。 [アップグレード] が利用できない場合、バージョンはすでに最新です。 アップグレード後、[設定] をクリックします。
説明他の方法でアドオンに加えた変更は、再デプロイ時に上書きされます。

-
terway-eniip の [パラメーター] ページで、[PodVswitchId] で新しい vSwitch を選択します。その他のパラメーターはデフォルトのままにします。
-
[OK] をクリックします。
kubectl での操作
この方法は、Terway v1.4.4 より前のバージョン、または kubectl を通じて設定を管理する場合に使用します。
-
VPC コンソールで、ターゲットノードと同じゾーンに vSwitch を作成します。詳細については、「vSwitch の作成と管理」をご参照ください。
説明Pod の密度は時間の経過とともに増加するため、Pod vSwitch には /19 以下のサブネットマスク (CIDR ブロックあたり少なくとも 8,192 個の IP) を使用してください。
-
Terway の ConfigMap を編集して、新しい vSwitch を追加します。
kubectl edit cm eni-config -n kube-systemvswitchesフィールドに新しい vSwitch ID を追加します。この例では、vsw-AAAに加えてvsw-BBBを追加します。eni_conf: | { "version": "1", "max_pool_size": 25, "min_pool_size": 10, "vswitches": {"cn-shanghai-f":["vsw-AAA", "vsw-BBB"]}, "service_cidr": "172.21.0.0/20", "security_group": "sg-CCC" } -
Terway の Pod を再起動して、新しい設定を適用します。Pod は自動的に再作成されます。
-
ENI マルチ IP モードの場合は、Terway Pod を削除します。
kubectl delete -n kube-system pod -l app=terway-eniip -
ENI シングル IP モードの場合は、Terway Pod を削除します。
kubectl delete -n kube-system pod -l app=terway-eni
-
-
すべての Terway Pod が実行中であることを確認します。
kubectl get pod -n kube-system | grep terway -
テスト用の Pod を作成し、新しい vSwitch から IP を取得することを確認します。
説明新しい vSwitch 設定は、新しく作成された ENI にのみ適用されます。既存の ENI は元の vSwitch を保持します。すべてのノードに変更を適用するには、ローリング再起動を実行する必要があります。
vSwitch の選択戦略
ゾーン内に複数の vSwitch が存在する場合、Terway は vswitch_selection_policy パラメーターに基づき、新しい ENI ごとに vSwitch を 1 つ選択します。詳細については、「Terway 設定パラメーターのカスタマイズ」をご参照ください。
デフォルト: ordered
Terway は、設定で定義された順序で vSwitch を試行します。最初に利用可能な IP アドレスが見つかった vSwitch が使用されます。
エッジケース: 急速なスケーリング中に、複数の同時 ENI 作成リクエストがすべてリストの最初の利用可能な vSwitch に集中し、IP の分散が不均一になる可能性があります。
代替: random
Terway は、新しい ENI ごとにランダムに vSwitch を選択し、IP アドレスをより均等に分散させ、バーストスケーリング中のホットスポットを防ぎます。
ノードプールによる vSwitch の分離
厳密な制御を行うには、ノードレベルのネットワーク設定を構成して、ゾーンごとに各ノードプールに一意の Pod vSwitch をバインドし、IP 割り当ての競合を排除します。
よくある質問
vSwitch を追加した後、Pod がインターネットにアクセスできなくなった
新しい vSwitch には SNAT ルールがないため、その Pod はインターネットにアクセスできません。NAT Gateway を使用して、新しい vSwitch に SNAT ルールを設定します。詳細については、「クラスターのインターネットアクセスを有効にする」をご参照ください。
Pod の IP アドレスが、設定された vSwitch の CIDR ブロックの範囲外である
Pod の IP アドレスは ENI から取得され、vSwitch は ENI の作成時にのみ指定できます。その後、その ENI 上のすべての Pod は、その後の設定変更に関わらず、その vSwitch から IP アドレスを取得します。
これは通常、次の場合に発生します。
-
ノードに、以前のクラスターの ENI が残っている (Pod をドレインせずにノードが削除されたため)。
-
vSwitch の設定を更新したが、ノード上の既存の ENI はまだ古い vSwitch を使用している。
新しいノードを追加するか、既存のノードのローリング再起動を実行して、更新された設定で新しい ENI を作成してください。
vSwitch 間で IP の使用状況に偏りがある
ordered 戦略は、急速なスケーリング中にこの問題を引き起こす可能性があります。複数の同時 ENI 作成リクエストがすべて設定リストの最初の vSwitch に集中するため、他の vSwitch が十分に利用されないまま、その vSwitch が枯渇する可能性があります。
状況に応じて、次のように対応してください。
-
vSwitch が枯渇に近い既存のノードの場合: 一部のノードをローリング再起動して ENI を解放し、IP を vSwitch に返却してください。
-
新規ノードまたは将来のデプロイの場合:
vswitch_selection_policyをorderedからrandomに変更します。これにより、ENI がランダムに分散され、ホットスポットが防止されます。 詳細については、「Terway 設定パラメーターをカスタマイズする」をご参照ください。 -
厳密な分離が必要な場合: ノードレベルのネットワーク設定を使用して、ノードプールごと、ゾーンごとに正確に 1 つの Pod vSwitch を割り当ててください。