Kubernetes

λ¦¬μ†ŒμŠ€μ˜ λ©”λͺ¨λ¦¬μ™€ CPU μžμ› 관리

uuuhhh 2022. 11. 10. 18:20

πŸ“ Epilogue


  • NCP의 NKSμ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό 진행 쀑에 각자 νŒ€μ›λ“€μ—κ²Œ namespaceλ₯Ό ν• λ‹Ήν•΄μ£Όμ—ˆλ‹€.
  • μ–΄λŠ λ‚  κ°„λ‹¨ν•œ νŒŒλ“œμ— λŒ€ν•œ μŠ€νŽ™μ„ μ •ν•΄μ£Όκ³  생성을 μ‹œλ„ν•˜μ˜€λ”λ‹ˆ μŠ€μΌ€μ€„λ§ μ—λŸ¬κ°€ λ°œμƒ
  • 원인을 확인해 λ³΄λ‹ˆ νŒ€μ› ν•œ λΆ„κ»˜μ„œ μƒμ„±ν•˜μ‹  νŒŒλ“œμ— μ–΄λ§ˆ λ¬΄μ‹œν•˜κ²Œ μžμ›μ„ ν• λ‹Ήν•΄ λ†“μœΌμ‹  것..
  • κ²°κ΅­ λ…Έλ“œμ— λ‚¨μ•„μžˆλŠ” μžμ›μ΄ μ—†μ–΄μ„œ νŒŒλ“œ 배포 μŠ€μΌ€μ€„λ§ μ—λŸ¬κ°€ λ°œμƒν•œ κ²ƒμ΄μ—ˆλ‹€.
  • κ·Έλž˜μ„œ μ—¬κΈ°μ„œ 의문점 ❗️
    • μ‚¬μš©μž 개인이 ν• λ‹Ή κ°€λŠ₯ν•œ μžμ›μ— μ œν•œμ„ κ±Έμ–΄λ‘˜ 수 μžˆμ„κΉŒ?개인 λ³„λ‘œ λ¦¬μ†ŒμŠ€ 관리가 κ°€λŠ₯ν•œ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—?

 

β–ͺ︎ Plan


  • namespace에 λŒ€ν•˜μ—¬ μžμ› 관리λ₯Ό μˆ˜ν–‰ν•΄λ³΄μž
πŸ’‘ Limit Range : λ„€μž„μŠ€νŽ˜μ΄μŠ€ 내에 νŒŒλ“œλ‚˜ μ»¨ν…Œμ΄λ„ˆλ‹Ή λ¦¬μ†ŒμŠ€ μ†ŒλΉ„λ₯Ό ν•œμ •ν•˜λŠ” μ œμ•½ 쑰건을 제곡

 

 

β–ͺ︎ Namespace에 λŒ€ν•œ CPU / Memory μš”μ²­λŸ‰(request), μƒν•œ(limit) ꡬ성


apiVersion: v1
kind: LimitRange
metadata:
  name: limit-range
spec:
  limits:
  - default:
      cpu: 500m
      memory: 512Mi
    defaultRequest:
      cpu: 200m
      memory: 256Mi
    type: Container

 

  • default
    • μƒν•œ(limit)에 λŒ€ν•œ κΈ°λ³Έκ°’ ꡬ성
  • defaultRequest
    • μš”μ²­λŸ‰(request)에 λŒ€ν•œ κΈ°λ³Έκ°’ ꡬ성

 

  • LimitRange에 λŒ€ν•œ μœ„ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ‘œ λ‚˜μ˜ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μƒμ„±ν•œλ‹€.

 

  • 적용된 κ°’ 확인 !
    • 빈 칸듀은 μ‘°λ§Œκ°„ 곧 μ•Œμ•„λ΄…μ‹œλ‹€..!

 

  • 그럼 μ‹€μ œ μ»¨ν…Œμ΄λ„ˆ 생성 μ‹œ μœ„ LimitRangeκ°€ μ μš©λ˜λŠ”μ§€ ν™•μΈν•΄λ³΄μž
    • μ•„λž˜ νŒŒλ“œμ˜ μ»¨ν…Œμ΄λ„ˆλŠ” μ–΄λ– ν•œ μžμ›μ— λŒ€ν•œ μš”μ²­λŸ‰κ³Ό μƒν•œμ„ μ§€μ •ν•˜μ§€ μ•Šμ•˜λ‹€.
apiVersion: v1
kind: Pod
metadata:
  name: cn-app-pod
  labels:
    name: cn-app-pod
spec:
  containers:
  - name: cn-app
    image: uh2959/cn-action

 

  • 생성 !

 

  • 확인 !

 

  • 어라.. λΆ„λͺ… λ‚˜λŠ” λ¦¬μ†ŒμŠ€ μƒν•œκ³Ό μš”μ²­λŸ‰μ„ 지정해주지 μ•Šμ•˜λŠ”λ° μžλ™μœΌλ‘œ μ§€μ •λ˜μ–΄ μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€.
  • 값을 확인해보면 μœ„μ—μ„œ μƒμ„±ν•œ LimitRange에 μ˜ν•΄ μ„€μ •λœ κ°’μ΄λΌλŠ” 것을 확인할 수 μžˆλ‹€.

 

 

⭐️ λ§Œμ•½ μ»¨ν…Œμ΄λ„ˆμ˜ μƒν•œμ€ μ§€μ •ν•˜κ³  μš”μ²­λŸ‰μ„ μ§€μ •ν•˜μ§€ μ•Šμ€ κ²½μš°λŠ”?


apiVersion: v1
kind: Pod
metadata:
  name: cn-app-pod
  labels:
    name: cn-app-pod
spec:
  containers:
  - name: cn-app
    image: uh2959/cn-action
	resources:
		limits:
			cpu: 700m
			memory: 300Mi

 

  • μΌλΆ€λŸ¬ cpuλŠ” μ„€μ •ν•œ LimitRange μƒν•œλ³΄λ‹€ λ†’κ²Œ μž‘μ•˜κ³  memoryλŠ” μƒν•œκ³Ό μš”μ²­λŸ‰ μ‚¬μ΄λ‘œ κ΅¬μ„±ν–ˆλ‹€.
  • 생성 ! + 확인 !

 

 

  • μ—¬κΈ°μ„œ λͺ‡ 가지λ₯Ό 확인해 λ³Ό 수 μžˆμ—ˆλ‹€.
    1. ν˜„μž¬ μ„€μ •ν•œ LimitRangeλŠ” μ΅œλŒ“κ°’μ΄λ‚˜ μ΅œμ†Ÿκ°’μ΄ μ•„λ‹ˆλ©° λ‹¨μˆœνžˆ κΈ°λ³Έκ°’(Default) 섀정이닀.
    2. λ¦¬μ†ŒμŠ€μ˜ μƒν•œ(limit)만 μ„€μ •ν–ˆμ„ μ‹œ μš”μ²­ κ°’(request)은 μƒν•œ κ°’μœΌλ‘œ μžλ™ μ§€μ •λ˜λŠ” 것을 확인할 수 μžˆλ‹€.
 

Pod μ•ˆμ „ν•˜κ²Œ 생성/배포 및 QoS μ •μ±… μ„€μ •

πŸ“ Epilogue κ°„λ‹¨ν•œ JAR μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 가지고 μΏ λ²„λ„€ν‹°μŠ€ νŒŒλ“œ 배포λ₯Ό μ‹œλ„ν•˜μ˜€λ‹€ ! 그런데 νŒŒλ“œ μƒνƒœκ°€.. μ—„μ²­λ‚œ λ©”λͺ¨λ¦¬ λΆ€μ‘±.. OOM Killed.. CrashLoopBackOff μƒνƒœ 반볡.. νŒŒλ“œ μŠ€νŽ™ 늘리고 λ‹€μ‹œ λ°°ν¬ν•˜

code1212-uh.tistory.com

 

 

⭐️ κ·ΈλŸΌ μ§„μ§œμ§„μ§œ λ§ˆμ§€λ§‰μœΌλ‘œ λ§Œμ•½ μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ²­λŸ‰μ€ μ§€μ •ν•˜κ³  μƒν•œμ„ μ§€μ •ν•˜μ§€ μ•Šμ€ κ²½μš°λŠ”?


  • λ‹¨μˆœν•œ ν˜ΈκΈ°μ‹¬μœΌλ‘œ λ§€λ‹ˆνŽ˜μŠ€νŠΈμ— μš”μ²­λŸ‰μ„ LimitRangeμ—μ„œμ˜ cpu μƒν•œ Default 값보닀 크게 작고 생성을 ν•΄λ³΄μ•˜λ‹€.
  • μ—­μ‹œλ‚˜ cpu limit에 λ™λ“±ν•˜κ±°λ‚˜ 적어야 ν•œλ‹€λ©° μ—λŸ¬ !
	resources:
		requests:
			cpu: 700m
			memory: 300Mi

 

 

  • μ΄λ²ˆμ—” μ œλŒ€λ‘œ μš”μ²­λŸ‰μ„ μƒν•œμ˜ 기본값보닀 적게 μ„€μ •ν•˜μ—¬ μƒμ„±ν•˜κ³  확인해 λ³΄μ•˜λ‹€.
  • μƒν•œ 값이 λ§€λ‹ˆνŽ˜μŠ€νŠΈμ—μ„œ μ„€μ •ν•œ μš”μ²­λŸ‰μ„ 따라가지 μ•Šκ³  LimitRange의 Default κ°’μœΌλ‘œ μžλ™ μ§€μ •λœ κ²ƒμœΌλ‘œ 확인할 수 μžˆμ—ˆλ‹€.
    • μ™œ 이 κ²½μš°μ—” Guaranteed QoS 클래슀λ₯Ό 따라가지 μ•ŠλŠ”μ§€μ— λŒ€ν•œ 의문점이 생겼닀.
    • 생각해보면 Limitλž€ κ΄€λ ¨ μ˜€λΈŒμ νŠΈμ— 큰 영ν–₯을 λ―ΈμΉ  수 μžˆλŠ” μ€‘μš”ν•œ 이유(e.g. 총 μžμ›λŸ‰, μŠ€νŽ™μ˜ μ œν•œ..) λ•Œλ¬Έμ— 높은 μš°μ„ μˆœμœ„λ₯Ό 가지고 μžˆλŠ” 것이라고 μƒκ°ν•œλ‹€.
    • λ”°λΌμ„œ 이λ₯Ό κ³ λ €ν•˜μ—¬ μ„€μ •ν•œ LimitRange의 μƒν•œ 값을 μš°μ„ μ‹œν•˜μ—¬ 값을 지정함이라고 μƒκ°ν•˜μ˜€λ‹€.
apiVersion: v1
kind: Pod
metadata:
  name: cn-app-pod
  labels:
    name: cn-app-pod
spec:
  containers:
  - name: cn-app
    image: uh2959/cn-action
	resources:
		requests:
			cpu: 300m
			memory: 256Mi

 

 

β–ͺ︎ Namespace에 λŒ€ν•œ CPU / Memory μ΅œμ†Œ/μ΅œλŒ€ μ œμ•½ 쑰건 ꡬ성


apiVersion: v1
kind: LimitRange
metadata:
  name: limit-range-min-max
spec:
  limits:
  - max:
      cpu: 500m
      memory: 512Mi
    min:
      cpu: 200m
      memory: 256Mi
    type: Container

 

  • max
    • cpu와 memory의 μ΅œλŒ€ μ œμ•½ 쑰건 값을 μ§€μ •ν•œλ‹€.
  • min
    • cpu와 memory의 μ΅œμ†Œ μ œμ•½ 쑰건 값을 μ§€μ •ν•œλ‹€.

 

  • μœ„ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ‘œ LimitRangeλ₯Ό λ‚΄ λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μƒμ„±ν•˜μ˜€λ‹€.

 

  • μƒμ„±λœ LimitRange 정보λ₯Ό 확인해 λ³΄μ•˜λ‹€.
    • μ˜€μž‰ μ‹ κΈ°ν•œ 것을 λ°œκ²¬ν–ˆλ‹€.
    • λΆ„λͺ… μœ„ λ§€λ‹ˆνŽ˜μŠ€νŠΈμ—λŠ” max와 min ν•„λ“œλ§Œ μž‘μ„±ν•˜μ˜€λŠ”λ° μžλ™μœΌλ‘œ μƒν•œκ³Ό μš”μ²­λŸ‰μ˜ κΈ°λ³Έκ°’(default / defaultRequest)이 κ΅¬μ„±λ˜μ—ˆλ‹€ !

 

 

  • 이제 uhyeong λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— νŒŒλ“œκ°€ 생성될 λ•Œλ§ˆλ‹€ λ‹€μŒκ³Ό 같은 절차λ₯Ό μˆ˜ν–‰ν•œλ‹€.
    1. λ§Œμ•½ νŒŒλ“œμ— μƒν•œ(limits)κ³Ό μš”μ²­λŸ‰(requests)이 λͺ…μ‹œλ˜μ§€ μ•Šμ•˜μ„ 경우 컨트둀 ν”Œλ ˆμΈμ—μ„œ ν•΄λ‹Ή νŒŒλ“œ μ»¨ν…Œμ΄λ„ˆμ— LimitRange에 λͺ…μ‹œλ˜μ–΄ μžˆλŠ” μƒν•œκ³Ό μš”μ²­λŸ‰μ˜ κ°’(default / defaultRequests)을 μ§€μ •ν•œλ‹€.
    2. μƒμ„±λ˜λŠ” νŒŒλ“œμ˜ λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆμ˜ μš”μ²­λŸ‰μ΄ LimitRange에 λͺ…μ‹œλ˜μ–΄ μžˆλŠ” min 값을 λ”°λ₯΄λŠ”지 ν™•μΈν•œλ‹€.
    3. μƒμ„±λ˜λŠ” νŒŒλ“œμ˜ λͺ¨λ“  μ»¨ν…Œμ΄λ„ˆμ˜ μƒν•œ 값이 LimitRange에 λͺ…μ‹œλ˜μ–΄ μžˆλŠ” max 값을 λ”°λ₯΄λŠ”지 ν™•μΈν•œλ‹€.

 

  • 그럼 이제 직접 λ¦¬μ†ŒμŠ€ μŠ€νŽ™μ„ κ΅¬μ„±ν•œ ν›„ νŒŒλ“œλ₯Ό μƒμ„±ν•΄λ³΄μž !
    • λ¨Όμ € cpu의 μƒν•œ 값은 maxλ₯Ό μ΄ˆκ³Όν•˜κ²Œ μ„€μ •ν•œλ‹€.
    • memory의 μš”μ²­ 값은 min을 μΆ©μ‘±ν•˜μ§€ μ•Šκ²Œ μ„€μ •ν•œλ‹€.
    • λ‹Ήμ—°νžˆ μ•ˆ λ˜κ² μ§€λ§Œ..
apiVersion: v1
kind: Pod
metadata:
  name: cn-app-pod
  labels:
    name: cn-app-pod
spec:
  containers:
  - name: cn-app
    image: uh2959/cn-action
    resources:
      limits:
        cpu: 700m
        memory: 512Mi
      requests:
        cpu: 200m
        memory: 128Mi

 

  • μ—λŸ¬ λ©”μ‹œμ§€κ°€ μ•„μ£Ό μΉœμ ˆν•˜κ³  μ λ‚˜λΌν•˜κ²Œ λ‚˜μ™€μ€¬λ‹€!
    • μ»¨ν…Œμ΄λ„ˆλ‹Ή μ‚¬μš©ν•  수 μžˆλŠ” μ΅œμ†Œ λ©”λͺ¨λ¦¬λŠ” 256Mi인데 λ„ˆ μ§€κΈˆ μš”μ²­ 128Mi ν–ˆμ–΄ 😑..
    • μ»¨ν…Œμ΄λ„ˆλ‹Ή μ‚¬μš©ν•  수 μžˆλŠ” μ΅œλŒ€ cpuλŠ” 500m인데 λ„ˆ μ§€κΈˆ μƒν•œ 700mμ΄λž€λ‹€ 😑..

 

  • 이제 LimitRange의 κ΅¬μ„±λŒ€λ‘œ μ œλŒ€λ‘œ μˆ˜μ • ν›„ 생성 !
      limits:
        cpu: 500m
        memory: 512Mi
      requests:
        cpu: 300m
        memory: 300Mi

 

 

  • μ•„μ£Ό 잘 ~ μƒμ„±λ˜μ—ˆλ‹€!
🚨 LimitRangeλŠ” νŒŒλ“œ 생성 및 μ—…λ°μ΄νŠΈ μ‹œμ—λ§Œ μ μš©λœλ‹€.
     LimitRange λ³€κ²½ μ‹œ 이미 μƒμ„±λœ νŒŒλ“œμ— λŒ€ν•΄μ„œλŠ” 영ν–₯이 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€.

 

 

β–ͺ︎ Resource μΏΌν„°


  • μœ„μ—μ„œ μ—΄μ‹¬νžˆ μ•Œμ•„λ³΄μ•˜λ˜ LimitRangeλŠ” λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μƒμ„±λ˜λŠ” 각각의 μ»¨ν…Œμ΄λ„ˆμ˜ λ¦¬μ†ŒμŠ€ κΈ°λ³Έκ°’κ³Ό μ΅œλŒ€ μ΅œμ†Œμ— λŒ€ν•œ 값을 μ§€μ •ν•΄μ£ΌλŠ” 것이 νŠΉμ§•μ΄μ—ˆλ‹€.
  • κ·Έλ ‡λ‹€λ©΄ 각 λ„€μž„μŠ€νŽ˜μ΄μŠ€λ§ˆλ‹€ 생성할 수 μžˆλŠ” λ¦¬μ†ŒμŠ€μ˜ ν• λ‹ΉλŸ‰ μ œν•œμ„ κ±Έμ–΄ ν΄λŸ¬μŠ€ν„° λ¦¬μ†ŒμŠ€λ₯Ό λ„€μž„μŠ€νŽ˜μ΄μŠ€ λ‹¨μœ„λ‘œ λΆ„λ°°ν•΄ 쀄 수 μžˆμ„κΉŒ?
  • λ˜λŠ” νŒ€ λ‹¨μœ„λ‚˜ μ‚¬μš©μžλ“€λΌλ¦¬ ν΄λŸ¬μŠ€ν„°λ₯Ό κ³΅μœ ν•  μ‹œ νŠΉμ • νŒ€μ΄λ‚˜ μ‚¬μš©μžκ°€ λΆ„λ°°λœ λ¦¬μ†ŒμŠ€λ³΄λ‹€ 더 λ§Žμ€ λ¦¬μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•  경우λ₯Ό μ˜ˆλ°©ν•  수 μ—†μ„κΉŒ?
πŸ’‘ ResourceQuota : λ„€μž„μŠ€νŽ˜μ΄μŠ€ 별 총 λ¦¬μ†ŒμŠ€ μ‚¬μš©μ„ μ œν•œν•˜λŠ” μ œμ•½ 쑰건을 μ œκ³΅ν•˜λŠ” 였브젝트

 

 

  • μš”μ²­μ΄ μ§€μ›λ˜λŠ” λ¦¬μ†ŒμŠ€ μœ ν˜•
λ¦¬μ†ŒμŠ€ 이름 μ„€λͺ…
limits.cpu 터미널이 μ•„λ‹Œ μƒνƒœμ˜ λͺ¨λ“  νŒŒλ“œμ—μ„œ cpu μ œν•œμ˜ 합은 이 값을 μ΄ˆκ³Όν•  수 μ—†λ‹€.
limits.memory 터미널이 μ•„λ‹Œ μƒνƒœμ˜ λͺ¨λ“  νŒŒλ“œμ—μ„œ memory μ œν•œμ˜ 합은 이 값을 μ΄ˆκ³Όν•  수 μ—†λ‹€.
requests.cpu (= cpu) 터미널이 μ•„λ‹Œ μƒνƒœμ˜ λͺ¨λ“  νŒŒλ“œμ—μ„œ cpu μš”μ²­μ˜ 합은 이 값을 μ΄ˆκ³Όν•  수 μ—†λ‹€.
requests.memory (= memory) 터미널이 μ•„λ‹Œ μƒνƒœμ˜ λͺ¨λ“  νŒŒλ“œμ—μ„œ memory μš”μ²­μ˜ 합은 이 값을 μ΄ˆκ³Όν•  수 μ—†λ‹€.

 

  • λ¦¬μ†ŒμŠ€ ν• λ‹ΉλŸ‰μ— λŒ€ν•œ Resource Quota 생성 ν›„ 확인
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    requests.cpu: 500m
    requests.memory: 1Gi
    limits.cpu: 1000m
    limits.memory: 2Gi

 

 

 

  • μ§€μ›λ˜λŠ” 였브젝트 수 μΏΌν„° μœ ν˜•
λ¦¬μ†ŒμŠ€ 이름  μ„€λͺ…
configmaps λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 총 컨피그맡 수
persistentvolumeclaims λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 총 νΌμ‹œμŠ€ν„΄νŠΈ λ³Όλ₯¨ ν΄λ ˆμž„ 수
pod λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 터미널이 μ•„λ‹Œ μƒνƒœμ˜ νŒŒλ“œμ˜ 총 수
.status.phase in (Failed, Succeeded)κ°€ true인 경우 νŒŒλ“œλŠ” 터미널 μƒνƒœ
replicationcontrollers λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 총 λ ˆν”Œλ¦¬μΌ€μ΄μ…˜ 컨트둀러 수
resourcequotas λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 총 λ¦¬μ†ŒμŠ€μΏΌν„° 수
services λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 총 μ„œλΉ„μŠ€ 수
services.loadbalancers λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” LoadBalancer μœ ν˜•μ˜ 총 μ„œλΉ„μŠ€ 수
services.nodeports λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” NodePort μœ ν˜•μ˜ 총 μ„œλΉ„μŠ€ 수
secrets λ„€μž„μŠ€νŽ˜μ΄μŠ€μ— μ‘΄μž¬ν•  수 μžˆλŠ” 총 μ‹œν¬λ¦Ώ 수

 

  • μœ„μ™€ 같이 였브젝트 수λ₯Ό μ œν•œμ„ λ‘λŠ” κ²½μš°λŠ” λ¦¬μ†ŒμŠ€ μžμ› 고갈 방지λ₯Ό μœ„ν•¨μ΄λ‹€.
    • e.g.) 단일 λ„€μž„μŠ€νŽ˜μ΄μŠ€μ—μ„œ μš°μ„ μˆœμœ„κ°€ 높지 μ•Šμ€ νŒŒλ“œλ₯Ό μ—¬λŸ¬ 개 μƒμ„±ν•˜μ—¬ ν΄λŸ¬μŠ€ν„° νŒŒλ“œ IP μžμ›μ΄ κ³ κ°ˆλ˜λŠ” 경우 방지

 

  • λ¦¬μ†ŒμŠ€ κ°œμˆ˜μ— λŒ€ν•œ Resource Quota 생성 ν›„ 확인
apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
spec:
  hard:
    configmaps: "5"
    persistentvolumeclaims: "4"
    pods: "5"
    replicationcontrollers: "10"
    secrets: "5"
    services: "5"
    services.loadbalancers: "2"

 

 

  • μΏΌν„° λ²”μœ„
λ²”μœ„ μ„€λͺ…
Terminating .spec.activeDeadlineSeconds >= 0 에 μΌμΉ˜ν•˜λŠ” νŒŒλ“œ
NotTerminating .spec.activeDeadlineSeconds is nil 에 μΌμΉ˜ν•˜λŠ” νŒŒλ“œ
BestEffort μ΅œμƒμ˜ μ„œλΉ„μŠ€ ν’ˆμ§ˆμ„ μ œκ³΅ν•˜λŠ” νŒŒλ“œ
NotBestEffort μ„œλΉ„μŠ€ ν’ˆμ§ˆμ΄ λ‚˜μœ νŒŒλ“œ
PriorityClass μ§€μ •λœ Priority Classλ₯Ό μ°Έμ‘°ν•˜μ—¬ μΌμΉ˜ν•˜λŠ” νŒŒλ“œ

 

  • 각 μΏΌν„°μ—λŠ” μ—°κ²°λœ λ²”μœ„(scopes)κ°€ μ‘΄μž¬ν•  수 있으며 μ§€μ •ν•œ λ²”μœ„μ™€ μΌμΉ˜ν•˜λŠ” κ²½μš°μ—λ§Œ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰μ„ μΈ‘μ •ν•œλ‹€.
  • λ²”μœ„κ°€ 쿼터에 좔가될 μ‹œ λ²”μœ„μ™€ κ΄€λ ¨λœ λ¦¬μ†ŒμŠ€ μˆ˜κ°€ μ œν•œλœλ‹€.

 

 

  • operator ν•„λ“œ κ°’
    • scopeSelectorλŠ” operator ν•„λ“œμ— μ•„λž˜ ν‘œμ˜ 값듀을 μ§€μ›ν•œλ‹€.
ν•„λ“œ κ°’ μ„€λͺ…
In values ν•„λ“œμ— μ„€μ •ν•œ κ°’ 쀑 λ ˆμ΄λΈ”μ— μžˆλŠ” κ°’κ³Ό μΌμΉ˜ν•˜λŠ” 것이 ν•˜λ‚˜λΌλ„ μžˆλŠ”μ§€ ν™•μΈ
NotIn Inκ³Ό λ°˜λŒ€λ‘œ values에 μžˆλŠ” κ°’ λͺ¨λ‘μ™€ λ§žμ§€ μ•ŠλŠ”μ§€ ν™•μΈ
Exists key ν•„λ“œμ— μ„€μ •ν•œ 값이 λ ˆμ΄λΈ”μ— μžˆλŠ”μ§€λ§Œ ν™•μΈ (values ν•„λ“œ ν•„μš” μ—†μŒ)
DoseNotExist Exists와 λ°˜λŒ€λ‘œ λ…Έλ“œμ˜ λ ˆμ΄λΈ”μ— key ν•„λ“œ 값이 μ—†λŠ”μ§€λ§Œ ν™•μΈ (values ν•„λ“œ ν•„μš” μ—†μŒ)

 

 

  • μ΄λ ‡κ²Œ 계속 뭐가 μžˆλ‹€ μžˆλ‹€.. ν‘œλ§Œ λ³΄λ‹ˆ 잘 와닿지가 μ•Šμ•„ μ‹€μŠ΅μ„ λ°”λ‘œ 진행해야..
  • πŸ™Œ K8s κ³΅μ‹λ¬Έμ„œμ˜ 예제λ₯Ό 따라 ν•΄ λ³΄μ•˜λ‹€! πŸ™Œ
    • μš°μ„  μˆœμœ„ ν΄λž˜μŠ€λ³„ λ¦¬μ†ŒμŠ€ μΏΌν„° !

 

  • ResourceQuota에 κ΄€ν•œ λ§€λ‹ˆνŽ˜μŠ€νŠΈλ₯Ό μž‘μ„±ν•˜μ˜€λ‹€.
    • μ—¬κΈ°μ„œ ListλΌλŠ” νƒ€μž…μœΌλ‘œ μ—¬λŸ¬ 였브젝트λ₯Ό ν•œκΊΌλ²ˆμ— λ§Œλ“€ 수 μžˆλ‹€λŠ” μƒˆλ‘œμš΄ κ²½ν—˜ μ°Έ 쒋타.
apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: pods-high
  spec:
    hard:
      cpu: 1000m
      memory: 1000Mi
      pods: "10"
    scopeSelector:
      matchExpressions:
      - operator : In
        scopeName: PriorityClass
        values: ["high"]
- apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: pods-medium
  spec:
    hard:
      cpu: 500m
      memory: 500Mi
      pods: "10"
    scopeSelector:
      matchExpressions:
      - operator : In
        scopeName: PriorityClass
        values: ["medium"]
- apiVersion: v1
  kind: ResourceQuota
  metadata:
    name: pods-low
  spec:
    hard:
      cpu: 300m
      memory: 300Mi
      pods: "10"
    scopeSelector:
      matchExpressions:
      - operator : In
        scopeName: PriorityClass
        values: ["low"]

 

  • 생성 및 확인 !

 

  • νŒŒλ“œ priority classλ₯Ό medium으둜 μ£Όκ³  μƒμ„±ν•΄λ³΄μ•˜λ‹€.
 

Pod의 μš°μ„  μˆœμœ„

β–ͺ︎ Priority Class νŒŒλ“œ λ°°ν¬μ‹œ 보λ₯˜ μƒνƒœκ°€ λ˜μ–΄μ§€λŠ” μ—¬λŸ¬κ°€μ§€ μš”μΈλ“€μ΄ μ‘΄μž¬ν•œλ‹€. Node에 μΆ©λΆ„ν•œ λ¦¬μ†ŒμŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” 경우 λ°°ν¬ν•˜κ³ μž ν•˜λŠ” νŒŒλ“œμ˜ portλ₯Ό μ‹€ν–‰ 쀑인 μ–΄λ–€ νŒŒλ“œκ°€ μ‚¬μš© 쀑인 κ²½

code1212-uh.tistory.com

 

apiVersion: v1
kind: Pod
metadata:
  name: cn-app-pod
  labels:
    name: cn-app-pod
spec:
  containers:
  - name: cn-app
    image: uh2959/cn-action
    resources:
      limits:
        cpu: 500m
        memory: 512Mi
      requests:
        cpu: 300m
        memory: 300Mi
	priorityClassName: medium

 

  • νŒŒλ“œ 생성 및 Quota 확인 !

 

  • medium에 λŒ€ν•œ μš°μ„  μˆœμœ„ μΏΌν„°κ°€ 적용된 pods-medium의 Used 톡계가 λ³€ν•œ 것을 확인할 수 μžˆλ‹€ !

 

 

 

ref.


λ©”λͺ¨λ¦¬, CPU 와 API λ¦¬μ†ŒμŠ€ 관리

λ¦¬μ†ŒμŠ€ μΏΌν„°