[クラウドネイティブ] K8s ポッドの動的弾性拡張と収縮 HPA

[クラウドネイティブ] K8s ポッドの動的弾性拡張と収縮 HPA

1. 概要

Horizo​​ntal Pod Autoscaler (HPA​) は、平均 CPU 使用率、平均メモリ使用率、または指定したその他のカスタム メトリックに基づいて、Deployment​、ReplicaSet​、StatefulSet​ などのリソースを自動的に調整し、デプロイメントの自動拡張と縮小を実現して、デプロイメントのスケールが実際のサービス負荷に近くなるようにしています。 HPA は、DaemonSet などのスケーリングできないオブジェクトには適していません。

公式ドキュメント: https://kubernetes.io/zh-cn/docs/tasks/run-application/horizo​​ntal-pod-autoscale/

実際の生産では、一般的に次の 4 種類の指標が使用されます。

  1. リソース メトリック - CPU コアとメモリの使用率メト​​リック。
  2. ポッド メトリック (ネットワーク使用率やトラフィックなど)。
  3. オブジェクト メトリック - Ingress などの特定のオブジェクトのメトリックを使用して、1 秒あたりのリクエスト数でコンテナーをスケーリングできます。
  4. カスタム メトリック - サービス応答時間の定義や、応答時間が特定の指標に達したときに自動的にスケールアップするなどのカスタマイズされた監視。

2. metrics-serverをインストールする

1) HPAの前提条件

デフォルトでは、Horizo​​ntal Pod Autoscaler コントローラーは一連の API からメトリックを取得します。クラスター管理者は、HPA コントローラーがこれらの API にアクセスできるようにするために、次の条件を確認する必要があります。

  • リソース メトリックの場合、通常は metrics-server によって提供される metrics.k8s.io API が使用されます。クラスタープラグインとして起動できます。
  • カスタム メトリックの場合は、custom.metrics.k8s.io API が使用されます。これは、他のメトリック ソリューション ベンダーの「アダプタ」API サーバーによって提供されます。メトリクス パイプラインをチェックして、Kubernetes メトリクス アダプターが利用可能かどうかを確認します。
  • 外部メトリックの場合、external.metrics.k8s.io API が使用されます。上記のカスタム メトリック アダプターによって提供される可能性があります。

Kubernetes メトリクス サーバー:

  • Kubernetes Metrics Server は、クラスターのコア監視データを集約するサーバーです。デフォルトでは kubeadm によってデプロイされません。
  • メトリック サーバーは、ダッシュボードなどの他のコンポーネントによって使用されます。これは拡張された APIServer であり、API Aggregator に依存します。したがって、Metrics Server をインストールする前に、kube-apiserver で API Aggregator を有効にする必要があります。
  • Metrics API は現在のメトリック データのみを照会でき、履歴データは保存しません。
  • Metrics API URI は /apis/metrics.k8s.io/ であり、k8s.io/metrics で管理されています。
  • この API を使用するには、Metrics-server をデプロイする必要があります。 Metrics-server は、kubelet Summary API を呼び出してデータを取得します。

2) APIアグリゲータを有効にする

 # この行を追加
# --enable-aggregator-routing=true
### 各 API サーバーの kube - apiserver.yaml構成を変更して、アグリゲーター ルーティングを有効にします。マニフェスト構成を変更すると、API サーバーは自動的に再起動して変更が有効になります。
/etc/kubernetes/manifests/kube-apiserver.yamlを編集します。

3) metrics-serverのインストールを開始する

GitHubアドレス: https://github.com/kubernetes-sigs/metrics-server/releases ダウンロード

 https://github.com/kubernetes-sigs/metrics-server/releases/download/metrics-server-helm-chart-3.8.2/components.yamlを取得します。

改訂

 ...
テンプレート
メタデータ:
ラベル:
k8s -アプリ:メトリクス-サーバー
仕様:
コンテナ:
-引数:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=内部IP、外部IP、ホスト名
- --kubelet-use-node-status-port
- --kubelet-insecure-tls # この起動パラメータを追加します。そうでない場合、エラーが発生する可能性があります。
イメージ: registry .aliyuncs .com / google_containers / metrics - server : v0.6.1 # イメージアドレス状況に応じて変更できます
imagePullPolicy : IfNotPresent
...

メトリック サーバー ポッドを起動できず、ログ「メトリックを完全に収集できません: ... x509: 証明書を検証できません。IP SAN が含まれていないためです...」が表示されます。解決策: 証明書の検証をスキップするには、metrics-server に --kubelet-insecure-tls パラメータを追加します。

インストールを開始

 kubectl apply -fコンポーネント.yaml
kubectl get ポッド- n kube -システム| grep メトリック-サーバー
# チェック
kubectl get ポッド- n kube -システム| grep メトリック-サーバー
# ノードとポッドのリソース使用状況を表示する
kubectl トップノード
kubectl トップポッド

III.水平ポッドオートスケーラーの仕組み

1) 原理アーキテクチャ図

  • 自動検出期間は、kube-controller-manager の --horizo​​ntal-pod-autoscaler-sync-period パラメータによって設定されます (デフォルトの間隔は 15 秒です)。
  • metrics-server は、ポッド リソースの使用をサポートする metrics.k8s.io API を提供します。
  • 15 秒/サイクル -> metrics.k8s.io API をクエリ -> アルゴリズムの計算 -> スケール スケジューリングの呼び出し -> 特定のスケーリング戦略の実行。

2) HPAスケーリングアルゴリズム

最も基本的なレベルでは、Horizo​​ntal Pod Autoscaling コントローラーは、現在のメトリックと目的のメトリックに基づいてスケーリング比率を計算します。

予想されるレプリカ数= ceil [現在のレプリカ数* (現在のインデックス/予想されるインデックス) ]

1. 能力拡大

  • 計算されたスケーリング比率が 1.0 に近い場合、スケーリングは中止され、メトリック/期待される指標は 1.0 に近くなります。

2. 縮小

  • クールダウン/遅延: 遅延(クールダウン)時間を短く設定しすぎると、レプリカの数が以前と同様に変動する可能性があります。デフォルト値は5分(5m0s)です --horizo​​ntal-pod-autoscaler-downscale-stabilization

3. 特別扱い

  • 損失メトリック: スケールダウンする場合は、これらのポッドがターゲット値の 100% を消費すると想定し、スケールアップする場合は、これらのポッドがターゲット値の 0% を消費すると想定します。これにより、膨張と収縮をある程度抑制することができます。
  • 準備ができていないポッドがある場合: 準備ができていないポッドは必要なメトリックの 0% を消費すると保守的に想定し、スケーリングをさらに削減します。
  • 準備ができていないポッドとメトリックが欠落しているポッドが考慮され、使用率が再計算されます。新しい比率がスケーリングの反対方向であるか、許容範囲内である場合、スケーリングはスキップされます。それ以外の場合は、新しいスケーリング係数を使用します。
  • 複数のインジケーターを指定した場合、スケールインおよびスケールアウトするレプリカの数はインジケーターごとに計算され、その最大値がスケーリングに使用されます。

3) HPAオブジェクト定義

 apiバージョン:自動スケーリング/ v2beta2
種類: Horizo​​ntalPodAutoscaler
メタデータ:
名前: nginx
仕様:
行動
スケールダウン:
ポリシー:
-タイプ:ポッド
: 4
期間秒数: 60
-タイプ:パーセント
: 10
期間秒数: 60
安定化ウィンドウ秒数: 300

スケールターゲット参照:
apiバージョン:アプリ/ v1
種類:デプロイメント
名前: nginx
最小レプリカ数: 1
最大レプリカ数: 10
メトリクス:
-タイプ:リソース
リソース
名前: CPU
ターゲット:
タイプ:利用
平均使用率: 50

HPAオブジェクトのデフォルトの動作

行動
スケールダウン:
安定化ウィンドウ秒数: 300
ポリシー:
-タイプ:パーセント
: 100
期間秒数: 15
スケールアップ:
安定化ウィンドウ秒数: 0
ポリシー:
-タイプ:パーセント
: 100
期間秒数: 15
-タイプ:ポッド
: 4
期間秒数: 15
選択ポリシー:最大

4. 例のデモンストレーション

1) YAMLをオーケストレーションする

 apiバージョン:自動スケーリング/ v2
種類: Horizo​​ntalPodAutoscaler
メタデータ:
名前: hpa - nginx
仕様:
maxReplicas : 10 # 最大容量拡張は 10 ノード (ポッド) まで
minReplicas : 1 # 1ノード(ポッド)の最小拡張
メトリクス:
-リソース
名前: CPU
ターゲット:
averageUtilization : 40 # CPU リソース使用率が 40 %に達し、容量が拡張されます。 40 %未満の場合、容量が減少します。
# メモリを設定する
# 平均値: 40
タイプ:利用
タイプ:リソース
スケールターゲット参照:
apiバージョン:アプリ/ v1
種類:デプロイメント
名前: hpa - nginx
---
APIバージョン: v1
種類:サービス
メタデータ:
名前: hpa - nginx
仕様:
タイプ: NodePort
ポート:
-名前: "http"
ポート: 80
ターゲットポート: 80
ノードポート: 30080
セレクター:
サービス: hpa - nginx
---
apiバージョン:アプリ/ v1
種類:デプロイメント
メタデータ:
名前: hpa - nginx
仕様:
レプリカ 1
セレクター:
マッチラベル:
サービス: hpa - nginx
テンプレート
メタデータ:
ラベル:
サービス: hpa - nginx
仕様:
コンテナ:
-名前: hpa - nginx
画像: nginx :最新
リソース
リクエスト:
CPU : 100m
メモリ: 100マイル
制限:
CPU : 200m
メモリ: 200マイル

主なパラメータの説明は次のとおりです。

  • scaleTargetRef: ターゲット オブジェクト。Deployment、ReplicationController、または ReplicaSet のいずれかになります。
  • minReplicas と maxReplicas: Pod レプリカの最小数と最大数。システムはこの範囲内で自動的にスケールアップおよびスケールダウンし、各ポッドのメモリ使用量を上記で設定されたしきい値 averageUtilization である 40% に維持します。
  • メトリック: ターゲット メトリック値。メトリックでは、インジケーターのタイプはパラメータ タイプによって定義されます。インジケーターの対応するターゲット値は、パラメーター target によって定義されます。インジケーター データが目標値に達すると、システムは拡張および収縮操作をトリガーします (許容範囲を考慮すると、前のアルゴリズム セクションの説明を参照)。
  • CPU 使用率については、ターゲット パラメータに averageUtilization を設定して、目標の平均 CPU 使用率を定義します。
  • メモリ リソースの場合、ターゲット パラメータに AverageValue を設定して、ターゲットの平均メモリ使用量の値を定義します。

埋め込む

 kubectl apply -fテスト.yaml

2) ストレステストに腹筋ツールを使用する

Apache の公式 Web サイト http://httpd.apache.org/ にアクセスして Apache をダウンロードするか、yum を使用して Apache を直接インストールすることもできます。ここでは、yumをインストールする最も簡単な方法を選択します。

 yum インストール httpd -y

ストレステストを開始する

 ab - n 100000 - c 800 http : //ローカル- 168-182-112 : 30080 /

# - c: 同時接続数
# - n: リクエストの総数

<<:  クラウド移行はまだ成功していないが、「クラウド移行トレンド」はひっそりと到来している?

>>:  2023 年のクラウド コンピューティング インフラストラクチャのトレンド

推薦する

prometeus-ダラス VPS シンプルレビュー (384M メモリ)

ダラスの OpenVZ ベースの VPS である Prometeus に関するデータを皆さんと共有し...

あなたのための解釈: あなたのウェブサイトの SEO 最適化の目標は何ですか?

SEO 担当者として、SEO の目標はウェブサイトのランキングを上げることだということに多くの SE...

キーワード分析: Baidu の需要グラフを調べてキーワードをマイニングする

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

2021 年のエンタープライズ クラウド戦略の 7 つのトレンド

クラウド コンピューティングは IT ポートフォリオを最新化するための推奨モデルとなり、CIO はア...

検索エンジンから人工知能への究極の進化

KK はドキュメンタリー「Google and the World Brain」の中で、Google...

2024 年に向けてすべての企業が準備すべきクラウド コンピューティングの 10 大トレンド

2024 年には、企業は時間とコストを節約するためにクラウド移行の機会の先を見据えるようになります。...

あなたのウェブサイトをインターネット上の他のウェブサイトよりも目立たせるための3つの黄金律

近年の SEO の人気は誰の目にも明らかです。大規模な Web サイトはもちろんのこと、雨後の筍のよ...

DevOps と DataOps のために Kubernetes に移行するメリットは何ですか?

[[374206]] [51CTO.com クイック翻訳] Kubernetes(K8s)は2015...

インターネット マーケティング: 初心者がインターネット マーケティングを学ぶためのヒント

私は2か月以上毎日仕事が終わった後にインターネットマーケティングの知識のトレーニングをしてきました。...

百度の衰退から立ち直る方法

前回、「今回のアップデート後の百度の衰退と回復方法について」についてお話ししました。今回は、百度の衰...

Webmaster Network からの毎日のレポート: Alibaba と JD.com が上場を競い合い、Apple の急成長神話は打ち砕かれる

1. アリババとJD.comが上場をめぐって競争:劉強東氏が香港でファンドマネージャーらと会談社内演...

実用的な情報:クラウドストレージの7つの利点と5つの欠点、この記事を読んでください

最近はすべてがクラウドに移行しているようですが、ストレージはどうでしょうか?高価なデータセンターのス...

ドメイン名の選択はウェブサイトの成功の80%を決定します

インターネット上で本当に変化を起こしたいウェブサイトにとって、他人を利用することは大きなリスクを伴い...