問題タブ [horizontal-pod-autoscaling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kubernetes - Kubernetes HPA はカスタム メトリックで急速にスケールアップします
GKE で実行されている Spring Boot アプリケーションがあり、準備に 7 分ほどかかります。次のように、1 秒あたりのカスタム リクエスト メトリックに基づいて HPA を作成しました。
istio_requests_per_secondメトリクスは、使用可能なポッド全体の平均 RPS をすでに計算しているため、ポッドごとに同じ値になります。たとえば、合計で 150 RPS があり、使用可能な Pod が 5 つある場合、istio_requests_per_secondは 30 になります。
istio_requests_per_secondが 30 をわずかに超えると、新しく作成されたPodの 1 つがリクエストの一部を受け取る準備ができるまで、HPA は Pod を生成し続けます (メトリックが 32 RPS に増加した場合に 2 RPS としましょう)。新しく作成された Pod の準備が整う前に、それらはリクエストを受信せず、HPA は RPS の量を目標値 (30) 付近に維持しようとするため、これは完全に理にかなっています。
問題は、RPS がわずかに増加した場合に、HPA が数十個のポッドを生成することを望まないことです。たとえば、32 RPS の場合、1 つの新しいポッドで十分です。主な問題は起動時間が長いことだと思います。これは、スケールアップの決定時と Pod の準備が整う時との間に自動スケーリングのラグがあるためです。
GKE で実行しているため、--horizontal-pod-autoscaler-sync-period などの kube- controller-manager フラグを変更できません。
私も Kubernetes 1.17 で実行しているため、段階的なスケーリングを構成するための動作フィールドは問題外です。その上、スケーリングを制限したくありません。 istio_requests_per_secondが実際には 100 RPS を超えて急上昇している可能性があります。
TL;DR:起動が遅いアプリケーションの 1 秒あたりのリクエスト数がわずかに増加した場合に、何十ものポッドを生成しないように Kubernetes HPA を構成するにはどうすればよいですか?
docker - Kubernetes で高いトラフィックが予想される場合にポッドをスケールアップすることはできますか?
そこで、本番サーバーを Kubernetes に切り替えることを考えています。現時点では、単一の nginx インスタンスのみであるため、あまり専門的ではありません。99% の時間、サーバーは 1 分間に約 30 件のリクエストを処理する必要がありますが、これは簡単に処理できます。前に正確に知っている特定の時間に、サービスを期待している同じ秒に2000人のユーザーがいる可能性があります。それは明らかにやり過ぎで、前回はしばしば 502 を返しました。Kubernetes Autoscaling はそのための良いアプローチのようです。唯一の問題は、30 秒後ではなく、特定の時間に追加のコンテナーが必要になることです。
「手動で」スケーリングする方法はありますか?たとえば、ちょうど午後 8 時の MESZ に 4 つのコンテナーを準備するように Kubernetes に指示するようなものですか?
kubernetes - ワークロードのリビジョンを作成する GKE 水平オートスケーラー
HorizontalPodAutoscaler でスケーリングされているデプロイがあります。最近、突然、数分ごとにリビジョンをスパム送信し、シャットダウンして新しいポッドを作成し始めました。また、これらのアクションがスケーリングの必要性によって引き起こされたものではないことも確信しています (ユーザー数は低いままでした)。
オートスケーラーを削除すると、これらのリビジョンの作成が停止しましたが、原因はまだわかりません。リビジョンは、展開がスケールアップ/ダウンされているときではなく、展開が変更されたときにのみ作成されますか?
kubernetes - Prometheus カスタム メトリックが custom.metrics kubernetes に表示されない
次の設定をすべて設定しましたが、コマンドを入力しても request_per_second が表示されません
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1
監視する必要があるnode.jsにprom-clientをインストールし、/metricsをテストしましたが、非常にうまく機能しており、メトリック「resquest_count」が返されるオブジェクトです
そのノードコードの重要な部分は次のとおりです
これは私のサービスモニター構成です
これは node-request-persistence 構成です
これはプロメテウス アダプターです。
これがHPです
コマンド
kubectl get hpa -n un1qnx-aks-development
結果は「不明/5」
また、コマンド
kubectl get --raw "http://prometheus-server.default.svc.cluster.local:9090/api/v1/series"
結果は
サーバーからのエラー (NotFound): サーバーは要求されたリソースを見つけることができませんでした
収集されたメトリックについて何らかの値を返す必要があると思います...問題はサービスモニターにあると思いますが、これは初めてです
お気付きのように、別のデプロイ ポッドに基づいてデプロイをスケーリングしようとしていますが、そこに問題があるかどうかはわかりません
これは私の論文のためなので、答えていただければ幸いです
kubernetes - バージョン 1.19.9
プロメテウス - グラフ prometheus-14.2.1 アプリ バージョン 2.26.0
Prometheus アダプター - チャート 2.14.2 アプリ バージョン 0.8.4
そして、ヘルムを使用してインストールされたすべての場所