【Kubernetes】HPAを使いつつ手動でスケールさせる

2023.01.24
2024.03.24
Kubernetes
Horizontal Pod Autoscalerkubectl

はじめに

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でリソース更新

はじめに `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

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee