Red Hat上でのKubernetesサーバーの自動スケーリング – HPAの実装方法

Red Hat上でのKubernetesサーバーの自動スケーリング – HPAの実装方法

効率的なリソース管理とパフォーマンス最適化を実現するためには、Kubernetesの自動スケーリングが欠かせません。このブログでは、RHEL環境でHorizontal Pod Autoscaler(HPA)を実装し、負荷に応じたPodのスケールを行う手順を説明します。

Horizontal Pod Autoscaler(HPA)とは

HPAは、PodのCPUやメモリ使用率などのメトリクスを監視し、Podの数を動的に調整する機能です。

HPA実行に必要な条件

  • クラスターにMetrics Serverがデプロイされている
  • Podにリソースリクエストとリミットが設定されている

Metrics Serverのインストール

リソース使用状況を収集するため、Metrics Serverをインストールします。

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

サンプルデプロイメントの作成

リソースリクエストを含むデプロイメントを作成します。

apiVersion: apps/v1
kind: Deployment
metadata:
name: example-deployment
spec:
replicas: 2
selector:
matchLabels:
app: example-app
template:
metadata:
labels:
app: example-app
spec:
containers:
- name: example-container
image: nginx
resources:
requests:
cpu: "200m"
memory: "128Mi"

HPAの作成

CPU使用率を50%に保つようHPAを作成します。

kubectl autoscale deployment example-deployment --cpu-percent=50 --min=1 --max=10

HPAのステータス確認

現在のHPAの状態とメトリクスを確認します。

kubectl get hpa

負荷テストの実施

負荷を生成してHPAの動作を確認します。

kubectl run -i --tty load-generator --image=busybox --restart=Never -- /bin/sh
while true; do wget -q -O- http://<SERVICE_IP>; done

Podのスケール状況を確認

スケーリングによって増加したPodを確認します。

kubectl get pods

HPAの設定変更

既存のHPAを編集して、新たな目標やポリシーを追加します。

kubectl edit hpa example-deployment

Custom Metricsの使用

カスタムメトリクスに基づいたスケーリング設定を作成します。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: custom-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: example-deployment
minReplicas: 1
maxReplicas: 10
metrics:
type: External
external:
metricName: http_requests
targetValue: 1000

スケーリングポリシーの設定

スケーリングの速度や安定性をカスタマイズするポリシーを適用します。

kubectl patch hpa example-deployment -p '{"spec":{"behavior":{"scaleDown":{"stabilizationWindowSeconds":300}}}}'

HPA導入時の注意点

  • 適切なリソース設定を行う
  • リソース消費が他のサービスに影響を与えないよう監視を実施
  • 負荷シナリオを考慮したテストを行う

HPAが役立つユースケース

  • 高トラフィックを処理するeコマースサイト
  • 需要が変動するAPIサービス
  • イベントベースのバックエンドシステム