Kubernetesのポッドの自動拡張および縮小とHPAの原則

実際のビジネスシナリオでは、サービスを拡張する必要があるシナリオに遭遇することがよくあります(たとえば、テストストレステスト、eコマーススパイク、大きなプロモーション、またはリソースの制約、ワークロードの削減などが原因で、サービスインスタンスの数を確認する必要があります)。拡張操作)。Kubernetesでは、Deployment / RCのスケールメカニズムを使用して、自動スケーリング操作を容易にすることができます。

Kubernetesスケーリング

Kubernetesのポッドの拡張と収縮は、手動と自動の2つのタイプに分けられます。

1.手動モード

手動モードでは、ポッドコピーの数は、kubectl scaleコマンドを使用してDeployment / RCに設定されます。ワンクリックで行えます。

例:

猫scale.yaml

---

apiVersion:apps / v1

種類:展開

メタデータ:

 名前:ops-nginx

 名前空間:ops

スペック:

 セレクタ:

   matchLabels:

     アプリ:ops-nginx

 レプリカ:1

 テンプレート:

   メタデータ:

     ラベル:

       アプリ:ops-nginx

   スペック:

     imagePullSecrets:

     -名前:cd-registry

     コンテナ:

     -画像:harbor.ttsingops.com/nginx/nginx:1.16.0

       名前:ops-nginx

kubectl apply -f scale.yaml

kubectl get po -n ops

1.png

#Expand

kubectlスケールデプロイops-nginx -n ops --replicas 5

2.png

#縮小操作

kubectlスケールデプロイops-nginx -n ops --replicas 2

kubectl get po -n ops

3.png

2.自動モード

ユーザーは、特定のパフォーマンスインデックスまたはPrometheusカスタムインデックスに基づいて拡張および縮小する必要があり、システムはこの範囲内のパフォーマンスインデックスに従って自動的に変更および調整します。

HAPの概要

 HPA(水平ポッドオートスケーラー、ポッド水平オートスケーラー)は、Kubernetes V1.1から導入されました。CPU使用率に基づいて自動ポッド拡張および縮小の機能を実現するために使用されます。HPAコントローラーは、マスターのkube-controller-managerサービスの起動パラメーターで定義された期間に基づいており、水平ポッド自動スケーラー同期期間が定期的にターゲットポッドのCPU使用率を検出し、条件が満たされたときにRCまたはデプロイメントをチェックします。ポッドのコピー数は、ユーザー定義の平均ポッドCPU使用率を満たすように調整されます。

HPAのバージョンの進化:

HPAは現在、3つのメジャーバージョンをサポートしています:autoscaling / v1、autoscaling / v2beta1およびautuscaling / v2beta2。

これら3つのバージョンの違いは何ですか?

自動スケーリング/ v1バージョンは、1つのCPUインジケーターを備えたポッド水平スケーリングのみをサポートします。

Autoscaling / v2beta1は、カスタムインジケーターのサポートを追加します。cadvisorによって公開されたインジケーターに加えて、サードパーティが提供するQPSなどのカスタムインジケーターや、一部のサードパーティコンポーネントをサポートする他のリソースに基づく拡張もサポートします。 。

自動スケーリング/ v2beta2は外部インジケーターのサポートを追加します

HPA自動拡張および縮小の原理?

 KubernetesのMetrics Serverは、すべてのポッドコピーの指標データを継続的に収集します。HPAコントローラーはこれらのデータをMetrics Server API(HeapsterのAPIまたは集約API、徐々に廃止され、Metrice Serverを使用)を通じて取得し、定義されたスケーリングルールに基づいて計算して、ターゲットポッドコピーの数を取得します。ターゲットポッドのコピー数が現在のコピー数と異なる場合、HPAコントローラーはポッドのコピーコントローラー(RC / Deployment)へのスケーリング操作を開始して、ポッドコピーの数を調整し、スケーリング操作を完了します。

4.png

考え:

ポッドのCPU使用率が一定の時間内に突然増加し、すぐに減少した場合、ポッドは頻繁に伸縮しませんか?つまり、コピーの数は常に調整されます。ここには冷却サイクルがあります。各膨張および収縮後の冷却時間はどれくらいですか。

HPAでは、デフォルトの拡張冷却サイクルは3分で、収縮冷却サイクルは5分です。

冷却時間は、kube-controller-managerコンポーネントの起動パラメーターを調整することで設定できます。

--horizo​​ntal-pod-autoscaler-downscale-delay Expansion Cooling

--horizo​​ntal-pod-autoscaler-upscale-delayシュリンク冷却

例:

例を挙げて、自動拡張のためにポッドに圧力をかけます。

猫auto_scale.yaml

---

apiVersion:apps / v1

種類:展開

メタデータ:

 名前:auto-nginx

 名前空間:ops

スペック:

 セレクタ:

   matchLabels:

     アプリ:auto-nginx

 レプリカ:1

 テンプレート:

   メタデータ:

     ラベル:

       アプリ:auto-nginx

   スペック:

     imagePullSecrets:

     -名前:cd-registry

     コンテナ:

     -画像:harbor.ttsingops.com/nginx/nginx:1.16.0

       名前:auto-nginx

       リソース:

         リクエスト:

           CPU:200メートル

       ポート:

       -containerPort:80

---

#サービス

apiVersion:v1

種類:サービス

メタデータ:

 名前:auto-nginx

 名前空間:ops

スペック:

 タイプ:NodePort

 ポート:

 -ポート:8088

   プロトコル:TCP

   targetPort: 80

   nodePort: 38088

 selector:

   app: auto-nginx

kubectl apply -f auto_scale.yaml

kubectl get svc,pod -n ops -o wide

5.png

cat auto_nginx_hpa.yaml

apiVersion: autoscaling/v1

kind: HorizontalPodAutoscaler

metadata:

 name: auto-nginx-hpa

 namespace: ops

spec:

 scaleTargetRef:

   apiVersion: apps/v1

   kind: Deployment

   name: auto-nginx

 minReplicas: 1

 maxReplicas: 8

 targetCPUUtilizationPercentage: 50

kubectl apply -f auto_nginx_hpa.yaml

kubectl get  hpa -n ops

6.png

使用apache的ab压测工具进行施压

可以在node任意节点安装ab工具

yum install -y httpd-tools

ab -n 10000000  -c 10000 http://192.168.1.211:38088/index.html

#因为我把Service映射到NodePort

#查看hpa情况

kubectl get hpa -n ops

7.png

#查看Pod情况

kubectl get pods -n ops

8.png

#查看events信息

kubectl get events -n ops

9.png

#等待几分钟后,再次查看Pod缩容情况

kubectl get po -n ops

10.png

思考:

Kubernetes是如何对Pod的副本数量进行扩缩容的呢?

官网已经有详细解释:就是根据当前CPU指标和所需CPU指标进行相除。

たとえば、現在のCPUインデックスが200mで、必要なインデックス値が100mの場合、200.0 / 100.0 = 2であるため、コピー数は2倍になります。

現在の値が50mの場合、50.0 / 100.0 = 0.5であるため、コピー数は半分になります。

11.png

詳細については、公式ウェブサイトの説明を参照してください。

https://kubernetes.io/docs/tasks/run-application/horizo​​ntal-pod-autoscale/

問題:

1. HPA自動スケーリングポッドの実行中は、自動スケーリングを実行できません

メトリックサーバーコンポーネントをインストールする必要があります

<< Ansbile Deploying Kubernetes 1.16.10 Cluster >>にある5. metrics-serverのインストールを参照してください

構成手順

【参考資料】

https://kubernetes.io/docs/tasks/run-application/horizo​​ntal-pod-autoscale/


おすすめ

転載: blog.51cto.com/3388803/2534750