π 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λ μνκ³Ό μμ²λ μ¬μ΄λ‘ ꡬμ±νλ€.
- μμ± ! + νμΈ !
- μ¬κΈ°μ λͺ κ°μ§λ₯Ό νμΈν΄ λ³Ό μ μμλ€.
- νμ¬ μ€μ ν LimitRangeλ μ΅λκ°μ΄λ μ΅μκ°μ΄ μλλ©° λ¨μν κΈ°λ³Έκ°(Default) μ€μ μ΄λ€.
- 리μμ€μ μν(limit)λ§ μ€μ νμ μ μμ² κ°(request)μ μν κ°μΌλ‘ μλ μ§μ λλ κ²μ νμΈν μ μλ€.
- μ΄μ λ₯Ό μκ°ν΄ 보μλλ [ limits κ° = requests κ° ] ⇒ Guaranteed QoS ν΄λμ€ μ΄λ―λ‘..!
- QoS ν΄λμ€μ λν μμΈν κ²μβοΈ ⇒ Pod μμ νκ² μμ±/λ°°ν¬ λ° QoS μ μ± μ€μ
βοΈ κ·ΈλΌ μ§μ§μ§μ§ λ§μ§λ§μΌλ‘ λ§μ½ 컨ν μ΄λμ μμ²λμ μ§μ νκ³ μνμ μ§μ νμ§ μμ κ²½μ°λ?
- λ¨μν νΈκΈ°μ¬μΌλ‘ 맀λνμ€νΈμ μμ²λμ 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 λ€μμ€νμ΄μ€μ νλκ° μμ±λ λλ§λ€ λ€μκ³Ό κ°μ μ μ°¨λ₯Ό μννλ€.
- λ§μ½ νλμ μν(limits)κ³Ό μμ²λ(requests)μ΄ λͺ μλμ§ μμμ κ²½μ° μ»¨νΈλ‘€ νλ μΈμμ ν΄λΉ νλ 컨ν μ΄λμ LimitRangeμ λͺ μλμ΄ μλ μνκ³Ό μμ²λμ κ°(default / defaultRequests)μ μ§μ νλ€.
- μμ±λλ νλμ λͺ¨λ 컨ν μ΄λμ μμ²λμ΄ LimitRangeμ λͺ μλμ΄ μλ min κ°μ λ°λ₯΄λμ§ νμΈνλ€.
- μμ±λλ νλμ λͺ¨λ 컨ν μ΄λμ μν κ°μ΄ 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μΌλ‘ μ£Όκ³ μμ±ν΄λ³΄μλ€.
- νλμ priority classλ₯Ό μ μνλ λ°©λ² ⇒ Podμ μ°μ μμ
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 리μμ€ κ΄λ¦¬
'Kubernetes' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
YAML λ¬Έλ² μμ보기 (0) | 2022.11.11 |
---|---|
컨ν μ΄λμμ JVMμ μ λ©λͺ¨λ¦¬ λ¨Ήλ νλ§μμκΉ? (1) | 2022.11.10 |
Podμ μ°μ μμ (0) | 2022.11.10 |
Pod μμ νκ² μμ±/λ°°ν¬ λ° QoS μ μ± μ€μ (0) | 2022.11.10 |
K8S Service Network - μ€μ΅ (0) | 2022.11.10 |