[クラウドネイティブ] 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 年のクラウド コンピューティング インフラストラクチャのトレンド

推薦する

ビジネス戦争と紛争:ケータリングO2Oが世界を征服し、市場シェアをめぐる戦いを開始

O2Oは間違いなく中国の電子商取引市場におけるダークホースであり、近年の急速な拡大と成長は中国のO2...

ブラックハットSEO、ホワイトハットSEO、グレーハットSEOの違いは何ですか?海外マーケティングの選び方は?

海外の消費者にとってGoogleは主な情報源であり、ほとんどの消費者は買い物をする前にGoogleで...

ウェブサイト構築のメインラインを把握する:関連性の高いテーマを持つ高品質のオリジナルコンテンツ

今日のインターネット時代には、何万ものウェブサイトが存在し、毎日多くの新しいウェブサイトが作成されて...

使用量の増加、経費の無駄…感染症の流行が原因の「クラウド課題」に遭遇していませんか?

パブリック クラウドの導入率は、2020 年初頭にパンデミックが発生する前からすでに増加していました...

フィリピンサーバー: zenlayer、30% 割引、マニラデータセンター、カスタマイズ可能なリソース、最大 10Gbps の帯域幅

世界的に有名なデータセンターであるZenlayerは、フィリピンのマニラに独自のデータセンターを持ち...

情熱に集中し、他の人から学び、この分野の専門家になりましょう

2008 年、Microsoft Search Engine (Bing) のブログは、Web マス...

Huayun Data: 企業向けクラウド セキュリティ保護システムの構築方法

クラウドコンピューティング事業の急速な発展に伴い、国内外のクラウドコンピューティング企業間の特許紛争...

Pinduoduoが地元の小売店に参入

地元の小売市場に新たな参入者が加わった。 Pinduoduo は、地元の小売店を開拓するための入り口...

ウェブマスターの要約: SEO は単なる計画であり、テクノロジーとは何の関係もありません

この物議を醸すタイトルを決めるのに、私は長いイデオロギー的葛藤を味わいました。私は 2 年以上 SE...

Wangshang.comは借金と家賃の滞納が発覚し、少なくとも数千万の負債を抱えて「姿を消した」。

深セン晩報(記者 ヤン・ジャオシオン)「優秀なインターネット企業」、「誠実なインターネット企業」…福...

人々の買い物の仕方を変える可能性のある5つのショッピングサイト

オンラインショッピングは、より簡単、快適、便利になってきています。人々の買い物の仕方は、永遠に変わっ...

SEO 作業で PDCA を実施していますか?

私はSEOに2年以上携わっています。通常の仕事のプロセスでは、専門知識の学習と専門スキルの習得に加え...

ブランド型コーポレートサイトの構築は企業にどのようなメリットをもたらすのでしょうか?

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

Oracle NetSuiteは企業が期待以上の成長を達成できるよう支援します

[[261393]] Oracle NetSuite は本日、さまざまな業界の組織が成長を加速するた...

ラオ・モー:バイドゥのリンク取引取り締まり強化に関する雑感

1. ウェブサイトリンクの販売によって誰のチーズが動かされているのでしょうか?最近、百度がウェブサイ...