๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋Ÿฌ์Šคํ„ฐ์—๋Š” 3๊ฐ€์ง€์˜ AutoScaler ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. HPA, VPA, CA ์ฃ .

 

๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด๋ณด์ž๋ฉด,

  • HPA : Horizontal Pod Autoscaler ์˜ ์ค„์ž„๋ง๋กœ, ํŒŒ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์žฅ/์ถ•์†Œ ํ•ด์คŒ
  • VPA : Vertical Pod Autoscaler ์˜ ์ค„์ž„๋ง๋กœ, ํŒŒ๋“œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ง€์ •๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•์žฅ/์ถ•์†Œ ํ•ด์คŒ
  • CA : Cluster Autoscaler ์˜ ์ค„์ž„๋ง๋กœ, ๋…ธ๋“œ์˜ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์žฅ/์ถ•์†Œ ํ•ด์คŒ

 

HPA, VPA ๋Š” Metrics Server ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ๋˜ VPC ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋”ฐ๋กœ ์„ค์น˜ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  CA ๋Š” ๋ณดํ†ต Karpenter ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” HPA ์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ณด๊ณ ์ž ํ•˜๋Š”๋ฐ, ์‚ฌ์‹ค HPA ๋Š” ์–ด๋ ค์šด ๊ฐœ๋…์ด ํฌ๊ฒŒ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋…์„ ์„ค๋ช…ํ•˜๊ธฐ ๋ณด๋‹ค๋Š” HPA ๊ฐ€ ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์ณ ํŒŒ๋“œ ๊ฐฏ์ˆ˜๋ฅผ ํ™•์žฅ/์ถ•์†Œํ•˜๋Š”์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘๋ฐฉ์‹์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋ ›์ธ ๋‘๋”์ฝ”๋“œ~

 

 

 

๊ฐœ๋…


 

ํ•œ๋ฒˆ ๊ฐ„๋‹จํžˆ ๊ฐœ๋…์„ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋ณด์ฃ .

HorizontalPodAutoscaler๋Š” ๋””ํ”Œ๋กœ์ด๋จผํŠธ ๋ฐ ๋””ํ”Œ๋กœ์ด๋จผํŠธ์˜ ๋ ˆํ”Œ๋ฆฌ์นด์…‹์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •

 

 

HPA ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ปดํฌ๋„ŒํŠธ ์ค‘์˜ ํ•˜๋‚˜์ธ ์ปจํŠธ๋กค๋Ÿฌ ๋งค๋‹ˆ์ €์— ์˜ํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

HorizontalPodAutoscaler ๋งค๋‹ˆํŽ˜์ŠคํŠธ์— ์ง€์ •๋œ ๋ฉ”ํŠธ๋ฆญ์— ๋Œ€ํ•ด ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋ฅ ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ Metrics Server ์—๊ฒŒ ์งˆ์˜ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  namespace: hpa-example
spec:
  maxReplicas: 10
  minReplicas: 2  
  metrics:
    - resource:
        name: memory
        target:
          averageUtilization: 75
          type: Utilization
      type: Resource
    - resource:
        name: cpu
        target:
          averageUtilization: 75
          type: Utilization
      type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-example

 

Autoscaling API Version ์€ alpha, beta, v1, v2 ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์ด ์žˆ์œผ๋‹ˆ ์‚ฌ์šฉ์— ์ฃผ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๋ฉ”ํŠธ๋ฆญ์€ Metrics Sever ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ , ์ฃผ๊ธฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ 15์ดˆ์ด๋ฉฐ, kube-controller-manager ์˜ --horizontal-pod-autoscaler-sync-period ํŒŒ๋ผ๋ฏธํ„ฐ์— ์˜ํ•ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

/etc/kubernetes/manifests/kube-controller-manager.yaml ์— ์ถ”๊ฐ€

 

Metrics Server ๋ง๊ณ  Prometheus Adapter ์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ฉ”ํŠธ๋ฆญ ์„œ๋ฒ„์— ์งˆ์˜ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™•์žฅ/์ถ•์†Œ ๋  ๋•Œ ์ ์šฉ๋˜๋Š” ๊ฐฏ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

(autoscaling/v2 ๋ถ€ํ„ฐ ์ฑ„ํƒ๋œ behavior ๋ผ๋Š” ์˜ต์…˜์„ ์ฃผ๋ฉด ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋‹ค์Œ ๊ธ€์—์„œ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค)

์›ํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ์ˆ˜ = ceil[ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ์ˆ˜ * ( ํ˜„์žฌ ๋ฉ”ํŠธ๋ฆญ ๊ฐ’ / ์›ํ•˜๋Š” ๋ฉ”ํŠธ๋ฆญ ๊ฐ’ )]

 

์•Œ์•„๋‘˜ ์ ์€ ๊ณต์‹๋ฌธ์„œ์—์„œ ๋งํ•˜๋“ฏ, ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์ด ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋กœ๋Š” HPA ๊ฐ€ ์Šค์ผ€์ค„๋ง๋˜์ง€ ์•Š๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ๋“œ ๋ฉ”ํŠธ๋ฆญ์ด ์ •ํ™•ํ•˜๊ฒŒ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

 

๊ทธ๋Ÿผ ์ด์ œ ์‹ค์Šต์„ ํ†ตํ•ด์„œ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ฃ !

 

 

ScaleUp ์‹ค์Šต


 

์˜ˆ์ œ์— ์‚ฌ์šฉ๋˜๋Š” ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ๊ณต์‹ ๋ฌธ์„œ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
        - name: php-apache
          image: registry.k8s.io/hpa-example
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: 300m
            requests:
              cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
    - port: 80
  selector:
    run: php-apache
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
autoscaling/v1 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, v2 ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ˆ˜์ •ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
.containers[].resources ์— ๊ฐ’์„ ๋ช…์‹œํ•˜์ง€ ์•Š์œผ๋ฉด HPA ๋™์ž‘ํ•˜์ง€ ์•Š์œผ๋‹ˆ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์ค๋‹ˆ๋‹ค.
HPA ๋Š” .resources.requests ์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .
minReplicas ๋ฅผ 0 ์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐฐํฌ ํ•œ ํ›„์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ํŒŒ๋“œ์— ๋ถ€ํ•˜๋ฅผ ์ค๋‹ˆ๋‹ค.

$ kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

 

๋ถ€ํ•˜๋ฅผ ์ค€ ํ›„ 10๋ถ„ ๋™์•ˆ ๊ด€์ฐฐ์„ ํ•œ ๊ฒฐ๊ณผ ์ž…๋‹ˆ๋‹ค.

10๋ถ„ ๋™์•ˆ์˜ ๊ด€์ฐฐ

 

--horizontal-pod-autoscaler-sync-period ์˜ ๊ธฐ๋ณธ ๊ฐ’์ด 15์ดˆ ์ด๊ธฐ ๋•Œ๋ฌธ์— AGE ํ•„๋“œ๋ฅผ ๋ณด๋ฉด ๋Œ€๋žต 15์ดˆ๋งˆ๋‹ค ํ‰๊ฐ€๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  4๊ฐœ ์ด์ƒ์€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ๊ฑธ ๋ณด๋‹ˆ ๋ช…๋ น์–ด "while sleep 0.01; do wget -q -O- http://php-apache; done" ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ 3๊ฐœ์˜ ํŒŒ๋“œ๋งŒ ์žˆ์œผ๋ฉด ์ถฉ๋ถ„ํ•˜๋‹จ ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋…ธ๋ž‘์ƒ‰ ๋„ค๋ชจ๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ธฐ ์ „์„ ํ‘œ์‹œํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์•„๋ž˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ์ •๋ง ๊ฐฏ์ˆ˜๊ฐ€ ์ฆ๊ฐ€๋˜๋Š” ์ง€๋ฅผ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

์›ํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ์ˆ˜ = ceil[ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ์ˆ˜ * ( ํ˜„์žฌ ๋ฉ”ํŠธ๋ฆญ ๊ฐ’ / ์›ํ•˜๋Š” ๋ฉ”ํŠธ๋ฆญ ๊ฐ’ )]
ceil ์€ ์˜ฌ๋ฆผ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€์ธ floor ๋Š” ๋ฒ„๋ฆผ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ceil ์€ ์ฒœ์žฅ์ด์—ฌ์„œ ์˜ฌ๋ฆผ, floor ์€ ๋ฐ”๋‹ฅ์ด์—ฌ์„œ ๋ฒ„๋ฆผ์œผ๋กœ ์™ธ์šฐ๋ฉด ์•ˆํ—ท๊ฐˆ๋ฆฌ์ฃ .

 

์ฒซ๋ฒˆ์งธ ๋…ธ๋ž‘์ƒ‰ ๋„ค๋ชจ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด ๋‹ค์Œ ํ‰๊ฐ€(15์ดˆ ๋’ค) ๋•Œ ๋ ˆํ”Œ๋ฆฌ์นด๊ฐ€ 2๊ฐœ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๊ฐœ -> 2๊ฐœ

 

๋‘๋ฒˆ์งธ ๋…ธ๋ž‘์ƒ‰ ๋„ค๋ชจ๋Š” 3๊ฐœ๋กœ ๋Š˜์–ด๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๊ฐœ -> 3๊ฐœ

 

์œ„์—์„œ ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ํผ์„ผํŠธ๋กœ ํ–ˆ๋Š”๋ฐ, ์•„๋ž˜์ฒ˜๋Ÿผ ๊ณ„์‚ฐํ•ด๋„ ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

ํŒŒ๋“œ๋“ค์˜ ํ˜„์žฌ ๋ฉ”ํŠธ๋ฆญ ํ‰๊ท  ๊ฐ’ / (ํŒŒ๋“œ๋“ค์˜ ํ‰๊ท  request ๊ฐ’ * targetCPUUtilizationPercentage)

 

 

ScaleDown ์‹ค์Šต


 

์ด๋ฒˆ์—” ScaleDown ์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

๋ฉ”ํŠธ๋ฆญ ๊ฐ’์€ ์ˆ˜์‹œ๋กœ ๋ณ€ํ•˜๋Š” ๋™์  ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๊ฐ€ ์ž์ฃผ ์š”๋™์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ thrashing ๋˜๋Š” flapping ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด stabilization window (์•ˆ์ •ํ™” ์œˆ๋„์šฐ) ๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

HPA ๋Š” ์Šค์ผ€์ผ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ํ‰๊ฐ€ ์‹œ๊ฐ„ ๋•Œ๋งˆ๋‹ค window ์— ๊ธฐ๋กํ•˜๋ฉฐ 5๋ถ„(๊ธฐ๋ณธ๊ฐ’)์ด ๋˜๋Š” ์‹œ์ ์— window ์—์„œ ๊ฐ€์žฅ ๋†’์€ ์ˆซ์ž๋ฅผ ์„ ํƒํ•ด ์Šค์ผ€์ผ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ 5๋ถ„์€ --horizontal-pod-autoscaler-downscale-stabilization (๊ธฐ๋ณธ๊ฐ’ 5๋ถ„) ์— ์˜ํ•ด ์„ค์ •๋˜๋ฉฐ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ kube-controller-manager ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  window ๋Š” ScaleDown ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

autoscailing/v2 ์˜ behavior ์˜ต์…˜์„ ํ†ตํ•ด ScaleUp ์—๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋’ค์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

 

์ด์ œ ๋ช…๋ น์–ด "while sleep 0.01; do wget -q -O- http://php-apache; done" ๋ฅผ ์ค‘๋‹จํ•ด๋ณด์ฃ .

๊ทธ๋Ÿผ ์ตœ์ข…์ ์œผ๋กœ ๋‹ค์‹œ ํŒŒ๋“œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ 3๊ฐœ -> 1๊ฐœ๊ฐ€ ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๊ฐœ -> 1๊ฐœ

 

๊ทธ๋Ÿฐ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ์‚ด์ง ์ด์ƒํ•œ ๋ถ€๋ถ„์ด ์žˆ์œผ์‹ค ๊ฒ๋‹ˆ๋‹ค. 3๊ฐœ -> 2๊ฐœ๊ฐ€ ๋˜๋Š” ๊ตฌ๊ฐ„์˜ TARGETS ๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด 2๊ฐœ ์•„๋‹Œ 1๊ฐœ๊ฐ€ ๋˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

2๊ฐœ๊ฐ€ ์•„๋‹Œ 1๊ฐœ๊ฐ€ ๋˜์•ผ ์ •์ƒ ์•„๋‹Œ๊ฐ€?

 

1์ด ์•„๋‹Œ ์ด์œ ๋Š” ๋ฐ”๋กœ Sync Period ๋งˆ๋‹ค ๋ฐ”๋กœ๋ฐ”๋กœ ํ‰๊ฐ€๊ฐ€ ๋ฐ˜์˜๋˜๋Š” ScaleUp ๊ณผ ๋‹ฌ๋ฆฌ ScaleDown ์€ window ๋ฅผ ์ฐธ๊ณ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ window ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” ํ(Queue) ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ์ด๋ฉฐ FIFO ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋˜์ฃ .

--horizontal-pod-autoscaler-sync-period ๊ฐ€ 15์ดˆ์ž„

 

44๋ถ„ 15์ดˆ๋ถ€ํ„ฐ ๋ช…๋ น์–ด "while sleep 0.01; do wget -q -O- http://php-apache; done" ์„ ์ค‘๋‹จํ•ด์„œ ๋ถ€ํ•˜๋ฅผ ๋Š์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋•Œ window ์—๋Š”  [3, 3, 3, .... 3, 3] ๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

15์ดˆ๋งˆ๋‹ค ํ‰๊ฐ€๋˜๊ณ  5๋ถ„์ด๋ผ๋Š” stabilization ์ด๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋ฏ€๋กœ window ์—๋Š” ์ด 1๋ถ„๋‹น 4๋ฒˆ ํ‰๊ฐ€ * 5๋ถ„ = 20 ๊ฐœ์˜ ๊ฐ’์ด ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 3์€ ํ˜„์žฌ์˜ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ,3, 3, 3 ,3, 3, 3, 3]

 

2๋ฒˆ์งธ(44๋ถ„ 30์ดˆ, 29%/50%)๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ์›ํ•˜๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๊ฐ€ 2๊ฐœ์ด๋ฏ€๋กœ, windows ์—๋Š” 2 ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  FIFO ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” 3 ์ด ๋น ์ง€๊ฒŒ ๋˜์ฃ .

[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ,3, 3, 3 ,3, 3, 3, 2]

 

ํ•˜์ง€๋งŒ HPA ๋Š” ๊ฐ€์žฅ ๋†’์€ ์ˆ˜๋ฅผ ๋ฐ”๋ผ๋ณด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋Š” 3๊ฐœ์ž…๋‹ˆ๋‹ค.

 

3๋ฒˆ์งธ(44๋ถ„ 45์ดˆ, 1%/50%) ์—๋Š” HPA ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•ด์„œ 1 ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” 3 ์ด ๋˜ ๋น ์ง€์ฃ .

[3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 ,3, 3, 3 ,3, 3, 3, 2, 1]

 

 

4๋ฒˆ์งธ๋ถ€ํ„ฐ๋Š” ๊ฐ‘์ž๊ธฐ 5๋ถ„์„ ๊ฑด๋„ˆ๋›ด 49๋ถ„ 15์ดˆ์— ๋กœ๊ทธ๊ฐ€ ์ฐํ˜”์Šต๋‹ˆ๋‹ค. --horizontal-pod-autoscaler-downscale-stabilization ์˜ ๊ธฐ๋ณธ๊ฐ’์ด 5๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

๋”ฑ 4๋ฒˆ์งธ(49๋ถ„ 15์ดˆ, 1%/50%) ์ˆœ๊ฐ„๊นŒ์ง€๋Š” window ์— 3 ์ด ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๊ณ , ๋™์‹œ์— 1 ์ด window ์— ๋“ค์–ด์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค.

[3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

 

5๋ฒˆ์งธ(49๋ถ„ 30์ดˆ, 1%/50%)  ์— ๋˜ 1 ์ด ๋“ค์–ด์˜ฌ ๊ฒƒ์ด๊ณ , ์ด์ œ ๋” ์ด์ƒ 3 ์€ windows ์— ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ํฐ ์ˆซ์ž์ธ 2 ๋ฅผ HPA ๊ฐ€ ์ฑ„ํƒํ•˜๊ฒŒ ๋˜๊ณ ,  ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๊ฐ€ ๋“œ๋””์–ด 2 ๋กœ ๋ฉ๋‹ˆ๋‹ค.

[2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

 

6๋ฒˆ์งธ(49๋ถ„ 45์ดˆ, 1%/50%) ์— ๋˜ 1 ์ด ๋“ค์–ด์˜ฌ ๊ฒƒ์ด๊ณ , ์ด์ œ ๋” ์ด์ƒ 2 ๋„ window ์— ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

window ์—” ์ด์ œ 1๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋Š” 1 ์ด ๋ฉ๋‹ˆ๋‹ค.

[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

 

์ง€๊ธˆ๊นŒ์ง€ ์•Œ์•„๋ณธ ๋™์ž‘์€ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์„ค์ •๊ฐ’์œผ๋กœ ์ง„ํ–‰๋œ ๋™์ž‘ ๋ฐฉ์‹์ด์˜€๋Š”๋ฐ, autoscaling/v2 ์— ์ถ”๊ฐ€๋œ behavior ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปค์Šคํ…€ํ•œ ์Šค์ผ€์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Behavior


 

behavior ํ•„๋“œ๋Š” autoscaling/v2beta2 ๋ฒ„์ „๋ถ€ํ„ฐ ์ œ๊ณต๋˜์—ˆ์œผ๋ฉฐ, ํ˜„์žฌ autoscaling/v2 ๋ฅผ ํ†ตํ•ด ์•ˆ์ •ํ™” ๋ฒ„์ „์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

behavior ํ•„๋“œ๋ฅผ ํ†ตํ•ด ์Šค์ผ€์ผ์—… ๋™์ž‘๊ณผ ์Šค์ผ€์ผ๋‹ค์šด ๋™์ž‘์„ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•๋ถ„์— ScaleDown ๋•Œ๋งŒ ์ ์šฉ๋˜๋˜ stabilization window ์„ ์ด์ œ ScaleUp ๋•Œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด thrashing(flapping) ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ๋“œ๋กœ ์‹คํ–‰๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ๋Š”๋ฐ ํ•ด๋‹น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Initializing ๋•Œ๋งŒ cpu ๊ฐ€ ํŠ€์–ด์˜ค๋ฅด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

thrashing(flapping) ์ด ๋ฐœ์ƒํ•จ

 

์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์€ ์ด๋ฏธ ์˜ˆ์ƒ๋˜์–ด ์žˆ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์žˆ์–ด ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์ด์ฃ . ํ•˜์ง€๋งŒ HPA ๋Š” ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค์ผ€์ผ์—…์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿด ๋•Œ stabilization window ์„ ์ด์šฉํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ์Šค์ผ€์ผ์—…์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„์—์„œ ์‚ฌ์šฉํ•œ HPA ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  maxReplicas: 10
  minReplicas: 2
  metrics:
    - resource:
        name: memory
        target:
          averageUtilization: 50
          type: Utilization
      type: Resource
    - resource:
        name: cpu
        target:
          averageUtilization: 50
          type: Utilization
      type: Resource
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      selectPolicy: Max
      policies:
        - type: Percent
          value: 100
          periodSeconds: 60
    scaleUp:
      stabilizationWindowSeconds: 0
      selectPolicy: Max
      policies:
        - type: Percent
          value: 100
          periodSeconds: 60
        - type: Pods
          value: 4
          periodSeconds: 60

 

.behavior ์˜์—ญ์— ์žˆ๋Š” ๊ฐ’๋“ค์€ ๋ชจ๋‘ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.

behavior ๊ธฐ๋ณธ๊ฐ’๋“ค

๋” ๋งŽ์€ ๊ฐ’๋“ค์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ!

 

.metrics ํ•„๋“œ๋„ v2 ๋กœ ๋˜๋ฉด์„œ ์•ฝ๊ฐ„์˜ ๋ณ€ํ™”๊ฐ€ ์žˆ์ง€๋งŒ ์ค‘์š”ํ•œ ๊ฑด behavior ์ž…๋‹ˆ๋‹ค.

behavior:
  scaleDown:
    stabilizationWindowSeconds: 300
    selectPolicy: Max    
    policies:
    - type: Percent
      value: 100
      periodSeconds: 15
  scaleUp:
    stabilizationWindowSeconds: 0
    selectPolicy: Max    
    policies:
    - type: Percent
      value: 100
      periodSeconds: 15
    - type: Pods
      value: 4
      periodSeconds: 15
  • scaleUp/scaleDown : ์Šค์ผ€์ผ์—…/๋‹ค์šด์— ๋Œ€ํ•œ ์ œ์–ด ๊ทœ์น™์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • stabilizationWindowSeconds : thrashing, flapping ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. 
    ์ด๋ฏธ ์œ„์— "ScaleDown ์‹ค์Šต" ์„น์…˜์—์„œ ํ•ด๋‹น ๊ฐœ๋…์„ ๋‹ค๋ฃจ์—ˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค.
    (๊ธฐ๋ณธ๊ฐ’ ScaleUp : 0s ScaleDown : 300s)
  • selectPolicy : Min, Max, Disabled ์ด 3๊ฐœ์˜ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ •์ฑ…์—์„œ ์–ด๋–ค ๊ฐ’์„ ์„ ํƒํ• ์ง€ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
    ๋งŒ์•ฝ Min ์ด๋ผ๋ฉด ๊ฐ€์žฅ ์ž‘์„ ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    (๊ธฐ๋ณธ๊ฐ’ Max)
  • policy : ์Šค์ผ€์ผ์—…/์Šค์ผ€์ผ๋‹ค์šด์„ ๊ทœ์ œํ•˜๋Š” ์ •์ฑ… ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
    • type : Pods, Percent ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Pods ๋ฅผ ์„ ํƒํ•˜๋ฉด ๊ฐฏ์ˆ˜๋กœ, Percent ๋ฅผ ์„ ํƒํ•˜๋ฉฐ ํผ์„ผํŠธ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
    • periodSeconds : ํ‰๊ฐ€๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ์ฃผ๊ธฐ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ •์ฑ…์ด true ์ธ์ง€ ํŒ๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
    • value : ์Šค์ผ€์ผ์—…/๋‹ค์šด๋˜๋Š” ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. type ์ด Pods ๋ผ๋ฉด value ๋Š” '์ดํ•˜' ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ๋งŒ ๋ณด๋ฉด ๊ฐ ํ•„๋“œ๊ฐ€ ์–ด๋–ค๊ฑด์ง€ ์•Œ๊ธฐ๊ฐ€ ํž˜๋“œ๋‹ˆ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์„ค๋ช…ํ•ด๋“œ๋ฆฌ์ฃ !

 

์˜ˆ์ œ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ณต์‹ ๊นƒํ—™์—์„œ ์ œ๊ณต๋˜๋Š” ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์›๋ฌธ์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด ํ•ด๋‹น ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

๋‹ค๋งŒ, ๋ฌธ์„œ์— ํ‹€๋ฆฐ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ๋งž๊ฒŒ๋” ์ˆ˜์ •ํ•˜์—ฌ์„œ ๊ธ€์„ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

๊ฐ€๋Šฅํ•œ ํ•œ ๋น ๋ฅด๊ฒŒ Scale Up

behavior:
  scaleUp:
    policies:
    - type: Percent
      value: 900
      periodSeconds: 60

 

60์ดˆ๋งˆ๋‹ค Target ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ํ‰๊ฐ€ํ•˜๊ณ , ํ‰๊ฐ€๊ฐ€ true ๋ผ๋ฉด ํ˜„์žฌ์˜ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜์— 900% ์ฆ๊ฐ€๋œ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.

 

1 -> 10 -> 100 -> 1000

1๋ถ„ ๋งˆ๋‹ค ์œ„์™€ ๊ฐ™์ด ํŒŒ๋“œ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ maxReplicas ์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

ScaleDown ์€ ๋ช…์‹œ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

 

๊ฐ€๋Šฅํ•œ ํ•œ ๋น ๋ฅด๊ฒŒ Scale Up ํ•˜๊ณ , ์ ์ฐจ์ ์œผ๋กœ Scale Down

behavior:
  scaleUp:
    policies:
    - type: Percent
      value: 900
      periodSeconds: 60
  scaleDown:
    policies:
    - type: Pods
      value: 1
      periodSeconds: 600 # (i.e., scale down one pod every 10 min)

Scale Up ๊ฒฝ์šฐ์—๋Š” 60์ดˆ๋งˆ๋‹ค Target ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ํ‰๊ฐ€ํ•˜๊ณ , ํ‰๊ฐ€๊ฐ€ true ๋ผ๋ฉด ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜์— 900% ์ฆ๊ฐ€๋œ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋ฅผ ๋”ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  Target ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์— ์˜ํ•ด Scale Down ์ด ๋  ๋•Œ์—๋Š” 10๋ถ„๋งˆ๋‹ค ํ‰๊ฐ€ํ•˜๊ณ , ํ‰๊ฐ€๊ฐ€ true ๋ผ๋ฉด ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋Š” ํ•˜๋‚˜์”ฉ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.

   1000   ->   1000 ->   1000 -> … (7 more min) -> 999
(1๋ถ„ ์ง€๋‚˜๊ณ )   (1๋ถ„ ์ง€๋‚˜๊ณ ) (1๋ถ„ ์ง€๋‚˜๊ณ )   (7๋ถ„ ์ง€๋‚˜๊ณ )   (์ด 10๋ถ„์ด ์ง€๋‚˜๊ณ )
maxReplicas ๋Š” 1000 ๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

 

 

์ ์ฐจ์ ์œผ๋กœ Scale Up

behavior:
  scaleUp:
    policies:
    - type: Pods
      value: 1
      periodSeconds: 300

5๋ถ„๋งˆ๋‹ค Target ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ํ‰๊ฐ€ํ•˜๊ณ , ํ‰๊ฐ€๊ฐ€ true ๋ผ๋ฉด ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋ฅผ 1๊ฐœ์”ฉ ๋”ํ•ฉ๋‹ˆ๋‹ค.

 

1 -> 2 -> 3 -> 4

ScaleDown ์€ ์ง€์ •ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ๊ฐ’์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

 

 

๊ธฐ๋ณธ ๊ฐ’์œผ๋กœ Scale Up ํ•˜๊ณ , Scale Down์€ ํ•˜์ง€์•Š์Œ

behavior:
  scaleDown:
    selectPolicy: Disabled

ScaleUp ์€ ๊ธฐ๋ณธ๊ฐ’์„ ๋”ฐ๋ฅด๊ณ  ScaleDown ์€ ์ง„ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

Scale Down ์ „ ์•ˆ์ •ํ™”

behavior:
  scaleDown:
    stabilizationWindowSeconds: 600
    selectPolicy: Max    
    policies:
    - type: Pods
      value: 5
      periodSeconds: 60
๋ฌธ์„œ์—๋Š” periodSeconds: 600 ์œผ๋กœ ๋‚˜์™€์žˆ๋Š”๋ฐ ์˜คํƒ€์ธ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ „ํ›„ ์ƒํ™ฉ์„ ๋ณด๋ฉด 60 ์ด ๋งž์Šต๋‹ˆ๋‹ค.

 

60์ดˆ๋งˆ๋‹ค Target ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ํ‰๊ฐ€ํ•˜๊ณ , ํ‰๊ฐ€๊ฐ€ true ๋ผ๋ฉด ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜์— 5๊ฐœ ์ดํ•˜๋ฅผ ๋บ๋‹ˆ๋‹ค. ๋‹จ ์•ˆ์ •ํ™” ์‹œ๊ฐ„ 10๋ถ„(600์ดˆ) ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

์•ˆ์ •ํ™”์˜ ๋™์žฅ ๋ฐฉ์‹์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ "Scale Down ์„น์…˜" ๊ณผ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋Š” 10๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

HPA ๊ฐ€ ์ƒ์„ฑ๋œ ๊ธฐ์ค€์œผ๋กœ 9๋ถ„๊นŒ์ง€๋Š” ์–ด๋– ํ•œ ScaleDown ์€ ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ , ๊ทธ์ € window ์— ์ถ”์ฒœ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

# ๊ฐ ์ˆซ์ž๋Š” ์ž„์˜์˜ ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐ๋œ ๊ฒƒ์œผ๋กœ, ํฐ ์˜๋ฏธ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
[10, 9, 8, 9, 9, 8, 9, 8, 9]

 

๊ทธ๋ฆฌ๊ณ  10๋ถ„์ด ๋  ๋•Œ 8 ์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. (8 ์ด๋ผ๋Š” ์ˆซ์ž๋Š” ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ํฐ ์˜๋ฏธ๋Š” ์—†์Šต๋‹ˆ๋‹ค)

[10, 9, 8, 9, 9, 8, 9, 8, 9, 8]

 

60์ดˆ๋งˆ๋‹ค ํ‰๊ฐ€๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์•ˆ์ •ํ™” ์‹œ๊ฐ„์ด 600์ดˆ์˜€์œผ๋ฏ€๋กœ ์ด ์ฐฝ์—๋Š” ์ตœ๋Œ€ 10๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

selectPolicy: Max ์ด๋ฏ€๋กœ ๊ฐ€์žฅ ํฐ ์ˆซ์ž๋ฅผ Pick ํ•ด์„œ HPA ๋Š” 10 ๊ฐœ๋กœ ScaleDown ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ, ์–ด์ฐจํ”ผ ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๊ฐ€ 10๊ฐœ์ด๋ฏ€๋กœ ๋ณ€ํ™”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  11๋ถ„์— 7 ์ด ์ถ”๊ฐ€๋˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. FIFO ๋ฐฉ์‹์ฒ˜๋Ÿผ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ˆซ์ž๊ฐ€ ๋น ์ง€๊ณ , ๊ฐ€์žฅ ๋’ค์— 7 ์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

[9, 8, 9, 9, 8, 9, 8, 9, 8, 7]

 

์ด๋ฒˆ window ์—์„  ๊ฐ€์žฅ ํฐ ์ˆซ์ž๊ฐ€ 9 ์ด๋ฏ€๋กœ 10 -> 9 ๋กœ ScaleDown ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

ScaleUp ์€ ๋”ฐ๋กœ ๋ช…์‹œ๋œ ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ ๋™์ž‘์œผ๋กœ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

 

 

๋ถ€์ •์ ์ธ ์‹œ๊ทธ๋„๋กœ ์ธํ•œ ScaleUp ํ”ผํ•˜๊ธฐ

behavior:
  scaleUp:
    stabilizationWindowSeconds: 300
    selectPolicy: Min
    policies:
    - type: Pods
      value: 20
      periodSeconds: 60

60์ดˆ๋งˆ๋‹ค Target ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์„ ํ‰๊ฐ€ํ•˜๊ณ , ํ‰๊ฐ€๊ฐ€ true ๋ผ๋ฉด ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜์— 20๊ฐœ ์ดํ•˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ ์•ˆ์ •ํ™” ์‹œ๊ฐ„ 5๋ถ„(300์ดˆ) ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

 

๋ถ€์ •์ ์ธ ์‹œ๊ทธ๋„(false positive signals) ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์•„์ฃผ ์งง์€ ์ŠคํŒŒ์ดํฌ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

thrashing(flapping) ์ด ๋ฐœ์ƒํ•จ

 

 

ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋Š” 2๊ฐœ๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

HPA ๊ฐ€ ์ƒ์„ฑ๋œ ๊ธฐ์ค€์œผ๋กœ 5๋ถ„๊นŒ์ง€๋Š” ์–ด๋– ํ•œ ScaleDown ์€ ์ง„ํ–‰๋˜์ง€ ์•Š๊ณ , ๊ทธ์ € window ์— ์ถ”์ฒœ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

60์ดˆ๋งˆ๋‹ค ํ‰๊ฐ€๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์•ˆ์ •ํ™” ์‹œ๊ฐ„์ด 300์ดˆ์˜€์œผ๋ฏ€๋กœ ์ด ์ฐฝ์—๋Š” ์ตœ๋Œ€ 5๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๊ฐ€ 2 ์ด๋ฏ€๋กœ ํ˜„์žฌ ๋ ˆํ”Œ๋ฆฌ์นด ๊ฐฏ์ˆ˜๋Š” 2๊ฐœ ์ž…๋‹ˆ๋‹ค.

# ๊ฐ ์ˆซ์ž๋Š” ์ž„์˜์˜ ๋ฉ”ํŠธ๋ฆญ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐ๋œ ๊ฒƒ์œผ๋กœ, ํฐ ์˜๋ฏธ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
[2, 3, 19, 10, 3]

 

6๋ถ„์ด ๋  ๋•Œ 4 ๋ผ๋Š” ๊ฐ’์ด window ์— ๋“ค์–ด์˜ค๊ณ , ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” 2 ๋Š” ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

[3, 19, 10, 3, 4]

 

์ด๋ฒˆ window ์—์„  ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๊ฐ€ 3 ์ด๋ฏ€๋กœ  2 -> 3 ์œผ๋กœ ScaleUp ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

 

behavior ์„ ์ด์šฉํ•˜๋ฉด ScaleUp/Down ์— ๋Œ€ํ•ด ๋” ์ปค์Šคํ…€ํ•˜๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€๋Š” ๋‹จ์ˆœํžˆ ํŒŒ๋“œ์˜ CPU ์™€ Memory ๋กœ๋งŒ ๋ฉ”ํŠธ๋ฆญ์„ ๊ณ„์‚ฐํ–ˆ์ง€๋งŒ KEDA ์™€ ๊ฐ™์€ ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋” ๋‹ค์–‘ํ•˜๊ฒŒ ๋ฉ”ํŠธ๋ฆญ์„ ๊ณ„์‚ฐํ•ด์„œ HPA ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://www.cncf.io/projects/keda/

 

 

๊ทธ๋Ÿฌ๋ฉด ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€!

๋ฐ˜์‘ํ˜•
profile on loading

Loading...