ピーク需要イベントの準備には時間がかかります。ベースラインを確立し、サービス レベル アグリーメントを評価し、同じデータを中心にすべてのチームを調整する必要があります。インフラストラクチャの拡張にも同様の考慮事項がありますが、コストに対するシステムのニーズの予測も必要になります。パフォーマンスを犠牲にすることなく、この 2 つのバランスを取るにはどうすればよいでしょうか?十分に良いという基準はどこにあるのでしょうか?
ソリューションの 1 つは、Pixie と Kubernetes の統合によって構築された水平ポッド自動スケーリング (HPA) です。HPA を設定すると、Kubernetes クラスターは需要がピークに達したときに自動的にさらに多くのポッドを割り当て、需要が低下したときに割り当てを解除します。これにより、需要を予測する際にコストの懸念を回避できます。
このチュートリアルでは、Kubernetes クラスターを使用していることを前提としています。HPA を設定するには、次のものが必要です。
あなたの New Relic ユーザー
クラスターには他の外部メトリック アダプターがインストールされていません
目的
このチュートリアルでは、HPA のデモ環境をセットアップする手順を説明します。あなたはするであろう:
- New Relic Kubernetes統合をインストールする
- 自動スケーリングをテストするためのサンプル環境をセットアップする
メトリクスを Kubernetes に転送する
New Relic Pixie lab リポジトリのクローンを作成します
Github から次のリポジトリのクローンを作成します。
$git clone https://github.com/newrelic-experimental/pixie-lab-materials$cd pixie-lab-materials/main$./setup.sh
setup.sh
スクリプトは、Pixie がサポートするハイパーキット ドライバーを使用して新しい minikube クラスターを起動します。次に、Pixie で最適なパフォーマンスが得られるようにネットワーク メモリと CPU を構成し、デモ アプリケーションを構成するすべてのポッドとサービスを作成します。
新しいターミナル ウィンドウで、minikube トンネルを開きます。
$minikube tunnel -p minikube-pixie-lab
2 つの端末が必要です。
- デモ アプリケーションにアクセスするために開いたままになっているトンネル。
- チュートリアルのコマンドを実行する場所。
Kubernetes と Pixie の統合をインストールする
ガイド付きインストール に従って、New Relic Kubernetes 統合をインストールします。これにより、New Relic が Kubernetes クラスターに接続されます。必ず次のことを行ってください。
Pixie を有効 にするには、Instant service-level insights[インスタント サービス レベルの洞察]、 Full-body requests[フルボディ リクエスト]、および Application profiles through Pixie[Pixie を介したアプリケーション プロファイル]を 確認します。
他のデフォルトのチェック項目はすべてそのままにしておきます
[続行] をクリックしたら、そのコマンドをコピーして開発環境に貼り付けます。
New Relic メトリクス アダプターのインストール
New Relic Metrics Adapter をインストールするには、 newrelic-k8s-metrics-adapter
Helm チャートを使用します。 nri-bundle-chart
を使用して New Relic Kubernetes コンポーネントをデプロイした場合は、この Helm チャートにアクセスできます。
$helm upgrade --install newrelic newrelic/nri-bundle \> --namespace newrelic --create-namespace --reuse-values \> --set metrics-adapter.enabled=true \> --set newrelic-k8s-metrics-adapter.personalAPIKey=YOUR_NEW_RELIC_PERSONAL_API_KEY \> --set newrelic-k8s-metrics-adapter.config.accountID=YOUR_NEW_RELIC_ACCOUNT_ID \> --set newrelic-k8s-metrics-adapter.config.externalMetrics.manipulate_average_requests.query="FROM Metric SELECT average(http.server.duration) WHERE instrumentation.provider='pixie'"
これらのフラグの機能は次のとおりです。
metrics-adapter.enabled
: メトリクス アダプター チャートをインストールするには、true
に設定します。newrelic-k8s-metrics-adapter.personalAPIKey
: New Relic API キーを設定します。newrelic-k8s-metrics-adapter.accountID
: メトリクスを転送するアカウントの ID。newrelic-k8s-metrics-adapter.config.externalMetrics.external_metric_name.query
: 次の情報を含む新しい外部メトリックを追加します。external_metric_name
:メトリック名。query
: メトリクスのベース NRQL クエリ。
NRQL クエリが正確であることを確認する
New Relic からオートスケーラーにメトリクスを送信する前に、クエリをテストする必要があります。 one.newrelic.com > Query your Dataに移動し、次の NRQL クエリをコピーして貼り付けます。
FROM Metric SELECT average(http.server.duration) WHERE instrumentation.provider='pixie'
オートスケーラーを構成する
pixie-lab-materials/main/kube
ディレクトリから、 hpa.yml
という名前の新しいファイルを作成します。New Relic メトリクス アダプターは、この YAML ファイルの HPA 定義によって定義されているコントローラー マネージャーにデータを送信します。
kind: HorizontalPodAutoscalerapiVersion: autoscaling/v2beta2metadata: name: manipulate-scalerspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: manipulation-service minReplicas: 1 maxReplicas: 10 metrics: - type: External external: metric: name: manipulate_average_requests target: type: Value value: 100
次のコマンドを実行して、新しい YAML ファイルを適用します。
$cd pixie-lab-materials/main/kube$kubectl apply -f hpa.yaml
作業を確認します: 負荷を追加して自動スケーリングをトリガーします
kubectl get services
を使用してサイトのデプロイメントに移動します。- ブラウザでフロントエンド サービスから
EXTERNAL-IP
を開きます。 hey
をインストールし、brew install hey
を使用して Go v1.17 をインストールします。hey -n 10 -c 2 -m GET http://<EXTERNAL-IP>
を使用して GET リクエストをEXTERNAL-IP
に送信します。watch kubnectl get hpa
を使用して HPA 自動スケーリングを監視します。
平均 HTTP リクエスト時間が増加するにつれてポッドがレプリカの数を自動スケールする場合、HPA は正常にセットアップされています。New Relic と HPA が必要に応じて自動的に自動スケーリングされるように、独自のサービスの構成を調整できます。