説明
HorizontalPodAutoscaler(HPA)は観測したメトリクスに応じて Deployment のレプリカ数を調整します。デプロイツールが固定の spec.replicas を繰り返し適用すると、HPA の調整値を上書きし、不要な増減が起きる場合があります。replicas の宣言だけで HPA が無効になるわけではありません。
想定される影響
- マニフェストの再適用でレプリカ数が減り、可用性に影響する場合があります。
- 複数の管理主体がレプリカ数を変え、スケーリングや変更管理が複雑になる場合があります。
対処方法
- HPA が管理する Deployment では、デプロイツールによる replicas の管理方法を確認し、不要な固定値の再適用を止めてください。既存フィールドの管理主体を変える際は、レプリカ数が予期せず初期化されないよう移行を計画してください。
- HPA の minReplicas、maxReplicas、メトリクスを実際の容量要件に合わせてください。メトリクスの提供機能と必要なリソース要求を用意し、デプロイや負荷変動時のレプリカ数を確認してください。
例
レプリカ数管理だけを比較する既存の抜粋です。実際のイメージとメトリクスの提供機能は別途必要です。CPU 使用率に基づく HPA には CPU 要求が必要なため、省略したコンテナーのリソース要求も実環境に合わせて設定してください。
変更前
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: example/web:v1
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 1
maxReplicas: 10
replicas: 1 の再適用は、HPA が増やしたレプリカ数を上書きする場合があります。この値自体は HPA を無効にしません。
変更後
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: example/web:v1
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 1
maxReplicas: 10
固定の replicas 宣言を省略します。自動スケーリングには、デプロイツールのフィールド管理と HPA メトリクスも正しく設定する必要があります。