🎉

k8sのautoscaleを体験してみる

2025/02/17に公開

こちらの続き:

https://zenn.dev/greenteabiscuit/articles/81e1e897ba9c50

今回は前回のPHPコードを走らせて、オートスケールを体験してみる。

今のところはPodは一つだけ走っている。

web-php-7ff76d6c6c-n7b8n      1/1     Running   0              21h   10.244.1.32   node01   <none>           <none>

node01では以下のように説明されている

$ kubectl describe node node01
...
  Namespace                   Name                           CPU Requests  CPU Limits  Memory Requests  Memory Limits  Age
  ---------                   ----                           ------------  ----------  ---------------  -------------  ---
  default                     web-php-7ff76d6c6c-n7b8n       200m (10%)    0 (0%)      0 (0%)           0 (0%)         21h
  kube-flannel                kube-flannel-ds-x82p8          100m (5%)     0 (0%)      50Mi (2%)        0 (0%)         22d
  kube-system                 kube-proxy-zt6qq               0 (0%)        0 (0%)      0 (0%)           0 (0%)         22d
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests    Limits
  --------           --------    ------
  cpu                300m (15%)  0 (0%)
  memory             50Mi (2%)   0 (0%)

もう一つのターミナルで以下を走らせる:

watch kubectl get deploy,rs,hpa,po,svc
Output
Every 2.0s: kubectl get deploy,rs,hpa,po,svc                                                                                                      controlplane: Sat Feb 15 13:18:17 2025

NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/web-php   1/1     1            1           22h

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/web-php-7ff76d6c6c   1         1         1       21h

NAME                           READY   STATUS    RESTARTS   AGE
pod/busybox                    1/1     Running   0          67s
pod/web-php-7ff76d6c6c-n7b8n   1/1     Running   0          21h

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service/kubernetes       ClusterIP   10.96.0.1       <none>        443/TCP        22d
service/web-php          NodePort    10.98.184.194   <none>        80:31446/TCP   22h
service/web-service-np   NodePort    10.106.83.165   <none>        80:30785/TCP   11d

HPAを適用する。

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

HPAコントローラが作られた

NAME                                          REFERENCE            TARGETS              MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/web-php   Deployment/web-php   cpu: <unknown>/50%   1         10        0          13s

もう一つでは負荷をかけるbusyboxを起動する

kubectl run busybox --image=busybox --rm --restart=Never sh
while true; do wget -q -O - http://web-php>/dev/null; done

2分ほどたったところで新しいポッドが作成されたことがわかる!

CPU使用率は以下のような感じ:

$ kubectl top pods
NAME                       CPU(cores)   MEMORY(bytes)
busybox                    579m         1Mi
web-php-7ff76d6c6c-l69s7   44m          11Mi
web-php-7ff76d6c6c-n7b8n   65m          12Mi

Busyboxのリクエストを止めると、数分後にポッドも1に戻った。


NAME                                          REFERENCE            TARGETS       MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/web-php   Deployment/web-php   cpu: 0%/50%   1         10        1          20m

NAME                           READY   STATUS    RESTARTS   AGE
pod/busybox                    1/1     Running   0          22m
pod/busybox2                   1/1     Running   0          10m
pod/web-php-7ff76d6c6c-l69s7   1/1     Running   0          18m

Discussion