pod

๋ช…๋ น์–ด

1. Create

# ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ
kubectl create -f ./pod.yaml

# ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ๋ฐ”๋กœ ์ž‘์„ฑ
kubectl create -f - <<END
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: container
    image: kubetm/init
END

๊ธฐ์กด์— ๊ฐ™์€ ์ด๋ฆ„์˜ Pod๊ฐ€ ์กด์žฌํ•˜๋ฉด ์ƒ์„ฑ์ด ์•ˆ๋œ๋‹ค.

2. Apply

kubectl apply -f ./pod.yaml

๊ธฐ์กด์— ๊ฐ™์€ ์ด๋ฆ„์˜ Pod๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋‚ด์šฉ์ด override๋œ๋‹ค.

3. Get

# ๊ธฐ๋ณธ Pod ๋ฆฌ์ŠคํŠธ ์กฐํšŒ (Namepsace ํฌํ•จ)
kubectl get pods -n defalut

# ์ข€๋” ๋งŽ์€ ๋‚ด์šฉ ์ถœ๋ ฅ
kubectl get pods -o wide

# Pod ์ด๋ฆ„ ์ง€์ •
kubectl get pod pod1

# Json ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ
kubectl get pod pod1 -o json

4. Describe

# ์ƒ์„ธ ์ถœ๋ ฅ
kubectl describe pod pod1

5. Delete

# ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ ์ƒ์„ฑํ•œ ๋ฐฉ๋ฒ• ๊ทธ๋Œ€๋กœ ์‚ญ์ œ
kubectl delete -f ./pod.yaml

# ๋‚ด์šฉ๊ณผ ํ•จ๊ป˜ ๋ฐ”๋กœ ์ž‘์„ฑํ•œ ๊ฒฝ์šฐ ์ƒ์„ฑํ•œ ๋ฐฉ๋ฒ• ๊ทธ๋Œ€๋กœ ์‚ญ์ œ
kubectl delete -f - <<END
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: container
    image: kubetm/init
END

# Pod ์ด๋ฆ„ ์ง€์ •
kubectl delete pod pod1

6. Exec

# Pod์ด๋ฆ„์ด pod1์ธ Container๋กœ ๋“ค์–ด๊ฐ€๊ธฐ (๋‚˜์˜ฌ๋• exit)
kubectl exec pod1 -it /bin/bash

# Container๊ฐ€ ๋‘๊ฐœ ์ด์ƒ ์žˆ์„๋•Œ Container์ด๋ฆ„์ด con1์ธ Container๋กœ ๋“ค์–ด๊ฐ€๊ธฐ
kubectl exec pod1 -c con1 -it /bin/bash

๋‚ด๋ถ€ ์„ค์ •

pod

1. ์ปจํ…Œ์ด๋„ˆ

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

apiVersion: v1
kind: Pod
metadata:
    name: pod-1
spec:
    conatiners:
    - name: container1
       image: tmkube/p8000
       ports:
       - containerPort: 8000
    -name: container2
       image: tmkube/p8080
       ports:
       - cotainerPort: 8080

2. ๋ผ๋ฒจ

๊ฐ๊ฐ์˜ ํŒŒ๋“œ๋ณ„๋กœ ๋ผ๋ฒจ์„ ์—ฌ๋Ÿฌ๊ฐœ ๋‹ฌ ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ๋ชฉ์ ์— ๋”ฐ๋ผ ํŒŒ๋“œ๋ฅผ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์–ด ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด์„œ ์›ํ•˜๋Š” ํŒŒ๋“œ๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    type: web
  ports:
    - port: 8080
apiVersion: v1
kind: Pod
metadata:
  name: pod-2
  lavels:
    type: web
    lo: dev
spec:
  containers:
    - name: container
  image: tmkube/init

3. ๋…ธ๋“œ ์Šค์ผ€์ค„

ํŒŒ๋“œ๋Š” ์—ฌ๋Ÿฌ๋…ธ๋“œ๋“ค ์ค‘์— ํ•œ ๋…ธ๋“œ์— ์˜ฌ๋ผ๊ฐ€์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์Šค์ผ€์ค„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‘๊ฐ€์ง€ ์กด์žฌํ•œ๋‹ค.

์ง์ ‘ ์„ ํƒ

ํŒŒ๋“œ์— ๋ผ๋ฒจ์„ ๋‹จ ๊ฒƒ์ฒ˜๋Ÿผ ๋…ธ๋“œ์— ๋ผ๋ฒจ์„ ๋งŒ๋“ค์–ด ์ง์ ‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
    name: pod-3
spec:
    nodeSelector:
        hostname: node1
    containers:
        - name: container
        image: tmkube/init

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ํŒ๋‹จํ•˜์—ฌ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์„ ํƒ

ํŒŒ๋“œ์˜ ์‚ฌ์šฉ๋ฉ”๋ชจ๋ฆฌ๋Ÿ‰์„ ๋ช…์‹œํ•ด์ฃผ๊ฒŒ ๋˜๋Š”๋ฐ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํŒ๋‹จํ•˜์—ฌ ์ ์ ˆํ•œ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•œ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
    name: pod-4
spec:
    containers:
        - name: container
        image: tmkube/init
        resources:
            request:
                memory: 2Gi
            limits:
                memory: 3Gi

request๋Š” ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”๊ตฌํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ  limits๋Š” ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์˜ limit์„ ์ดˆ๊ณผ์‹œ์—๋Š” ํŒŒ๋“œ๋ฅผ ๋ฐ”๋กœ ์ข…๋ฃŒ์‹œํ‚ค๊ฒŒ ๋˜๊ณ  cpu์˜ limit์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด request๋กœ ๋‚ฎ์ถ”๊ณ  ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋Š” ์ œํ•œ๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์นจ๋ฒ”ํ•˜๊ฒŒ ๋˜์–ด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๋„ ์•…์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข…๋ฃŒ์‹œํ‚ค๊ฒŒ ๋œ๋‹ค.

Node Schedule ๋ฐฉ๋ฒ•

nodeSchedule
kubectl label nodes k8s-node1 kr=az-1   #๋…ธ๋“œ ๋ผ๋ฒจ ์ถ”๊ฐ€
kubectl label nodes k8s-node2 us=az-1   #๋…ธ๋“œ ๋ผ๋ฒจ ์ถ”๊ฐ€

# Node์— ๋ผ๋ฒจ ์‚ญ์ œ
kubectl label nodes k8s-node1 kr-  #๋…ธ๋“œ์— ๋ผ๋ฒจ ์‚ญ์ œ (key๊ฐ’๋งŒ ํ•„์š”)

1. ๋…ธ๋“œ ์„ ํƒ

NodeName

๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•˜๊ณ  ์‹ถ์„๋•Œ ์Šค์ผ€์ค„๋Ÿฌ์— ์ƒ๊ด€์—†์ด ๋ช…์‹œ์ ์œผ๋กœ ๋…ธ๋“œ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์ง€๋งŒ ์‹ค์ œ ์ƒ์šฉํ™˜๊ฒฝ์—์„œ๋Š” ๋…ธ๋“œ์˜ ์ถ”๊ฐ€/์‚ญ์ œ ๊ณผ์ •์ค‘์—์„œ ๋…ธ๋“œ์˜ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์–ด ์ž˜ ์‚ฌ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: node-name
spec:
  nodeName: k8s-node1
  containers:
    - name: container
      image: kubetm/app

NodeSelector

ํŒŒ๋“œ์— key/value๋กœ ๋ผ๋ฒจ์„ ๋‹ฌ๋ฉด ํ•ด๋‹น ๋ผ๋ฒจ๊ณผ ๋งค์นญ๋˜๋Š” ๋…ธ๋“œ์ค‘์—์„œ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ์ž์›์ด ๋งŽ์€ ๋…ธ๋“œ๋กœ ํŒŒ๋“œ๊ฐ€ ํ• ๋‹น๋œ๋‹ค. ๋ผ๋ฒจ์ด ๋”ฑ ๋งค์นญ๋˜๋Š” ๋…ธ๋“œ์—๋งŒ ํ• ๋‹น์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์นญ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์—†๋‹ค๋ฉด ํ• ๋‹น์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: node-selector
spec:
  nodeSelector: key1:value1
  containers:
    - name: container
      image: kubetm/app

NodeAffinity

nodeAffinity

ํŒŒ๋“œ์— key๋งŒ์„ ๊ฐ€์ง€๊ณ ๋„ ๋งค์นญ๋˜๋Š” ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ์ด ๋˜๋ฉฐ ๋งค์นญ๋˜๋Š” ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋”๋ผ๋„ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ํŒ๋‹จํ•ด์„œ ์ž์›์ด ๋งŽ์€ ๋…ธ๋“œ์— ํ• ๋‹น์ด๋˜๋„๋ก ์˜ต์…˜์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

matchExpressions๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋…ธ๋“œ์™€ ํŒŒ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๊ฒŒ ๋œ๋‹ค. operator๋กœ Gt์™€ Lt๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  required/preferred์˜ต์…˜์„ ํ†ตํ•ด์„œ ๋…ธ๋“œ์— ์—†๋Š” ํ‚ค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด๋„ ํ• ๋‹น๋˜๋‹๋ก ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

  • required : key๊ฐ€ ๋งค์นญ๋˜์–ด์•ผ๋งŒ ํ•จ

    apiVersion: v1
    kind: Pod
    metadata:
     name: pod-required
    spec:
    affinity:
      nodeAffinity:
       requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - {key: ch, operator: Exists}
     containers:
     - name: container
       image: kubetm/app
     terminationGracePeriodSeconds: 0
  • preferred : key๊ฐ€ ๋งค์นญ๋˜์ง€ ์•Š์•„๋„ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ํ• ๋‹น์ด ๊ฐ€๋Šฅ

    • weight : ํŠน์ • ๋ผ๋ฒจ์— ๋Œ€ํ•œ ๊ฐ€์ค‘์น˜๋ฅผ ์คŒ์œผ๋กœ์จ ๋‹จ์ˆœํžˆ ์ž์›์„ ๋ณด๊ณ ๋งŒ ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ€์ค‘์น˜๋ฅผ ํ•ฉ์‚ฐํ•ด์„œ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์†์„ฑ๊ฐ’

    apiVersion: v1
      kind: Pod
      metadata:
       name: pod-preferred
      spec:
       affinity:
        nodeAffinity:
         preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
             matchExpressions:
             - {key: ch, operator: Exists}
       containers:
       - name: container
         image: kubetm/app
       terminationGracePeriodSeconds: 0

2. Pod๊ฐ„ ์ง‘์ค‘ / ๋ถ„์‚ฐ

Pod Affinity

podAffinity

์—ฌ๋Ÿฌ ํŒŒ๋“œ๋“ค์„ ํ•œ ๋…ธ๋“œ์— ์ง‘์ค‘ํ•˜์—ฌ ํ• ๋‹น

WebํŒŒ๋“œ์™€ ServerํŒŒ๋“œ๋ฅผ ๊ฐ™์€ PV(HostPath)๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ฐ™์€ ๋…ธ๋“œ์— ํ• ๋‹น๋˜๋„๋ก ํ•˜๋ ค๊ณ  ํ• ๋•Œ ํŒŒ๋“œ์˜ ํƒ€์ž…์„ ๋™์ผํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๊ฐ™์€ ๋…ธ๋“œ์— ํ• ๋‹นํ•ด์ฃผ๋„๋ก ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ

pod Affinity๋ผ๋Š” ์˜ต์…˜์˜ matchExpressions๋กœ ๋…ธ๋“œ๋‚ด์˜ ํŒŒ๋“œ๋ผ๋ฒจ์„ ํ™•์ธํ•˜๊ณ  topologyKey ์˜ต์…˜์„ ํ†ตํ•ด์„œ ๋…ธ๋“œ์˜ ๋ผ๋ฒจ์˜ ์กฐ๊ฑด์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, Node Affinity์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ required/preferred์˜ต์…˜์„ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

# master pod
apiVersion: v1
kind: Pod
metadata:
 name: web1
 labels:
  type: web1
spec:
 nodeSelector:
  a-team: '1'
 containers:
 - name: container
   image: kubetm/app
 terminationGracePeriodSeconds: 0

# affinity pod
apiVersion: v1
kind: Pod
metadata:
 name: server1
spec:
 affinity:
  podAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   - topologyKey: a-team
     labelSelector:
      matchExpressions:
      -  {key: type, operator: In, values: [web1]}
 containers:
 - name: container
   image: kubetm/app
 terminationGracePeriodSeconds: 0

Anti-Affinity

podAntiAffinity

์—ฌ๋Ÿฌ ํŒŒ๋“œ๋“ค์„ ์ง‘์ค‘๋˜๋Š” ์ผ ์—†์ด ๋ถ„์‚ฐ๋˜์–ด ํ• ๋‹น

๋งˆ์Šคํ„ฐํŒŒ๋“œ์™€ ์Šฌ๋ ˆ์ด๋ธŒ ํŒŒ๋“œ๋ฅผ ๋งŒ๋“ค๋•Œ ๋ถ„์‚ฐ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ ํŒŒ๋“œ์˜ Type์„ ๊ฐ™์€ ํŒŒ๋“œ๋กœ ์„ค์ •ํ•ด๋†“์œผ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ํ• ๋‹นํ•ด์ฃผ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ

podAntiAffinity๋ผ๋Š” ์˜ต์…˜์˜ matchExpressions๋กœ ๋…ธ๋“œ๋‚ด์˜ ํŒŒ๋“œ๋ผ๋ฒจ์„ ํ™•์ธํ•˜๊ณ  topologyKey ์˜ต์…˜์„ ํ†ตํ•ด์„œ ๋…ธ๋“œ์˜ ๋ผ๋ฒจ์˜ ์กฐ๊ฑด์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, Node Affinity์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ required/preferred์˜ต์…˜์„ ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

# master
apiVersion: v1
kind: Pod
metadata:
  name: master
  labels:
     type: master
spec:
  nodeSelector:
    a-team: '1'
  containers:
  - name: container
    image: kubetm/app
  terminationGracePeriodSeconds: 0

# master-anti
apiVersion: v1
kind: Pod
metadata:
 name: slave
spec:
 affinity:
  podAntiAffinity:
   requiredDuringSchedulingIgnoredDuringExecution:
   - topologyKey: a-team
     labelSelector:
      matchExpressions:
      -  {key: type, operator: In, values: [master]}
 containers:
 - name: container
   image: kubetm/app
 terminationGracePeriodSeconds: 0

3. Node์— ํ• ๋‹น ์ œํ•œ

Toleration / Taint

taint

ํŠน์ • ๋…ธ๋“œ์— ์•„๋ฌด ํŒŒ๋“œ๋‚˜ ํ• ๋‹น๋˜์ง€ ์•Š๋„๋ก ์ œํ•œ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

๋…ธ๋“œ์— Taint๋ฅผ ์ง€์ •ํ•ด๋†“์œผ๋ฉด ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ํ• ๋‹น๋˜์ง€๋„ ์•Š์œผ๋ฉฐ ์ˆ˜๋™์œผ๋กœ ์ง€์ •์„ ํ•˜๋ คํ•ด๋„ ํ• ๋‹น๋˜์ง€ ์•Š๋Š”๋‹ค. ํŒŒ๋“œ์— Toleration์„ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ด๋‹น ๋…ธ๋“œ์— ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Taint

๋…ธ๋“œ์— Taint์—์„œ labels์™€ effect์˜ต์…˜์„ ์ด์šฉํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

Taint์†์„ฑ์€ ์ƒˆ๋กœ์šด ํŒŒ๋“œ๊ฐ€ ํ• ๋‹น๋ ๋•Œ ํ™•์ธํ•˜๋Š” ์กฐ๊ฑด์œผ๋กœ์จ ์ด๋ฏธ ๋…ธ๋“œ์— ํŒŒ๋“œ๊ฐ€ ๋Œ์•„๊ฐ€๊ณ  ์žˆ๋Š” ์ƒํƒœ๋กœ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด์˜ ๋…ธ๋“œ๋Š” ๊ณ„์†ํ•ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

effect

  • NoSchedule : ํƒ€ ํŒŒ๋“œ๋“ค์ด ์ด ๋…ธ๋“œ์— ํ• ๋‹น ๋˜์ง€ ์•Š๋Š”๋‹ค.

  • PreferNoSchedule : ๊ฐ€๊ธ‰์  ์Šค์ผ€์ค„๋ง์ด ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์˜ต์…˜์œผ๋กœ ํŠน์ • ์ƒํ™ฉ์—๋Š” ํ• ๋‹น์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

  • NoExecute : ๊ธฐ์กด์˜ ์ž‘๋™ํ•˜๊ณ ์žˆ๋Š” ํŒŒ๋“œ๋Š” ์‚ญ์ œ๋˜๋Š” ์˜ต์…˜

kubectl taint nodes k8s-node1 hw=gpu:NoSchedule #๋…ธ๋“œ์— Taint ์„ค์ •
kubectl taint nodes k8s-node1 hw=gpu:NoSchedule- #๋…ธ๋“œ์— Taint ์‚ญ์ œ

Toleration

ํŒŒ๋“œ์— ํ•ด๋‹น ๋…ธ๋“œ๋กœ ์Šค์ผ€์ค„๋ง ๋˜๋„๋ก Toleration์„ ์„ค์ • ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ key/operator/value/effect ์†์„ฑ์œผ๋กœ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.

operator

  • Euqal

  • Exists

์ด ์˜ต์…˜์„ ํŒŒ๋“œ์— ์ฃผ๋”๋ผ๊ณ  ํ•ด๋‹น ํŒŒ๋“œ๋Š” ๋‹ค๋ฅธ ๋งค์นญ๋˜๋Š” ๋…ธ๋“œ์— ๋Œ€ํ•ด ์Šค์ผ€์ค„๋ง์ด ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— nodeSelector ์˜ต์…˜์„ ์ถ”๊ฐ€๋กœ ์ฃผ์–ด ํŠน์ • ๋…ธ๋“œ์— ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

NoExcute๋…ธ๋“œ์— NoExcute์˜ต์…˜์„ ๋‹จ ํŒŒ๋“œ๋ผ๋ฉด ์‚ญ์ œ๊ฐ€ ๋˜์ง€ ์•Š๊ฒ ์ง€๋งŒ tolerationSeconds์˜ต์…˜์„ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„์„ ์ •์˜ํ•ด์ฃผ๋ฉด ํ•ด๋‹น ์‹œ๊ฐ„ ํ›„์—๋Š” ์‚ญ์ œํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

# NoScheduled pod
apiVersion: v1
kind: Pod
metadata:
 name: pod-with-toleration
spec:
 nodeSelector:
  gpu: no1
 tolerations:
 - effect: NoSchedule
   key: hw
   operator: Equal
   value: gpu
 containers:
 - name: container
   image: kubetm/app
 terminationGracePeriodSeconds: 0

# NoExcute pod
apiVersion: v1
kind: Pod
metadata:
 name: pod1-with-no-execute
spec:
 tolerations:
 - effect: NoExecute
   key: out-of-disk
   operator: Exists
   tolerationSeconds: 30
 containers:
 - name: container
   image: kubetm/app
 terminationGracePeriodSeconds: 0

+) ์ถ”๊ฐ€

terminationGracePeriodSeconds: 0 : ๊ธฐ๋ณธ pod์˜ ์‚ญ์ œ ์š”์ฒญํ›„ ์‚ญ์ œ๋˜๋Š” ์‹œ๊ฐ„์€ 30s์ธ๋ฐ 0s๋กœ ์…‹ํŒ…

ํŒŒ๋“œ ๊ตฌ์กฐ

pod-architechture
Status:
  phase: Pending
  conditions:
    - type: Initialized
      status: 'True'
      lastProbeTme: null
      lastTransitonTime: '2019-09-26T22:07:56Z'

    - type: PodScheduled
      status: 'True'
      lastProbTime: null
      lastTransitonTime: '2019-09-26T22:07:56Z'

containerStatuses:
  - name: container
    state:
      waiting:
        reason: ContainerCreating
    lastState: {}
    ready: false
    restartCount: 0
    image: tmkube/init
    imageID: ''
    started: false

  - type: ContainersReady
    status: 'False'
    lastProbTime: null
    lastTransitonTime: '2019-09-26T22:07:56Z'
    reason: ContainersNotReady
  - type: Ready
    status: 'False'
    lastProbTime: null
    lastTransitonTime: '2019-09-26T22:07:56Z'
    reason: ContainersNotReady
  • Phase : Pod์˜ ์ „์ฒด ์ƒํƒœ

    • Pending

    • Running

    • Succeeded

    • Failed

    • Unknown

  • Conditions : Pod๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์™€ ์ƒํƒœ

    • Initialized

    • ContainerReady

    • PodScheduled

    • Ready

    • Reason : ์ปจ๋””์…˜์˜ ์ƒํƒœ๊ฐ€ False์ธ๊ฒฝ์šฐ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ์†์„ฑ

      • ContainersNotReady

      • PodCompleted

  • State : ๊ฐ๊ฐ์˜ ์ปจํ…Œ์ด๋„ˆ๋“ค์„ ๋Œ€ํ‘œํ•˜๋Š” ์ƒํƒœ

    • Wating

    • Running

    • Terminated

    • Reason : ํ˜„์žฌ ์ƒํƒœ์˜ ์ด์œ 

      • ConainerCreating

      • CrashLoopBackOff

      • Error

      • Completed

์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ์ค‘ imageID๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์•„์ง image๊ฐ€ ๋‹ค์šด์ด ๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋‹ค.

LifeCycle

pod-lifecycle
pod-lifecycle2

1. Pending

  1. Pod์˜ ์ตœ์ดˆ์ƒํƒœ๋กœ ์ปจํ…Œ์ด๋„ˆ๋“ค์ด ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ์ดˆ๊ธฐํ™”์‹œ์ผœ์ค„ ๋‚ด์šฉ์ด ์žˆ์„ ๊ฒฝ์šฐ initContainer๋ฅผ ํ†ตํ•ด์„œ ๋ณธ ์ปจํ…Œ์ด๋„ˆ๋ณด๋‹ค ๋จผ์ € ์ƒ์„ฑ์ด ๋˜์–ด ๋ณผ๋ฅจ/๋ณด์•ˆ๊ณผ ๊ฐ™์€ ์…‹ํŒ…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ–ˆ๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด Initialized์†์„ฑ์ด true, ์‹คํŒจํ–ˆ๋‹ค๋ฉด false๊ฐ€ ๋œ๋‹ค.

  2. Pod๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋  ๋…ธ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š”๋ฐ ์ง์ ‘ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ k8s๊ฐ€ ์ž๋™์œผ๋กœ ์žก์•„์ฃผ๊ฒŒ ๋˜๋Š”๋ฐ ์™„๋ฃŒ๊ฐ€ ๋œ๋‹ค๋ฉด PodScheduled ์†์„ฑ์ด True๊ฐ€ ๋œ๋‹ค.

  3. Container์— image๋ฅผ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋Š” waiting(reason : ContainerCreating)์ด ๋œ๋‹ค.

+) Pending ๋„์ค‘์— Failed๋กœ ๋น ์ง€๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•˜๊ณ  ํ†ต์‹ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ Unknown์ƒํƒœ๋กœ ๋ฐ”๋€Œ๊ณ  Unknown์ƒํƒœ๊ฐ€ ์ง€์†๋˜๋ฉด Failed๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

2. running

  1. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ธฐ๋™์ด๋˜๋ฉด์„œ Pod์˜ ์ƒํƒœ๊ฐ€ Running์ด ๋œ๋‹ค.

  2. ๋งŒ์ผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ธฐ๋™์ด ๋˜๋Š” ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋‚œ waiting(reason : CrashLoopBackOff)์ด ๋˜์–ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ๊ธฐ๋™ํ•œ๋‹ค. ์ด์ƒํ™ฉ์—๋„ Pod์˜ ์ƒํƒœ๋Š” Running์ƒํƒœ์ด๋ฉฐ ๋‚ด๋ถ€ ContainerReady / Ready ์†์„ฑ์ด false๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

  3. ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ running์ด ๋˜์—ˆ๋‹ค๋ฉด ContainerReady / Ready์ด true๊ฐ€ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ปจํ…Œ์ด๋„ˆ์— ๋ฌธ์ œ๊ฐ€๋ฐœ์ƒํ•ด๋„ Running์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— Pod์˜ ์ƒํƒœ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

+) ํ†ต์‹ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ Unknown์ƒํƒœ๋กœ ๋ฐ”๋€Œ๊ณ  Unknown์ƒํƒœ๊ฐ€ ์ง€์†๋˜๋ฉด Failed๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค.

3. Failed / Succeeded

Job / CronJob์œผ๋กœ ์ƒ์„ฑ๋œ Pod์˜ ๊ฒฝ์šฐ ์ž‘์—…์ด ๋๋‚ฌ์„๋•Œ ์œ„ ์ƒํƒœ์ค‘ ํ•œ๊ฐœ๋กœ ๋ณ€๊ฒฝ๋˜๊ฒŒ ๋˜๋Š”๋ฐ ๋งŒ์•ฝ ์ž‘์—…์„ ํ•˜๊ณ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์ค‘ ํ•œ๊ฐœ๋ผ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ Error๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด Failed, ๋ชจ๋‘ Completed๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด Succeeded์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์ด ๋‘ ์ƒํƒœ ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ๋“ค์€ ์ข…๋ฃŒ๋œ ์ƒํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ContainerReady / Ready ๋Š” ๋ชจ๋‘ False๊ฐ€ ๋œ๋‹ค.

ReadinessProbe / LivenessProbe

์ปจํ…Œ์ด๋„ˆ์œ„์— ์˜ฌ๋ผ๊ฐ€๋Š” App์˜ ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์œผ๋กœ ์„œ๋กœ ๊ธฐ๋Šฅ์˜ ๋ชฉ์ ๋งŒ ๋‹ค๋ฅผ๋ฟ ์„ค์ • ๋ฐฉ๋ฒ•์€ ๋™์ผํ•˜๋‹ค.

์†์„ฑ

  • httpGet : Port, Host, Path, HttpHeader, Scheme๋“ฑ์„ ์„ค์ •์œผ๋กœ ์ฒดํฌ

  • Exec : Command๋ฅผ ํ†ตํ•ด ๊ฒฐ๊ณผ๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • tcpSocket : port, host๋ฅผ ์ด์šฉํ•ด์„œ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋“œ์‹œ ์œ„ 3๊ฐœ์˜ ์˜ต์…˜์ค‘ 1๊ฐœ๋Š” ๊ผญ ์ •์˜ํ•ด์•ผํ•˜๋Š” ์†์„ฑ์ด๋‹ค.

์˜ต์…˜

  • initialDelaySeconds : ์ตœ์ดˆ Probe๋ฅผ ํ•˜๊ธฐ์ „์— ๋”œ๋ ˆ์ด ์‹œ๊ฐ„

  • periodSeconds : Probe๋ฅผ ์ฒดํฌํ•˜๋Š” ๊ฐ„๊ฒฉ

  • timeoutSeconds : timeout ์‹œ๊ฐ„

  • successThreshold : ๋ช‡๋ฒˆ ์„ฑ๊ณตํ•ด์•ผ ์„ฑ๊ณต์œผ๋กœ ์ธ์ •ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ฐ’

  • failureThreshold : ๋ช‡๋ฒˆ ์‹คํŒจํ•ด์•ผ ์‹คํŒจ๋กœ ์ธ์ •ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ฐ’

์œ„ ์„ค์ •์„ ํ†ตํ•ด App์˜ ์„ฑ๊ณต์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ์„ฑ๊ณต์ด ๋˜๊ธฐ ์ „๊ฐ€์ง€๋Š” Pod์˜ ์ƒํƒœ๊ฐ€ Running์ด ๋˜์–ด๋„ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๋Š” false๋กœ Service๋Š” NotReadyAddr ์ƒํƒœ๋กœ Pod์™€ ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

kubectl get events -w | grep pod-readiness-exec1  #pod-readiness-exec1์ด๋ผ๋Š” ์ด๋ฆ„์˜ event๋“ค ์กฐํšŒ
watch "kubectl describe pod pod-readiness-exec1 | grep -A5 Conditions" #pod-readiness-exec1๋ผ๋Š” pod์˜ Conditions์™€ ๋งค์นญ๋˜๋Š” ๋‹จ์–ด์—์„œ 5๋ฒˆ์งธ ์ค„๊นŒ์ง€ ์ง€์†์ ์œผ๋กœ ์ถœ๋ ฅ
kubectl describe endpoints svc-readiness  #Service์˜ endpoint์ƒํƒœ ํ™•์ธ(pod์™€ ์—ฐ๊ฒฐ์ƒํƒœ ํ™•์ธ)

1. ReadinessProbe

readinessProbe

ํ•œ ์„œ๋น„์Šค๊ฐ€ 2๊ฐœ์˜ Pod๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ์œ„์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ์„๋•Œ ํ•œ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€๋ฐœ์ƒํ•ด์„œ ํ•œ ํŒŒ๋“œ๊ฐ€ ์ฃฝ์—ˆ๋‹ค๋ฉด auto healing ๊ธฐ๋Šฅ์— ์˜ํ•ด ์ƒˆ๋กœ์šด ํŒŒ๋“œ๊ฐ€ ์ƒ์„ฑ์ด ๋˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ ํŒŒ๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ์˜ ์ƒํƒœ๊ฐ€ running์ด ๋˜๋ฉด ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆ„์–ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ปจํ…Œ์ด๋„ˆ๋Š” Running์ด์ง€๋งŒ App์ด ์•„์ง ๋ถ€ํŒ…์ค‘์ด๋ผ๋ฉด 50%์˜ ์‚ฌ์šฉ์ž๋Š” ์—๋Ÿฌ๋ฅผ ์‘๋‹ต๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฐ๊ฒฝ์šฐ์™€ ๊ฐ™์ด App ๊ตฌ๋™๊นŒ์ง€ ํŠธ๋ž˜ํ”ฝ์„ ๋‚˜๋ˆ„์ง€ ์•Š์•„ ํŠธ๋ž˜ํ”ฝ ์‹คํŒจ๋ฅผ ์—†์• ๋Š” ๊ธฐ๋Šฅ

์˜ˆ๋ฅผ๋“ค์–ด ํ†ฐ์บฃ๊ณผ ๊ฐ™์ด ์›น์„œ๋ฒ„๋Š” ๊ตฌ๋™์ด ๋˜์–ด Running์ƒํƒœ๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ ๊ทธ ์œ„์— ์˜ฌ๋ผ๊ฐ€๋Š” App์ด ๊ตฌ๋™์ด ์•„์ง ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ

apiVersion: v1
kind: Pod
metadata:
  name: pod-readiness-exec1
  labels:
    app: readiness
spec:
  containers:
    - name: readiness
      image: kubetm/app
      ports:
        - containerPort: 8080
      readinessProbe:
        exec:
          command: ['cat', '/readiness/ready.txt']
        initialDelaySeconds: 5
        periodSeconds: 10
        successThreshold: 3
      volumeMounts:
        - name: host-path
          mountPath: /readiness
  volumes:
    - name: host-path
      hostPath:
        path: /tmp/readiness
        type: DirectoryOrCreate
  terminationGracePeriodSeconds: 0

2. LivenessProbe

livenessProbe

Pod์™€ Container๋Š” Running์ƒํƒœ์ธ๋ฐ Memory Overflow์™€ ๊ฐ™์€ ๋ฌธ์ œ๋กœ App๋งŒ ์ฃฝ์€ ๊ฒฝ์šฐ์—๋Š” Auto Healing๊ธฐ๋Šฅ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„ ์ง€์†์ ์ธ ์‹คํŒจ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฒŒ ๋˜๋Š”๋ฐ App์žฅ์• ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  Pod๋ฅผ ์žฌ์‹คํ–‰์‹œ์ผœ ํŠธ๋ž˜ํ”ฝ์˜ ์ง€์†์ ์ธ ์‹คํŒจ๋ฅผ ์—†์• ๋Š” ๊ธฐ๋Šฅ

apiVersion: v1
kind: Pod
metadata:
  name: pod-liveness-httpget1
  labels:
    app: liveness
spec:
  containers:
    - name: liveness
      image: kubetm/app
      ports:
        - containerPort: 8080
      livenessProbe:
        httpGet:
          path: /health
          port: 8080
        initialDelaySeconds: 5
        periodSeconds: 10
        failureThreshold: 3
  terminationGracePeriodSeconds: 0

QoS classes

qos

Quality of Service์˜ ์•ฝ์ž๋กœ k8s์—์„œ๋Š” ์•ฑ์˜ ์ค‘์š”๋„์— ๋”ฐ๋ผ์„œ ์ž์›์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ํ•œ ํŒŒ๋“œ์—์„œ ์ถ”๊ฐ€ ์ž์›์ด ํ•„์š”ํ• ๊ฒฝ์šฐ ํ•ด๋‹น ํŒŒ๋“œ๊ฐ€ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋‹ค๋ฅธ ํŒŒ๋“œ์˜ ์ž์›์„ ๋‹ค์šด์‹œํ‚ค๊ณ  ํ•„์š”ํ•œ ํŒŒ๋“œ์—๊ฒŒ ์ž์›์„ ํ• ๋‹นํ•ด์คŒ์œผ๋กœ์จ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

QoS classes๋Š” ๋ณ„๋„์˜ ์„ค์ •์œผ๋กœ ํ• ๋‹น์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ spec์˜ resources๋ฅผ ์ •์˜ํ•ด ์ค„๋•Œ requests, limits์˜ ์„ค์ • ๊ฐ’์œผ๋กœ ๋‹จ๊ณ„๊ฐ€ ์„ค์ •์ด ๋œ๋‹ค.

1. Guaranteed

๊ฐ€์žฅ ๋†’์€ ๋“ฑ๊ธ‰์˜ ๋‹จ๊ณ„๋กœ ํ•œ ํŒŒ๋“œ๋‚ด ๋ชจ๋“  request์™€ limit๊ฐ€ ์„ค์ • ๋˜์–ด ์žˆ๊ณ  reqeust์™€ limit์— memory์™€ cpu๊ฐ€ ๋ชจ๋‘ ์„ค์ •๋˜์–ด memory์™€ cpu์˜ request์™€ limit์˜ ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ ํ•ด๋‹น ๋“ฑ๊ธ‰์ด ์„ค์ •๋œ๋‹ค.

2. Bustable

request๋‚ด์˜ mem/cpu ๊ฐ’์ด limit์˜ mem/cpu๊ฐ’๋ณด๋‹ค ๋‚ฎ์€ ๊ฒฝ์šฐ๋‚˜, request๋งŒ ์„ค์ •๋œ ๊ฒฝ์šฐ, ํŒŒ๋“œ๋‚ด ํ•œ ์ปจํ…Œ์ด๋„ˆ๋Š” ์„ค์ •์ด ๋˜์—ˆ์–ด๋„ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์„ค์ •์ด ์•ˆ๋œ ๊ฒฝ์šฐ๊ฐ€ ํ•ด๋‹น๋œ๋‹ค.

oom

๋“ฑ๊ธ‰์ด ๊ฐ™์„๊ฒฝ์šฐ OOM Score์— ๋”ฐ๋ผ์„œ ํ•ด๋‹น ์ ์ˆ˜๊ฐ€ ๋†’์€ ํŒŒ๋“œ๊ฐ€ ๋จผ์ € ๋‹ค์šด๋œ๋‹ค.

OOM Score

Out Of Memory์˜ ์•ฝ์ž๋กœ ํ•œ๋งˆ๋””๋กœ ์‚ฌ์šฉ๋Ÿ‰์„ ์˜๋ฏธํ•œ๋‹ค. Request์˜ ํ• ๋‹น๋Ÿ‰์— ๋น„๋ก€ํ•ด์„œ App์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋Ÿ‰.

3. BestEffort

๊ฐ€์žฅ ๋จผ์ € ๋‹ค์šด๋˜๋Š” ๋‹จ๊ณ„๋กœ ์–ด๋–ค container์—๋„ request์™€ limt๊ฐ€ ๋ฏธ์„ค์ •๋œ ํŒŒ๋“œ๊ฐ€ ํ•ด๋‹น๋œ๋‹ค.


Reference

์ธํ”„๋Ÿฐ-๊น€ํƒœ๋ฏผ๋‹˜ ๊ฐ•์˜

Last updated