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

 

๋งค์šฐ๋งค์šฐ๋งค์šฐ ์ค‘์š”!

Karpenter v0.32 ๋ฒ„์ „๋ถ€ํ„ฐ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„๋“ค์ด ๋ณ€๊ฒฝ๋˜์–ด ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐœ๋…์€ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.
(ex. Provisioners -> NodePools)

 

 

Karpenter ์˜ ๊ฐœ๋…์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ ์ฐธ๊ณ !

 

Karpenter ๋ฅผ ํŒŒ๋ฉด ํŒ”์ˆ˜๋ก ์ •๋ง ์œ ์šฉํ•œ ์˜คํ”ˆ์†Œ์Šค์ธ๊ฑฐ ๊ฐ™์•„์š”. ASG ๋ฅผ ๋„˜์–ด์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๊ณ  ์œ ๋™์ ์œผ๋กœ ๋…ธ๋“œ์™€ ํŒŒ๋“œ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ฑฐ๋“ ์š”.

 

์Šค์ผ€์ค„๋ง ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š”๋ฐ, Karpenter ๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ๋งŽ์ด ํž˜๋“ค์—ˆ์„ ๊ฒ๋‹ˆ๋‹ค...

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Karpenter ์˜ Deprovisioning ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ•ต์‹ฌ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ฃ .

 

Deprovisioning ๊ด€๋ จ ์˜ต์…˜์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์š”.

 

- ttlSecondsAfterEmpty ์™€ ttlSecondsUntilExpired

- consolidation

 

์ด ์˜ต์…˜๋“ค์€ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š” ์ง€ ํ•œ๋ฒˆ ๋ฐ”๋กœ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ .

 

๋ ›์ธ ๋‘๋”์ฝ”๋“œ~

 

 

 

 

 

ttlSecondsAfterEmpty ์™€ ttlSecondsUntilExpired


ttlSecondsAfterEmpty ์™€ ttlSecondsUntilExpired ๋ฅผ ์‚ฌ์šฉํ•œ provisioner ์˜ ์ƒ˜ํ”Œ yaml ์ž…๋‹ˆ๋‹ค.

apiVersion: karpenter.k8s.aws/v1alpha1
kind: AWSNodeTemplate
metadata:
  name: aws-node-template
spec:
  blockDeviceMappings:
    - deviceName: /dev/xvda
      ebs:
        volumeSize: 12Gi
        volumeType: gp2
        encrypted: false
        
  securityGroupSelector:
    Name: "eks"
    
  subnetSelector:
    karpenter.sh/discovery: eks
    
  tags:
    karpenter.sh/discovery: eks
---
apiVersion: karpenter.sh/v1alpha5
kind: Provisioner
metadata:
  name: provisioner
spec:
  providerRef:
    name: aws-node-template

  requirements:
    - key: "node.kubernetes.io/instance-type"
      operator: In
      values: [ "t3.small", "t3.medium" ]
    - key: "topology.kubernetes.io/zone"
      operator: In
      values: [ "ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c", "ap-northeast-2d" ]
    - key: "karpenter.sh/capacity-type"
      operator: In
      values: [ "on-demand"]
    - key: "kubernetes.io/arch"
      operator: In
      values: [ "amd64" ]

  limits:
    resources:
      cpu: "100"
      memory: 100Gi


  ttlSecondsUntilExpired: 2592000 # 30 Days = 60 * 60 * 24 * 30 Seconds;
  ttlSecondsAfterEmpty: 30

  # ๋ชจ๋“  ๋…ธ๋“œ์— ์ ์šฉ๋˜๋Š” label
  labels:
    role: container-scheduler-system
    provision: karpenter
    kubernetes.io/arch: amd64

  # ๋ชจ๋“  ๋…ธ๋“œ์— ์ ์šฉ๋˜๋Š” taints
  taints:
    - key: container-scheduler-system
      value: "true"
      effect: NoSchedule
    - key: kubernetes.io/arch
      value: "amd64"
      effect: NoSchedule
    - key: nvidia.com/gpu
      value: "false"
      effect: NoSchedule
์œ„ ์ฝ”๋“œ๋ฅผ .limit.resources ์˜ cpu ์™€ memory ๋ฅผ ๊ฐ๊ฐ 100, 100Gi ๋ฅผ ์ฃผ์—ˆ๋Š”๋ฐ ์ƒ์„ฑ๋œ ๋ชจ๋“  t3.small, t3.medium ์˜ cpu ์™€ memory ๋ฅผ ํ•ฉ์นœ ๊ฐ’์ž…๋‹ˆ๋‹ค.

t3.medium ์œผ๋กœ๋งŒ ๋”ฐ์ ธ๋ณด์ž๋ฉด, t3.medium ์€ 2 cpu, 4 memory ์ด๋ฏ€๋กœ ์ตœ๋Œ€ 25 ๊ฐœ์˜ t3.medium ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
limit ์˜ memory ๊ฐ€ 100Gi ์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

ttlSecondsAfterEmpty ์€ provisioner ๋กœ ์ƒ์„ฑ๋œ ๋…ธ๋“œ์— ๋” ์ด์ƒ ํŒŒ๋“œ๊ฐ€ ์—†์œผ๋ฉด (๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด) ์ง€์ •๋œ ์‹œ๊ฐ„ ํ›„์— ์ž๋™์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒ์‹œํ‚ต๋‹ˆ๋‹ค. 

 

์œ„ ์ฝ”๋“œ๋ผ๋ฉด 30์ดˆ ๋’ค์— ์•„๋ฌด ๋ฆฌ์†Œ์Šค๊ฐ€ ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋˜์ง€์š”.

 

์•„๋ž˜ ์ด๋ฏธ์ง€๋Š” ์ž๋™์œผ๋กœ ์ข…๋ฃŒ๋˜๋Š” ๋…ธ๋“œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณด๋ฉด SchedulingDisabled ์ธ๋ฐ ์ด ๋…ธ๋“œ๋Š” ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ํŒŒ๋“œ๋ฅผ ์Šค์ผ€์ค„๋ง ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  EC2 ์ฝ˜์†”๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ์—ญ์‹œ๋‚˜ ์ข…๋ฃŒ ์ค‘์ธ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

30์ดˆ๋ผ๊ณ ๋Š” ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ 30์ดˆ ๋’ค์— ์ข…๋ฃŒ๋˜์ง„ ์•Š๊ณ  30~40์ดˆ ๋‚ด์— ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

 

ttlSecondsUntilExpired ์€ provisioner ๋กœ ์ƒ์„ฑ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ์ง€์ •๋œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋…ธ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

 

์ด๋Ÿฐ ์˜ต์…˜์ด ์™œ ํ•„์š”ํ•œ๊ฑฐ์ง€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“œ์‹ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์˜ค๋ž˜๋œ ๋…ธ๋“œ๋ฅผ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋กœ ๊ต์ฒดํ•˜๋ ค๋Š” ๊ฒƒ์ด ์ฃผ ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.

 

๊ตฌ ๋ฒ„์ „์˜ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ณ , ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๋…ธ๋“œ๋กœ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด์ง€์š”. ์ฆ‰, ๋…ธ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ ์ฝ”๋“œ๋ผ๋ฉด 30์ผ ๋’ค์— ํ•ด๋‹น ๋…ธ๋“œ๋Š” ์‚ญ์ œ๋˜๊ณ  ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๋…ธ๋“œ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋งŒ์•ฝ ์•„๋ž˜์ฒ˜๋Ÿผ ttlSecondsUntilExpired ์„ ๋” ๋†’๊ฒŒ ์ง€์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

  ttlSecondsUntilExpired: 30 
  ttlSecondsAfterEmpty: 300

 

๋ณดํ†ต ์ธ์Šคํ„ด์Šค๋ฅผ ํ”„๋กœ๋น„์ €๋‹ ๋˜๋Š”๋ฐ 30์ดˆ๋ณด๋‹ค๋Š” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์ด ttlSecondsUntilExpired ์„ ๋‚ฎ๊ฒŒ ์„ค์ •ํ•œ๋‹ค๋ฉด, ์ •์ƒ์ ์ธ ๋…ธ๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ”„๋กœ๋น„์ €๋‹ ๋˜๋Š” ๊ณผ์ • ์ค‘์— 30์ดˆ(ttlSecondsUntilExpired์˜ ๊ฐ’)๊ฐ€ ์ง€๋‚˜๋ฒ„๋ ค Karpenter ๊ฐ€ ์ข…๋ฃŒ์‹œ์ผœ๋ฒ„๋ฆฌ๊ณ  ๋˜ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์ฆ‰, ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ ธ ๋ฒ„๋ ค์š”!

 

์•„๋ž˜ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ๋™์‹œ์— ๋…ธ๋“œ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋ฉด์„œ ๋””ํ”„๋กœ๋น„์ €๋‹ ์‹œ์ผœ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ์ค„์˜ ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ๋ฐ”๋กœ ์ข…๋ฃŒ๋˜๊ณ , ๋‘๋ฒˆ์งธ ์ค„์˜ ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์žˆ์ฃ .

 

๋…ธ๋“œ์— ๋ฐฐํฌ๋œ ํŒŒ๋“œ ๋˜ํ•œ ๊ณ„์† ์‚ญ์ œ๋˜๊ณ  ์ƒ์„ฑ๋˜๋Š” ๊ฑธ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

 

EC2 ์ฝ˜์†”์„ ํ™•์ธํ•ด๋ณด๋ฉด ์ข…๋ฃŒ ์ค‘, ์‹คํ–‰ ์ค‘์ด ๊ณ„์†ํ•ด์„œ ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค.

 

ttlSecondsAfterEmpty ์™€ ttlSecondsUntilExpired ์„ ์ด์šฉํ•˜๋ฉด ํ™•์‹คํžˆ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋น„์šฉ์„ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์–ด ๋ณด์ž…๋‹ˆ๋‹ค.

ํ•„์š”ํ•  ๋•Œ๋งŒ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ข…๋ฃŒํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๊ทธ๋ฆฌ๊ณ  ๊ตฌ ๋ฒ„์ „์˜ ๋…ธ๋“œ๋„ ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ๋ฒ„์ „์˜ ๋…ธ๋“œ๋กœ ๊ต์ฒดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ttlSecondsAfterEmpty ์™€ ttlSecondsUntilExpired ๋ณด๋‹ค ๋น„์šฉ์„ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ,

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ consolidation ์ž…๋‹ˆ๋‹ค.

 

 

consolidation


consolidation์€ ๋…ธ๋“œ์˜ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ๋„๋ฅผ ๋†’์ด๊ณ  ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค ํƒ€์ž…์ด๋‚˜ ์šฉ๋Ÿ‰ ์œ ํ˜•์œผ๋กœ ์ ํ•ฉํ•œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ธฐ์กด์˜ ๋น„ํšจ์œจ์ ์ธ ๋…ธ๋“œ์— ์žˆ๋Š” ํŒŒ๋“œ๋ฅผ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋กœ ์˜ฎ๊ธด ํ›„, ๊ธฐ์กด์˜ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. 

 

consolidation ๊ธฐ๋Šฅ์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋‚˜ ์˜จ๋””๋งจ๋“œ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์šฉ๋Ÿ‰ ์œ ํ˜•์„ ํ˜ผํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

์ ์šฉ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

...

  consolidation:
    enabled: true

...

 

consolidation๊ณผ ttlSecondsAfterEmpty๋Š” ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‘ ๊ธฐ๋Šฅ์€ ์„œ๋กœ ๋ฐฐํƒ€์ ์ธ ๋ฐฉ์‹์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. consolidation์€ ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ธฐ์กด์˜ ๋…ธ๋“œ์— ์žˆ๋Š” ํŒŒ๋“œ๋ฅผ ์˜ฎ๊ธด ํ›„์— ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ttlSecondsAfterEmpty์€ ๋…ธ๋“œ๊ฐ€ ๋น„์–ด์žˆ๋Š” ์ƒํƒœ์—์„œ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ”๋กœ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ consolidation๊ณผ ttlSecondsAfterEmpty์„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋ฉด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. karpenter๋Š” provisioner ๋‹จ์œ„๋กœ consolidation๊ณผ ttlSecondsAfterEmpty ์ค‘ ํ•˜๋‚˜๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

consolidation ์€ ํ•œ๋ฒˆ ์‹ค์Šต์„ ํ•ด๋ณด์ฃ !

 

 

consolidation ์‹ค์Šต


์‹ค์Šต์— ์‚ฌ์šฉํ•  deployment.yaml ์ž…๋‹ˆ๋‹ค.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: inflate
spec:
  replicas: 5
  selector:
    matchLabels:
      app: inflate
  template:
    metadata:
      labels:
        app: inflate
    spec:
      terminationGracePeriodSeconds: 0
      containers:
        - name: inflate
          image: public.ecr.aws/eks-distro/kubernetes/pause:3.7
          resources:
            requests:
              cpu: 500m
              memory: 500Mi
            limits:
              cpu: 500m
              memory: 500Mi              
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: topology.kubernetes.io/zone
                    operator: In
                    values:
                      - ap-northeast-2a
                      - ap-northeast-2b
                      - ap-northeast-2c
                      - ap-northeast-2d
                  - key: karpenter.sh/capacity-type
                    operator: In
                    values:
                      - on-demand
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                      - amd64
                  - key: node.kubernetes.io/instance-type
                    operator: In
                    values:
                      - t3.small
                      - t3.medium
      tolerations:
        - effect: NoSchedule
          key: container-scheduler-system
          value: "true"
        - effect: NoSchedule
          key: kubernetes.io/arch
          value: amd64
        - effect: NoSchedule
          key: nvidia.com/gpu
          value: "false"

 

.spec.resources.requests ์˜ cpu, memory ๋ฅผ ๊ฐ๊ฐ 500m, 500Mi ๋กœ ์ฃผ์–ด์„œ ๋ฏธ๋ฆฌ ๋…ธ๋“œ์— ๋ฆฌ์†Œ์Šค๋ฅผ ์˜ˆ์•ฝํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋กœ์จ Karpenter ๋Š” ๋…ธ๋“œ๊ฐ€ ๊ฝ‰ ์ฐผ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ณ , ์ถ”๊ฐ€๋กœ ์ƒˆ๋กญ๊ฒŒ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์ฃ .

 

 

 

replica ๋ฅผ 5 ๋กœ ์ง€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋Š” ์ด 2500m CPU, 2.5Gi Memory ์ž…๋‹ˆ๋‹ค.

๋งจ ์ฒ˜์Œ provisioner.yaml ๋Œ€๋กœ๋ผ๋ฉด, t3.small ์ด 2๊ฐœ ์ƒ์„ฑ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

t3.small ์˜ memory ๋Š” ์ตœ๋Œ€ 2G ์ด๋ฏ€๋กœ t3.small  2๊ฐœ๋กœ ์ถฉ๋ถ„ํžˆ ์ปค๋ฒ„๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋งŒ์•ฝ provisioner.yaml ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•˜๊ณ  replica ๋ฅผ 10๊ฐœ๋กœ ๋Š˜๋ฆฌ๋ฉด ์–ด๋–จ๊นŒ์š”?

(t3.small, t3.medium ์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  t ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€๋Šฅํ•จ)

requirements:
#    - key: "node.kubernetes.io/instance-type"
#      operator: In
#      values: [ "t3.small", "t3.medium" ]
    - key: "karpenter.k8s.aws/instance-category"
      operator: In
      values: ["t"]

 

์ด 5G CPU, 5Gi Memory ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  t ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค๋Š” ์•„๋ž˜์™€ ๊ฐ™์ฃ .

 

t3 ์œ ํ˜•
t3a ์œ ํ˜•

 

 

๊ฒฐ๊ณผ๊ฐ’์„ ๋จผ์ € ๋ณด์—ฌ๋“œ๋ฆฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

t3.small ์€ 2 cpu, 2 memory

t3a.medium ์€ 2 cpu, 4 memory

t3a.xlarge ์€ 4 cpu, 16 memory

 

์ด 8 cpu, 22 memory ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

์–ด? ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช… ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋Š” 5G CPU, 5Gi Memory ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์™œ Karpenter ๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ƒ์„ฑ์„ ํ–ˆ์„๊นŒ์š”?

 

์ด์œ ๋Š” ๊ฐ ๋…ธ๋“œ๋“ค์—๋Š” ํ•ด๋‹น deployment pod ๋งŒ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. aws controller, ebs-csi, prometheus ๋“ฑ ๋ฐ๋ชฌ์…‹์ด ๋„์–ด์ ธ์žˆ์ฃ . ๊ทธ๋ž˜์„œ ๋ฐ๋ชฌ์…‹์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ฆฌ์†Œ์Šค๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ๋“ค์ด ์ƒ์„ฑ๋œ ๊ฒƒ์ด์ฃ .

 

๊ทธ๋ฆฌ๊ณ  t3.small, t3a.medium, t3a.xlarge ๊ฐ€ ๋น„์šฉ๋ฉด์—์„œ ๊ฐ€์žฅ ํšจ์œจ์ ์ด๋ผ๊ณ  Karpenter ๊ฐ€ ์ƒ๊ฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

 

Karpenter ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

๋ฐ”๋กœ EC2 Fleet ์ด๋ผ๋Š” ๊ธฐ๋Šฅ ๋•๋ถ„์ด์ฃ . ์ด๋Š” EC2 ์—์„œ ๊ฐœ๋ฐœํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด ์ตœ์ ์˜ ํšจ์œจ์„ฑ์„ ๊ณ„์‚ฐํ•ด์ค๋‹ˆ๋‹ค.

EC2 Fleet ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ ์ฐธ๊ณ !
Karpenter ์˜ Fleet ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์—ฌ๊ธฐ ์ฐธ๊ณ !

 

 

์˜ค๋Š˜์€ Karpenter ์˜ Deprovisioning ์˜ต์…˜์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. Karpenter ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ตณ์ด ASG ๋ฅผ ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์ง€๋ฉด ๋น„์šฉ์„ ๋งค์šฐ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์ฃ .

 

๋” ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด Karpenter ์˜ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค :)

 

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

 

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

Loading...