๐Ÿ“‚ Container & K8S/Kubernetes

[K8S] Karpenter์™€ Cluster AutoScaler(CA)

dhyuck 2024. 3. 11. 23:57
๋ฐ˜์‘ํ˜•

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ Auto Scaling

  • Auto Scaling์€ ๋ถ€ํ•˜์™€ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜์—ฌ ์ตœ์ ์˜ ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ ํšจ์œจ์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

  • EKS์—์„œ Auto Scaling์€ โ€˜Pod Auto Scalingโ€™๊ณผ โ€˜Node Auto Scalingโ€™ 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Pod์˜ Auto Scaling

    • Horizontal Pod Autoscaler(HPA) : pod์˜ ์ˆ˜ํ‰์ ์ธ scaling(scale out/in)์„ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ
    • Vertical Pod Autoscaler(VPA) : pod์˜ ์ˆ˜์ง์ ์ธ scaling(scale up/down)์„ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ
  • Node์˜ Auto Scaling

    • Cluster AutoScaler(CA) : k8s ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋…ธ๋“œ๋ฅผ scalingํ•˜๋Š” k8s์˜ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ(Scale out/in)
    • Karpenter : k8s cluster autocaling๋ฅผ ์œ„ํ•ด AWS์—์„œ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ

Karpenter์™€ Cluster Autoscaler

  • ์—ฌ๊ธฐ์„œ๋Š” EKS ํ™˜๊ฒฝ์—์„œ ๋™์ž‘ํ•˜๋Š” CA์™€ Karpenter๋ฅผ ๋น„๊ตํ•˜๊ณ  ๊ฐ๊ฐ์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

  • CA๋Š” AWS ๋ฆฌ์†Œ์Šค์ธ Auto Scaling Group(ASG)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜์ง€๋งŒ, Karpenter๋Š” EC2๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • CA๋Š” ๊ทธ๋ฃน ๋‹จ์œ„๋กœ ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜์ง€๋งŒ Karpenter๋Š” ๋…ธ๋“œ ๊ทธ๋ฃน์ด๋ผ๋Š”๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ œํ•œ ์—†์ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํ™•์žฅํ•˜๊ฑฐ๋‚˜ ์ถ•์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Karpenter๋Š” EC2 API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— CA์— ๋น„ํ•ด ๋น ๋ฅด๊ณ , ์œ ์—ฐํ•˜๋ฉฐ k8s nativeํ•ฉ๋‹ˆ๋‹ค.

  • CA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ EC2์— ๋Œ€ํ•ด ASG์—์„œ๋Š” ์ธ์Šคํ„ด์Šค๋กœ, EKS์—์„œ๋Š” ๋…ธ๋“œ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌ์— ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด, kubectl๋กœ ์ง์ ‘ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค๋ฉด ASG๋Š” ์ด๋ฅผ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • EKS์˜ ๋…ธ๋“œ ๊ทธ๋ฃน์€ 1๊ฐœ์˜ Capacity type๋งŒ ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    CA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ Spot๊ณผ On-Demand๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • CA๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…ธ๋“œ ๊ทธ๋ฃน์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํ™•์žฅํ•  ๋…ธ๋“œ ๊ทธ๋ฃน์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    CA๋Š” expander ์˜ต์…˜์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ scaling ์ „๋žต(random, priority, price ๋“ฑ)๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    (๊ธฐ๋ณธ expander๋Š” random์ด๊ณ  AWS๋Š” price expander๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

  • EKS์˜ ๋…ธ๋“œ ๊ทธ๋ฃน์€ ASG์— ๊ธฐ๋ฐ˜ํ•˜๋ฉฐ ๋…ธ๋“œ ๊ทธ๋ฃน์˜ ์ธ์Šคํ„ด์Šค ์‚ฌ์ด์ฆˆ๋Š” 1๊ฐ€์ง€๋กœ ์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

  • CA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…ธ๋“œ ๊ทธ๋ฃน์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • CA๋Š” ๋…ธ๋“œ ๊ทธ๋ฃน ๋‚ด์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ๊ฐ™์€ vCPU์™€ Memory๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์›์˜ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด 0.5vCPU์™€/256MiB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋‚˜์˜ ํŒŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๋ฐ 8vCPU/32Gib ์‚ฌ์ด์ฆˆ์˜ ๋…ธ๋“œ๊ฐ€ ํ”„๋กœ๋น„์ €๋‹ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Karpenter๋Š” CA์— ๋น„ํ•ด ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด๋ผ ๊ธฐ์ˆ ์  ์„ฑ์ˆ™๋„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค.

  • Karpenter๋Š” EC2 Fleet์œผ๋กœ ๋…ธ๋“œ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ ํ•ฉ๋‹ˆ๋‹ค.
    EC2 Fleet์€ ํ•œ ๋ฒˆ์˜ API ํ˜ธ์ถœ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ตฌ๋งค ์˜ต์…˜(Spot, On-Demand, RI)์™€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค ํƒ€์ž…, ์—ฌ๋Ÿฌ ๊ฐ€์šฉ์˜์—ญ์— ๊ฑธ์ณ EC2๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

  • Karpenter๋Š” ์›Œํฌ๋กœ๋“œ์˜ Capacity๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ Spot๊ณผ On-Demand ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธ์Šคํ„ด์Šค ํƒ€์ž…์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CA์˜ ๋™์ž‘ ๋ฐฉ์‹

  • Scale Out

    1. K8S ํด๋Ÿฌ์Šคํ„ฐ์— ํŒŒ๋“œ๋ฅผ ๋ฐฐ์น˜ํ•  ์ถฉ๋ถ„ํ•œ ์šฉ๋Ÿ‰์ด ์—†์–ด Pending ์ƒํƒœ์˜ ํŒŒ๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ CA๋Š” Pending ์ƒํƒœ์ธ ํŒŒ๋“œ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    2. CA๋Š” ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•ด ASG์˜ Desired Count๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค.
    3. ASG๋Š” Desired Count ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ƒˆ ๋…ธ๋“œ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•ฉ๋‹ˆ๋‹ค.
    4. ์ƒˆ ๋…ธ๋“œ๊ฐ€ Ready ์ƒํƒœ๊ฐ€ ๋˜๋ฉด Pending ์ƒํƒœ์˜€๋˜ Pod๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์Šค์ผ€์ค„๋ง๋ฉ๋‹ˆ๋‹ค.
  • Scale In

    1. ํŒŒ๋“œ์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ HPA์— ์˜ํ•ด ํŒŒ๋“œ๊ฐ€ Scale in ๋˜๋Š” ๊ฒฝ์šฐ
    2. CA๋Š” ์•„๋ž˜์˜ ๋ชจ๋“  ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ๋ถˆํ•„์š”ํ•œ(unneeded)ํ•œ ๋…ธ๋“œ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.
      • CA๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ ๋…ธ๋“œ์˜ CPU ๋ฐ MEM์˜ ์‚ฌ์šฉ๋ฅ ์„ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
        ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ํŒŒ๋“œ์˜ CPU request์˜ ํ•ฉ๊ณผ MEM requests์˜ ํ•ฉ์ด ๋…ธ๋“œ์˜ ์ž์›์˜ ์ž„๊ณ„๊ฐ’(๊ธฐ๋ณธ์  ์ž„๊ณ„๊ฐ’์€ 50%)๋ฏธ๋งŒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
      • ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  ํŒŒ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
      • ํ•ด๋‹น ๋…ธ๋“œ์— โ€œscale-down-disabled : trueโ€ ์ฃผ์„์ด ์—†๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    3. ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„(๊ธฐ๋ณธ ๊ฐ’์€ 10๋ถ„) ์ด์ƒ ์œ ์ง€๋˜๋Š” ๊ฒฝ์šฐ CA๋Š” pod๋“ค์„ evicting(์ถ•์ถœ)ํ•˜๊ณ  taintingํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ๋น„์›๋‹ˆ๋‹ค.
    4. ๋น„์›Œ์ง„ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
    5. ๋…ธ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด CA๋Š” ASG์˜ Desired Count๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

Karpenter์˜ ๋™์ž‘ ๋ฐฉ์‹

  • Scale Out

    1. K8S ํด๋Ÿฌ์Šคํ„ฐ์— ํŒŒ๋“œ๋ฅผ ๋ฐฐ์น˜ํ•  ์ถฉ๋ถ„ํ•œ ์šฉ๋Ÿ‰์ด ์—†์–ด Pending ์ƒํƒœ์˜ ํŒŒ๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ Karpenter๋Š” Pending ์ƒํƒœ์ธ ํŒŒ๋“œ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    2. Karpenter๋Š” ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ปดํ“จํŒ… ์šฉ๋Ÿ‰์„ ์‚ฐ์ •ํ•˜๊ณ  EC2 API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ€์žฅ ์ €๋ ดํ•œ ๋…ธ๋“œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•ฉ๋‹ˆ๋‹ค.
    3. ์ƒˆ ๋…ธ๋“œ๊ฐ€ Ready ์ƒํƒœ๊ฐ€ ๋˜๋ฉด Pending ์ƒํƒœ์˜€๋˜ Pod๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์Šค์ผ€์ค„๋ง๋ฉ๋‹ˆ๋‹ค.
  • Scale In

    1. Karpenter๋Š” ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋ฅ ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ๋™์‹œ์— ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ Workload Consolidation์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
    2. Karpenter๋Š” ๋‹ค์Œ์„ ์‹๋ณ„ํ•˜์—ฌ ๋น„์šฉ์„ ์ ๊ทน์ ์œผ๋กœ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
      • ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐ(Deletion)
      • ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐ(Deletion)
      • ์›Œํฌ๋กœ๋“œ์˜ ๋ณ€๊ฒฝ(ํŒŒ๋“œ ์Šค์ผ€์ผ๋ง ๋˜๋Š” ์›Œํฌ๋กœ๋“œ์˜ ์ข…๋ฃŒ ๋“ฑ)์œผ๋กœ ๋” ์ €๋ ดํ•œ ๋…ธ๋“œ๋กœ ๊ต์ฒด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋…ธ๋“œ๋ฅผ ๊ต์ฒด(Replace)
๋ฐ˜์‘ํ˜•

'๐Ÿ“‚ Container & K8S > Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[K8S] kubectl ๋ช…๋ น์–ด ์ •๋ฆฌ  (0) 2023.03.14