すべてのプロダクト
Search
ドキュメントセンター

:信頼性の高いNGINX Ingressコントローラーのデプロイ

最終更新日:Jan 23, 2025

NGINX Ingressコントローラーを使用する場合、コントローラーが実行されるポッドは、トラフィックの実際のエントリポイントおよびフォワーダーとして機能します。 それらの信頼性は、コントローラの全体的な信頼性を決定します。 デフォルトでは、NGINX Ingressコントローラーはインストール後に2つのポッドを使用します。これはほとんどのシナリオで十分です。 ポッドの数とスケジューリング方法を制御することで、高い信頼性を実現できます。

前提条件

NGINX Ingressコントローラーにデプロイされたデフォルトのポッドの表示

NGINX Ingressコントローラーをインストールすると、2つのポッドをプロビジョニングするアプリケーションがクラスターにデプロイされます。

次のコマンドを実行して、NGINX Ingressコントローラーがデプロイされているポッドを表示します。

kubectl -n kube-system get pod | grep nginx-ingress-controller

期待される出力:

nginx-ingress-controller-*****nxs                    1/1     Running   0          3h
nginx-ingress-controller-*****9pm                    1/1     Running   0          3h

NGINX Ingressコントローラの高い信頼性を確保する方法

重要

NGINX Ingressコントローラーはデフォルトでアフィニティ構成を使用し、コントローラーに属する1つのポッドのみがノードごとにデプロイされるようにします。 ポッドの数がクラスター内のノードの数を超えないようにしてください。

コントローラが実行されるポッドの数を増やす

コントローラーが実行されるポッドの数を増やすと、1つのポッドに障害が発生するのを防ぐことができます。

image
  1. kubectl scaleコマンドを実行して、NGINX Ingressコントローラーの展開をスケールアウトします。 次のコマンドは、ポッドの数を3つに増やします。

    kubectl -n kube-system scale --replicas=3 deployment/nginx-ingress-controller

    期待される出力:

    deployment.extensions/nginx-ingress-controller scaled
  2. 次のコマンドを実行して、NGINX Ingressコントローラーが実行されているポッドを表示します。

    kubectl -n kube-system get pod | grep nginx-ingress-controller

    期待される出力:

    nginx-ingress-controller-********                    1/1     Running   0          3h
    nginx-ingress-controller-********                    1/1     Running   0          3h
    nginx-ingress-controller-********                    1/1     Running   0          33s

高仕様ノードへのポッドのスケジュール

ポッドを高仕様ノードにスケジューリングすると、ノードリソースが不十分なためにポッドのパフォーマンスが低下したり、削除されたりするのを防ぎます。

image

  1. 次のコマンドを実行して、クラスターの現在のリソース使用量を表示します。

    kubectl top nodes

    期待される出力:

    NAME                       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
    cn-shanghai.********.230   71m          1%     1712Mi          31%       
    cn-shanghai.********.226   63m          1%     1669Mi          30%       
    cn-shanghai.********.229   125m         3%     2545Mi          46%       
    cn-shanghai.********.253   152m         3%     3804Mi          69%  

    出力には、各ノードですでに使用されているCPUおよびメモリリソースが表示されます。 スケジューリング用の余剰リソースが多いノードを選択します。

  2. 次のコマンドを実行して、node-role.kubernetes.io/ingress="true" のラベルをノードに追加します。 次の例では、ラベルがノードcn-shanghai. *********. 226cn-shanghai.********.230に追加され、余分なCPUリソースが増えます。

    重要
    • ラベルが追加されるノードの数は、ポッドの数以上である必要があります。 ラベル付きノードの数がコントローラーが属するポッドの数より少ない場合、一部のポッドはデプロイに失敗する可能性があります。

    • ACK専用クラスターを使用している場合は、マスターノードにラベルを追加しないでください。

    kubectl label nodes cn-shanghai.********.226 cn-shanghai.********.230 node-role.kubernetes.io/ingress="true"

    期待される出力:

    node/cn-shanghai.********.226 labeled
    node/cn-shanghai.********.230 labeled
  3. 次のコマンドを実行して、Nginx Ingress Controllerによって使用されるデプロイを更新し、nodeSelector設定を追加して、コントローラが属するポッドがnode-role.kubernetes.io/ingress="true" のラベルを持つノードにのみデプロイできるようにします。

    kubectl -n kube-system patch deployment nginx-ingress-controller -p '{"spec": {"template": {"spec": {"nodeSelector": {"node-role.kubernetes.io/ingress": "true"}}}}}'

    期待される出力:

    deployment.extensions/nginx-ingress-controller patched
  4. 次のコマンドを実行して、node-role.kubernetes.io /Ingress="true" というラベルでクラスターノードにデプロイされたingressポッドを表示します。

    kubectl -n kube-system get pod -o wide | grep nginx-ingress-controller

    期待される出力:

    nginx-ingress-controller-*****nxs     1/1     Running     0      74m     10.1.117.186   cn-shanghai.********.230
    nginx-ingress-controller-*****9pm     1/1     Running     0      74m     10.1.117.172   cn-shanghai.********.226