Kubernetes VPA (Pod Vertical Autoscaling) を 1 つの記事でマスターする

Kubernetes VPA (Pod Vertical Autoscaling) を 1 つの記事でマスターする

導入

前回の記事では、HPA(Horizo​​ntal Pod Autoscaler)の実装について紹介しました。 HPA は一般に水平拡張と呼ばれます。 HPA とは異なり、Vertical Pod Autoscaler (VPA) は Pod の CPU とメモリのプロパティを自動的に調整します。これを垂直拡張と呼びます。 VPA は、サービス操作に適した CPU およびメモリ構成を提供できるため、サービス リソースの使用量を見積もる時間を節約し、リソースをより合理的に使用できます。もちろん、VPA はリソースの使用状況に基づいてポッド リソースを「調整」することもできます。ここで調整に二重引用符を使用するのは、その実装メカニズムが動的な増加ではなく再構築であるためです。実際の例を挙げます。メモリ制限が 100Mi であるが、現在 98Mi が使用されているとします。それ以上大きい場合はOOMになります。このとき、VPA はメモリ制限のサイズを垂直方向に増加します。このタイプの VPA は、es などの大量のリソースを消費するアプリケーションに適しています。大きな値を与えるとリソースが無駄になり、小さな値を与えるとリソースが足りなくなります。そこで、vpa が役に立ちます。もちろん、vpa は hpa のようにデフォルトで k8s に統合されていないため、自分で構成する必要があります。

VPA と HPA

基本的に、VPA と HPA の違いはスケーリング方法です。 HPA はポッドを追加または削除することでスケーリングし、それによって容量を水平方向にスケーリングします。ただし、VPA は既存の Pod コンテナー内の CPU およびメモリ リソースを増減することでスケーリングし、容量を垂直方向にスケーリングします。次の表では、Kubernetes VPA と HPA の違いについて詳しく説明します。

容量を調整する必要がある

水平スケーリング (HPA)

垂直スケーリング (VPA)

その他のリソース

ポッドの追加

既存のポッドコンテナのCPUまたはメモリリソースを増やす

リソースの削減

ポッドの削除

既存のPodコンテナのCPUまたはメモリリソースを削減する

仕組み

写真

VPA の構成要素

VPA 展開には、VPA Recommender、VPA Updater、VPA Admission Controller という 3 つの主要コンポーネントがあります。各コンポーネントの機能を見てみましょう。 VPA 推奨者:

  • リソースの使用率を監視し、目標値を計算します。
  • メトリック履歴、OOM イベント、VPA 展開仕様を表示し、適切なリクエストを推奨します。定義された制限要求に応じて制限を増減します。

VPA アップデータ:

  • 新しいリソース制限を必要とするポッドを削除します。
  • 「updateMode: Auto」が定義されている場合は、推奨者が提案するものをすべて実装します。

VPA アドミッション コントローラー:

  • VPA Updater がポッドを削除して再起動するたびに、新しいポッドが起動する前に、CPU とメモリの設定が (Webhook を使用して) 変更されます。
  • Vertical Pod Autoscaler の updateMode が「Auto」に設定されている場合、Pod のリソース要求を変更する必要がある場合、Pod は削除されます。 Kubernetes の設計上、実行中のポッドのリソース要求を変更する唯一の方法は、ポッドを再作成することです。

Kubernetes VPA の動作モード

写真

  1. ユーザーが VPA を構成します。
  2. VPA Recommender は、メトリック サーバーから VPA 構成とリソース使用率メト​​リックを読み取ります。
  3. VPA Recommender は、Pod リソースの推奨を提供します。
  4. VPA Updater は Pod リソースの推奨事項を読み取ります。
  5. VPA アップデータがポッドの終了を開始します。
  6. デプロイメントはポッドが終了したことを認識し、レプリカ構成に合わせてポッドを再作成します。
  7. ポッドの再作成中に、VPA アドミッション コントローラーはポッド リソースの推奨事項を取得します。 Kubernetes は実行中のポッドのリソース制限を動的に変更することをサポートしていないため、VPA は既存のポッドを新しい制限で更新できません。古い制限を使用するポッドを終了します。 Pod のコントローラーが Kubernetes API サーバーに置き換えを要求すると、VPA アドミッション コントローラーは更新されたリソース要求と制限値を新しい Pod の仕様に挿入します。
  8. 最後に、VPA アドミッション コントローラーはポッドの推奨事項をオーバーライドします。この例では、VPA アドミッション コントローラーがポッドに「250m」CPU を追加しました。

ベストプラクティス

大まかな考え方がわかったところで、始めましょう。

克隆代码# git clone https://github.com/kubernetes/autoscaler.git由于某些原因拉不到镜像,改yaml修改优先使用本地镜像# cd autoscaler/vertical-pod-autoscaler/deploy # sed -i 's/Always/IfNotPresent/g' recommender-deployment.yaml # sed -i 's/Always/IfNotPresent/g' admission-controller-deployment.yaml # sed -i 's/Always/IfNotPresent/g' updater-deployment.yaml # 拉取镜像# docker pull giantswarm/vpa-admission-controller:0.14.0 # docker pull giantswarm/vpa-recommender:0.14.0 # docker pull giantswarm/vpa-updater:0.14.0 # 修改tag # docker tag giantswarm/vpa-updater:0.14.0 registry.k8s.io/autoscaling/vpa-updater:0.14.0 # docker tag giantswarm/vpa-recommender:0.14.0 registry.k8s.io/autoscaling/vpa-recommender:0.14.0 # docker tag giantswarm/vpa-admission-controller:0.14.0 registry.k8s.io/autoscaling/vpa-admission-controller:0.14.0 # cd autoscaler/vertical-pod-autoscaler/hack # 安装脚本安装之前保证你的K8S集群的metrics-server已安装,并且openssl升级到1.1.1或更高版本# ./vpa-up.sh

インストールが完了するまで待ちます

# kubectl get pods -n kube-system | grep vpa kube-system vpa-admission-controller-75bffbf8d8-6hxqq 1/1 Running 0 5m9s kube-system vpa-recommender-748c55b5bf-kqqjc 1/1 Running 0 4m34s kube-system vpa-updater-679d5dcdd6-lslc7 1/1 Running 0 4m15s

VPA では、リソース要件を自動的に計算するコントローラーごとに Vertical Pod Autoscaler リソースを挿入する必要があります。これは最も一般的なデプロイメントになります。 VPAには4つの動作モードがある

  • 「自動」: VPA はポッドの作成時にリソース要求を割り当て、優先更新メカニズムを使用して既存のポッドでそれらを更新します。現在、これは「再作成」と同等です (下記参照)。ポッド要求の再起動不要の (「インプレース」) 更新が利用可能になると、この「自動」モードでは優先更新メカニズムとして使用できます。注意: VPA のこの機能は実験段階であり、アプリケーションのダウンタイムが発生する可能性があります。現在実行中のポッドのリソースが VPA の推奨値を満たしていない場合、ポッドは排除され、十分なリソースを持つ新しいサービスが再デプロイされます。
  • 「再作成」: VPA は、ポッドの作成時にリソース要求を割り当て、要求されたリソースが新しい提案と大幅に異なる場合は既存のポッドでリソース要求を更新します (定義されている場合は、ポッド中断予算を考慮します)。このモードは、リソース要求が変更されたときに Pod が再起動されることを保証する必要がある場合にのみ、まれに使用してください。それ以外の場合は、この「自動」モードを優先し、再起動不要のアップデートが利用可能になったらすぐに活用してください。注: VPA のこの機能は実験的なものであり、アプリケーションのダウンタイムを引き起こす可能性があります。
  • 「初期」: VPA はポッドの作成時にのみリソース要求を割り当て、後で変更することはありません。
  • 「オフ」: VPA はポッドのリソース要件を自動的に変更しません。これらの推奨事項は計算され、VPA オブジェクトで検査できます。このモードではリソースの推奨事項のみが取得され、ポッドは更新されません。

updateMode: Auto で VPA を作成する

# 将updateMode中的requests 改为CPU:50m,Memory: 50Mi,同时将updateMode修改为Auto # 创建一个pod和svc # kubectl get pods -n vpa NAME READY STATUS RESTARTS AGE nginx-8454bb78d8-67pth 1/1 Running 0 9s nginx-8454bb78d8-6efsh 1/1 Running 0 9s # kubectl get svc -n vpa NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx NodePort 10.0.200.5 <none> 80:45425/TCP 15s # 进行压测,压测到一半时,突然连接断了,说明POD被重新创建了# ab -c 1000 -n 100000 http://192.168.0.191:45425/ This is ApacheBench, Version 2.3 <$Revision: 1430300 $> Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking 192.168.0.191 (be patient) apr_socket_recv: Connection reset by peer (104) Total of 187078 requests completed # 查看vpa # kubectl describe vpa nginx-vpa -n vpa | tail -n 20 Conditions: Last Transition Time: 2023-09-07T15:41:32Z Status: True Type: RecommendationProvided Recommendation: Container Recommendations: Container Name: nginx Lower Bound: #容器的最小估计值Cpu: 100m Memory: 262144k Target: #目标估计是我们用于设置资源请求的估计Cpu: 350m Memory: 262144k Uncapped Target: #无上限目标估计是在没有minAllowed和maxAllowed限制的情况下产生的目标估计Cpu: 350m Memory: 262144k Upper Bound: #上限是容器的最大建议资源估计Cpu: 2 Memory: 405160855 Events: <none> # 查看pod被重新创建了稍高的配置# kubectl get pods -n vpa NAME READY STATUS RESTARTS AGE nginx-daecsfv8d8-see8h 1/1 Running 0 4m nginx-daecsfv8d8-fsise 1/1 Running 0 3m

既知の制限

  • VPA が Pod リソースを更新するたびに、Pod が再作成され、実行中のすべてのコンテナが再作成されます。ポッドは異なるノード上で再作成できます。
  • VPA は、推奨事項を適用するために排除または削除したポッド (自動モードおよび再作成モードで構成されている場合) が正常に再作成されることを保証できません。この問題は、VPA と Cluster Autoscaler を組み合わせることで部分的に解決できます。
  • VPA は、コントローラーの下で実行されていないポッドのリソースを更新しません。
  • 現在、Vertical Pod Autoscaler は、CPU またはメモリ上の Horizo​​ntal Pod Autoscaler (HPA) と併用しないでください。ただし、カスタム メトリックや外部メトリックでは、VPA を HPA と組み合わせて使用​​できます。
  • VPA アドミッション コントローラーはアドミッション Webhook です。クラスターにアドミッション Webhook を追加する場合は、それらがどのように相互作用し、互いに競合する可能性があるかどうかを分析することが重要です。アドミッション コントローラの順序は、API サーバー上のフラグによって定義されます。
  • VPA はほとんどのメモリ不足イベントに反応しますが、すべてのケースに反応するわけではありません。
  • VPA のパフォーマンスは大規模クラスターではテストされていません。
  • VPA の推奨事項は、利用可能なリソース (ノード サイズ、利用可能なサイズ、利用可能な割り当てなど) を超え、ポッドが保留状態になる可能性があります。この問題は、VPA と Cluster Autoscaler を組み合わせることで部分的に解決できます。
  • 同じ Pod に一致する複数の VPA リソースの動作は未定義です。

要約する

この記事では、VPA を使用して、POD に基づく構成の水平拡張を実装します。合理的に使用することで、K8S の利用率が向上し、コスト削減と効率向上が実現します。しかし、現在の VPA にもいくつか問題があります。個人的には、VPA の最大の問題は、サービスを再構築することであり、再構築プロセス中にトラフィックが失われる可能性があると考えています。しかし、良いニュースとしては、バージョン 1.27 からは、アプリケーションを再起動せずにコンテナの CPU とメモリのリソース制限を動的に調整できるようになりました。近い将来、ダイナミックな拡張はよりスムーズになるでしょう。一緒に楽しみましょう〜

<<:  クラウド変革の 3 つの段階は何ですか?

>>:  OpenTelemetry は理解しやすいです。

推薦する

フォグコンピューティング: 現代のスマートホーム技術の陰の立役者

フォグ コンピューティングは、テクノロジーの世界では比較的知られていない概念ですが、スマート ホーム...

クラウドにデータを保存する前に知っておくべき9つのこと

今、誰もがクラウドコンピューティングについて話しています。現状では、企業はクラウド コンピューティン...

YonBIP Procurement Cloudは、サプライチェーンの強化と補完を支援する調達ビジネスネットワークを構築します。

8月1日に開催された中央委員会政治局会議では、科学技術革新と産業チェーンおよびサプライチェーンの回復...

サーバーレス コンピューティングにより開発が容易になり、運用コストが削減される理由

エンタープライズ開発者は通常、ビジネス上の問題を解決するためにコードの作成に多くの時間を費やします。...

なぜ電子商取引企業は Taobao ブランドを作成する必要があるのでしょうか?

関連統計によると、現在、タオバオには600万以上の店舗があり、経営不振により毎日1万店舗が閉店してい...

EコマースウェブサイトのSEOに関する8つのヒント

電子商取引ウェブサイトの最適化は、電子商取引ネットワークマーケティングの最も重要な戦略の1つになって...

家庭用品のフラッシュセールサイト「ワン・キングス・レーン」の歴史

3月26日、Techcrunchは本日、フラッシュセールサイトOne Kings Laneの開発経緯...

onetechcloud: 高速 VPS が 20% オフ、最低 21 元、オプション ルート:「香港 CN2/香港 CMI/米国 CN2/米国 CU2」

onetechcloudのVPSクラウドサーバーは現在、全製品で20%割引(四半期支払いのみ)を提供...

実際のクリック数を増やし、ランキングを上げる

Baidu アルゴリズムの継続的な更新により、外部リンクの数はもはやウェブサイトのランキングを決定す...

webcare360: ウクライナ、1G 帯域幅、無制限トラフィック、苦情防止サーバー/著作権を無視

苦情対策サーバー事業を専門とする民間企業「webcare360」は、2009年1月に「セントクリスト...

電子商取引のリベートモデルは消滅したのか?関連ナビゲーションウェブサイトは変化した

一方で、ユーザーは買い物時に追加のキャッシュバックを得ることができ、他方では、販売者にトラフィックを...

同義語の中からSEOキーワードを選択する方法

私のクライアントの 1 社は複数のサービスを提供していましたが、そのうちの 1 社は SEO に関す...

tripodcloud: 信頼性の高い米国の cn2 gia vps、12% 割引、3 つのネットワークへの直接接続 (China Telecom CN2 GIA\China Unicom AS4837\China Mobile CMI)

Tripodcloud は本当に変わったビジネスです。2001 年の設立以来、宣伝やプロモーションを...

クラウドベンダーが契約交渉中に「ノー」と言う可能性のある3つのこと

[[414042]]企業がクラウド コンピューティング サービスの契約交渉を準備する際には、適切な価...

玉橋動画:目立つCMのコピーライティングはこうやって生まれるんですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています最近人気の...