【Kubernetes】HPAを使いつつ手動でスケールさせる
はじめに
HPA(Horizontal Pod Autoscaler)を使っている場合に、DeploymentのPodの数を手動でスケールアウト、スケールインする方法を紹介します。
HPAを使いつつ手動スケール
HPAを使っている場合は、スケールアウト・スケールインはHPAに任せることが基本になるかと思います。しかし、場合によっては事前に最低限のレプリカ数を増やしておく必要などがあったりします。そのような場合に、kubectl scale
コマンドを使ってレプリカ数を増やしたりしても、結局はHPAがレプリカ数をコントロールしてしまいます。
HPAを使っている場合に手動でスケールさせるには、下記のようにkubectl patch
コマンドを使って、HPAのminReplicas
を更新します。
1kubectl patch hpa {hpa name} -p '{"spec":{"minReplicas":1}}'
1kubectl patch hpa {hpa name} -p '{"spec":{"minReplicas":5}}'
minReplicas
を更新することで、通常状態(負荷がかかっていない状態)のレプリカ数を増やすことができます。
また、kubectl edit
で更新することも可能です。
1kubectl edit hpa {hpa name}
ただし、これらの方法だとkubectl scale
とは違いスケールするまでに若干時間がかかります。
kubectl patch
については、下記を参考にしてください。
kubectl patchでリソース更新
はじめに `kubectl patch`について、実際の例を見ながら使い方を紹介していきます。
実際に試してみる
では、実際に試してみたいと思います。
用意するDeployment(deployment.yml
)とHPA(hpa.yml
)は下記の通りになります。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: nginx
5spec:
6 selector:
7 matchLabels:
8 run: nginx
9 template:
10 metadata:
11 labels:
12 run: nginx
13 spec:
14 containers:
15 - name: nginx
16 image: nginx
17 resources:
18 limits:
19 cpu: 500m
20 requests:
21 cpu: 200m
1apiVersion: autoscaling/v2
2kind: HorizontalPodAutoscaler
3metadata:
4 name: nginx-hpa
5spec:
6 scaleTargetRef:
7 apiVersion: apps/v1
8 kind: Deployment
9 name: nginx
10 minReplicas: 3
11 maxReplicas: 10
12 metrics:
13 - type: Resource
14 resource:
15 name: cpu
16 target:
17 type: Utilization
18 averageUtilization: 30
DeploymentとHPAを作成します。
1kubectl apply -f deployment.yml
1kubectl apply -f hpa.yml
最小のレプリカ数が3のDeploymentがデプロイされました。
1❯ kubectl get deploy,hpa
2NAME READY UP-TO-DATE AVAILABLE AGE
3deployment.apps/nginx 3/3 3 3 3m3s
4
5NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
6horizontalpodautoscaler.autoscaling/nginx-hpa Deployment/nginx 0%/30% 3 10 3 2m49s
まずはminReplicas
を更新して、スケールアウトしてみます。
1kubectl patch hpa nginx-hpa -p '{"spec":{"minReplicas":5}}'
しばらくすると、レプリカ数が増えました。
1❯ kubectl get deploy,hpa
2NAME READY UP-TO-DATE AVAILABLE AGE
3deployment.apps/nginx 5/5 5 5 5m19s
4
5NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
6horizontalpodautoscaler.autoscaling/nginx-hpa Deployment/nginx 0%/30% 5 10 5 5m5s
次はminReplicas
を減らして、スケールインしてみます。
1kubectl patch hpa nginx-hpa -p '{"spec":{"minReplicas":1}}'
こちらも、しばらくするとレプリカ数が減りました。
1❯ kubectl get deploy,hpa
2NAME READY UP-TO-DATE AVAILABLE AGE
3deployment.apps/nginx 1/1 1 1 16m
4
5NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
6horizontalpodautoscaler.autoscaling/nginx-hpa Deployment/nginx 0%/30% 1 10 1 16m