Citrix ADC ingress controller

カスタムメトリックを使用したCitrix ADC CPX用の水平ポッドオートスケーラー

Kubernetes クラスタに初めてワークロードをデプロイする際、リソース要件とその要件が本番環境でどのように変化するかを正確に予測することは困難です。Horizontal Pod Autoscaler (HPA) を使用すると、実際のリソース使用量などのさまざまなメトリクスに基づいて、ワークロード内のポッドの数を自動的にスケーリングできます。HPA は Kubernetes が提供するリソースで、デプロイ、レプリカセット、レプリケーションコントローラーなどの Kubernetes ベースのリソースをスケーリングします。

従来、HPA は必要なメトリクスをメトリクスサーバーから取得していました。その後、デプロイメント内のレプリカの数が、観測された平均メトリックと指定したターゲットに一致するように定期的に調整されます。

HPA-traditional-metric-server

Citrixは、Citrix ADC CPX向けにカスタムメトリックベースのHPAソリューションを提供しています。 デフォルトでは、メトリクスサーバーは Pod の CPU とメモリーのメトリクスのみを提供します。 Citrix ADCには、アプリケーションのパフォーマンスを分析するための豊富な組み込みメトリックが用意されており、これらのメトリックに基づいて、オートスケーリングをより適切に判断できます。カスタムメトリックベースの HPA は、HTTP リクエストレートや SSL トランザクション、ADC 帯域幅に基づく自動スケーリングなど、より優れたソリューションです。

Citrix ADC CPX HPA ソリューション

Citrix ADC CPX HPAソリューションは、次のコンポーネントで構成されています。

  • Citrix ADC VPX:Citrix ADC VPXまたはMPXはTier-1に展開され、クラスタ内のCitrix ADC CPXポッド間でクライアント要求を負荷分散します。

  • Citrix ADC CPX:クラスター内に展開されたCitrix ADC CPXは、エンドポイントアプリケーションポッドのTier-2ロードバランサーとして機能します。Citrix ADC CPXポッドは、Citrix ingress controller およびCitrix ADCメトリックエクスポーターとともにサイドカーとして実行されています。

  • Citrix ingress controller: Citrix ingress controller は、Kubernetes Ingressを中心に構築されたイングレスコントローラーであり、Ingressリソース構成に基づいてCitrix ADCを自動的に構成します。スタンドアロンポッドとして展開されたCitrix ingress controller はCitrix ADC VPXを構成し、他のインスタンスはCitrix ADC CPXを構成します。

  • Citrix ADCメトリックエクスポーター: [Citrix ADCメトリックエクスポーター]((https://github.com/citrix/citrix-adc-metrics-exporter))は、アプリケーションパフォーマンスメトリックをオープンソースの監視システムPrometheusにエクスポートします。Citrix ADCメトリックエクスポーターは、Citrix ADC CPXからメトリックを収集し、Prometheusが理解できる形式で公開します。

  • Prometheus: Prometheus は、オープンソースのシステム監視および警告ツールキットです。Prometheus は、Citrix ADC CPX からメトリックを収集し、メトリックのチェックを維持するために HPA コントローラーによってクエリされる Prometheus アダプターを使用してメトリクスを公開するために使用されます。

  • Prometheus アダプター:Prometheus アダプターには、Kubernetes リソースメトリクス API とカスタムメトリクス API の実装が含まれています。このアダプターは、Kubernetes バージョン 1.6 以降のオートスケーリング/v2 HPA での使用に適しています。また、すでに Prometheus を実行しているクラスター上のメトリクスサーバーを置き換えて、適切なメトリクスを収集することもできます。

次の図は、Citrix ADC CPX HPAソリューションがどのように機能するかを視覚的に表したものです。

Citrix-cpx-hpa-solution

ティア1 Citrix ADC VPXは、ティア2でCitrix ADC CPXを負荷分散します。Citrix ADC CPX 負荷分散アプリケーション。Prometheus、Prometheus アダプター、HPA コントローラーなどの他のコンポーネントもデプロイされます。

HPA コントローラーは、HTTP リクエストのレートや帯域幅などのカスタムメトリクスについて Prometheus-Adapter をポーリングし続けます。HPAでユーザーが定義した制限に達すると、HPAコントローラーはCitrix ADC CPX展開をスケーリングし、負荷を処理する別のCitrix ADC CPXポッドを作成します。

Citrix ADC CPX HPAソリューションを展開する

Citrix ADC CPX HPAソリューションを展開するには、次の手順を実行します。

  1. 次のコマンドを使用して、GitHub から citrix-k8s-ingress-controller リポジトリのクローンを作成します。

    git clone https://github.com/citrix/citrix-k8s-ingress-controller.git
    

    クローンを作成したら、次のコマンドでディレクトリを HPA フォルダに変更します。

    cd citrix-k8s-ingress-controller/blob/master/docs/how-to/hpa
    
  2. HPAディレクトリからvalues.shファイルを開いて編集し、 Citrix ADC VPXに次の値を設定します。

    • VPX_IP: Citrix ADC VPX IPアドレス
    • VPX_PASSWORD:Citrix ADC VPX上のnsrootユーザーのパスワード
    • VIRTUAL_IP_VPX: サンプルゲストブックアプリケーションにアクセスする IP アドレス。
  3. create_all.sh ファイルを実行して、必要なリソースをすべて作成します。

    ./create_all.sh
    

    このステップにより、次のリソースが作成されます。

    • PrometheusとGrafanaのモニタリング
    • Citrix ingress controller とメトリックエクスポーターをサイドカーとして搭載したCitrix ADC CPX
    • Citrix ADC VPXを構成するためのスタンドアロンポッドとしてのCitrixイングレスコントローラー
    • ゲストブックアプリケーションのサンプル
    • Citrix ADC CPXオートスケール展開を監視するためのHPAコントローラー
    • カスタムメトリクスを公開するための Prometheus アダプター
  4. hosts ファイルにエントリを追加します。 ゲストブックアプリケーションのトラフィックをCitrix ADC VPX仮想IPアドレスにルーティングするには、 このルートをhostsファイルに追加する必要があります。 ほとんどの Linux ディストリビューションでは、 hostsファイルは/etcフォルダにあります。

  5. 生成されたトラフィックを送信し、Citrix ADC CPXオートスケール展開を確認します。

    Citrix ADC CPX展開HPAは、Citrix ADC CPXの平均HTTPリクエストレートが1秒あたり20リクエストを超えると自動スケーリングされるように構成されています。HPA フォルダに用意されている次のスクリプトを使用して、トラフィックを送信できます。

    • 16_curl.sh -1 秒あたり 16 個の HTTP リクエストを送信する(しきい値より小さい)
    • 30_curl.sh -1 秒あたり 30 個の HTTP リクエストを送信する(しきい値より大きい)

    a. 16_curl.sh スクリプトを実行して、Citrix ADC CPXに1秒あたり16個のHTTPリクエストを送信します。

       ./16_curl.sh
    

    次の図は、1 秒あたりの HTTP リクエストを表示する Grafana ダッシュボードです。 1 秒あたり 16 個の HTTP リクエストが送信される Grafana ダッシュボード

    次の出力は、16 HTTP RPS の HPA 状態を示しています。 16 HTTP RPS の HPA ステート

    b. 30_curl.sh スクリプトを実行して、Citrix ADC CPXに毎秒30個のHTTPリクエストを送信します。

       ./30_curl.sh
    

    このスクリプトを実行すると、設定された20個の要求のしきい値を超え、Citrix ADC CPX 展開が1つのポッドから2つのポッドに自動スケーリングされます。Citrix ADC CPXポッドが2つあるため、 メトリックHTTP request rateの平均値も30から15に下がります。

    次の出力は、ターゲットを越えたときの HPA の状態を示しています。

    HPA-cpx-exceeding-threshold

    次の出力は、Citrix ADC CPX のレプリカの数が 2 になり、HTTP RPS の平均値が15に減少したことを示しています。

    CPX-autoscale

    次の図は、トラフィックを負荷分散する2つのCitrix ADC CPXを備えたGrafanaダッシュボードを示しています。

    HPA-grafana-dashboard

  6. delete_all.sh スクリプトを実行してクリーンアップします。

    ./delete_all.sh
    

注:

Tier-1 Citrix ADC VPXが存在しない場合は、 NodePortを使用してCitrix ADC CPXサービスを公開します。

カスタムメトリックを使用したCitrix ADC CPX用の水平ポッドオートスケーラー