実際のビジネスシナリオでは、サービスを拡張する必要があるシナリオに遭遇することがよくあります(たとえば、テストストレステスト、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
#Expand
kubectlスケールデプロイops-nginx -n ops --replicas 5
#縮小操作
kubectlスケールデプロイops-nginx -n ops --replicas 2
kubectl get po -n ops
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)へのスケーリング操作を開始して、ポッドコピーの数を調整し、スケーリング操作を完了します。
考え:
ポッドのCPU使用率が一定の時間内に突然増加し、すぐに減少した場合、ポッドは頻繁に伸縮しませんか?つまり、コピーの数は常に調整されます。ここには冷却サイクルがあります。各膨張および収縮後の冷却時間はどれくらいですか。
HPAでは、デフォルトの拡張冷却サイクルは3分で、収縮冷却サイクルは5分です。
冷却時間は、kube-controller-managerコンポーネントの起動パラメーターを調整することで設定できます。
--horizontal-pod-autoscaler-downscale-delay Expansion Cooling
--horizontal-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
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
使用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
#查看Pod情况
kubectl get pods -n ops
#查看events信息
kubectl get events -n ops
#等待几分钟后,再次查看Pod缩容情况
kubectl get po -n ops
思考:
Kubernetes是如何对Pod的副本数量进行扩缩容的呢?
官网已经有详细解释:就是根据当前CPU指标和所需CPU指标进行相除。
たとえば、現在のCPUインデックスが200mで、必要なインデックス値が100mの場合、200.0 / 100.0 = 2であるため、コピー数は2倍になります。
現在の値が50mの場合、50.0 / 100.0 = 0.5であるため、コピー数は半分になります。
詳細については、公式ウェブサイトの説明を参照してください。
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
問題:
1. HPA自動スケーリングポッドの実行中は、自動スケーリングを実行できません
メトリックサーバーコンポーネントをインストールする必要があります
<< Ansbile Deploying Kubernetes 1.16.10 Cluster >>にある5. metrics-serverのインストールを参照してください。
構成手順
【参考資料】
https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/