はじめに
HPA(Horizontal Pod Autoscaler)を使っている場合に、DeploymentのPodの数を手動でスケールアウト、スケールインする方法を紹介します。
HPAを使いつつ手動スケール
HPAを使っている場合は、スケールアウト・スケールインはHPAに任せることが基本になるかと思います。しかし、場合によっては事前に最低限のレプリカ数を増やしておく必要などがあったりします。そのような場合に、kubectl scale
コマンドを使ってレプリカ数を増やしたりしても、結局はHPAがレプリカ数をコントロールしてしまいます。
HPAを使っている場合に手動でスケールさせるには、下記のようにkubectl patch
コマンドを使って、HPAのminReplicas
を更新します。
kubectl patch hpa {hpa name} -p '{"spec":{"minReplicas":1}}'
kubectl patch hpa {hpa name} -p '{"spec":{"minReplicas":5}}'
minReplicas
を更新することで、通常状態(負荷がかかっていない状態)のレプリカ数を増やすことができます。
また、kubectl edit
で更新することも可能です。
kubectl edit hpa {hpa name}
ただし、これらの方法だとkubectl scale
とは違いスケールするまでに若干時間がかかります。
kubectl patch
については、下記を参考にしてください。

kubectl patchでリソース更新
はじめにkubectl patchについて、実際の例を見ながら使い方を紹介していきます。kubectl patchkubectl patchはStrategic Merge Patch、JSON Merge Patch、JSON Patch...
実際に試してみる
では、実際に試してみたいと思います。
用意するDeployment(deployment.yml
)とHPA(hpa.yml
)は下記の通りになります。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
limits:
cpu: 500m
requests:
cpu: 200m
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 30
DeploymentとHPAを作成します。
kubectl apply -f deployment.yml
kubectl apply -f hpa.yml
最小のレプリカ数が3のDeploymentがデプロイされました。
❯ kubectl get deploy,hpa
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 3/3 3 3 3m3s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/nginx-hpa Deployment/nginx 0%/30% 3 10 3 2m49s
まずはminReplicas
を更新して、スケールアウトしてみます。
kubectl patch hpa nginx-hpa -p '{"spec":{"minReplicas":5}}'
しばらくすると、レプリカ数が増えました。
❯ kubectl get deploy,hpa
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 5/5 5 5 5m19s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/nginx-hpa Deployment/nginx 0%/30% 5 10 5 5m5s
次はminReplicas
を減らして、スケールインしてみます。
kubectl patch hpa nginx-hpa -p '{"spec":{"minReplicas":1}}'
こちらも、しばらくするとレプリカ数が減りました。
❯ kubectl get deploy,hpa
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx 1/1 1 1 16m
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/nginx-hpa Deployment/nginx 0%/30% 1 10 1 16m