๐Ÿซ› ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ์ตœ์†Œ ๋‹จ์œ„ – Pod๋ฅผ ์ง์ ‘ ๋งŒ์ง€๊ณ  ๋ถ€์ˆด๋ดค๋‹ค

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ ์ œ์ผ ํ—ท๊ฐˆ๋ฆฌ๋Š” ๊ฐœ๋…์ด ๋ฐ”๋กœ Pod(ํŒŒ๋“œ)์ž…๋‹ˆ๋‹ค. Docker ์ปจํ…Œ์ด๋„ˆ๋ž‘ ๋ญ๊ฐ€ ๋‹ค๋ฅธ ๊ฑฐ์ง€? ๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ์‰ฌ์šด๋ฐ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํŒŒ๋“œ๋ผ๋Š” ๊ป์งˆ๋กœ ๊ฐ์‹ธ์„œ ๋‹ค๋ฃจ์ฃ . ์ด๋ฒˆ ์‹ค์Šต์€ ํŒŒ๋“œ๋ฅผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค๊ณ , ๋‚ด๋ถ€๋ฅผ ์ง์ ‘ ๋“ค์—ฌ๋‹ค๋ณด๊ณ , ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€์ฐฐํ•œ ๊ธฐ๋ก์ž…๋‹ˆ๋‹ค.


๐ŸŽฏ ์ด๋ฒˆ ์‹ค์Šต์—์„œ ๋‹ค๋ฃฌ ๊ฒƒ๋“ค

  • ๋ช…๋ นํ˜•(Imperative) vs ์„ ์–ธํ˜•(Declarative) ๋ฐฉ์‹ ๋น„๊ต
  • Resource Quota ์„ค์ • (requests / limits)
  • kubectl describe๋กœ ํŒŒ๋“œ ์ƒํƒœ ์ถ”์ 
  • kubectl exec๋กœ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์†
  • ํŒŒ๋“œ์˜ ์ƒํƒœ ๋ณ€ํ™” ๊ด€์ฐฐ (ContainerCreating โ†’ Running)

๐Ÿ“Œ ๋ฐฉ๋ฒ• 1: ๋ช…๋ นํ˜• (Imperative) โ€” ๋น ๋ฅธ ํ…Œ์ŠคํŠธ์šฉ

์ผํšŒ์„ฑ ํ…Œ์ŠคํŠธ์—” ์ด ๋ฐฉ๋ฒ•์ด ๋น ๋ฆ…๋‹ˆ๋‹ค. CLI ๋ช…๋ น์–ด ํ•œ ์ค„๋กœ ๋ฐ”๋กœ ๋„์›๋‹ˆ๋‹ค.

# ํŒŒ๋“œ ์ƒ์„ฑ
kubectl run nginx-pod --image=nginx:1.21

# ์ƒํƒœ ํ™•์ธ
kubectl get pods

# ์ƒ์„ธ ์ •๋ณด (Events ํ•ญ๋ชฉ์ด ํ•ต์‹ฌ)
kubectl describe pod nginx-pod

# ๋กœ๊ทธ ํ™•์ธ
kubectl logs nginx-pod

# ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ ‘์† (SSH ๊ฐ™์€ ๋А๋‚Œ)
kubectl exec -it nginx-pod -- /bin/bash

# ์‚ญ์ œ
kubectl delete pod nginx-pod

kubectl describe์˜ Events ํ•ญ๋ชฉ์„ ๋ณด๋ฉด ํŒŒ๋“œ๊ฐ€ ์–ด๋–ค ๋…ธ๋“œ์— ์Šค์ผ€์ค„๋ง๋๋Š”์ง€, ์ด๋ฏธ์ง€๋ฅผ ์–ธ์ œ ๋‹ค์šด๋กœ๋“œํ–ˆ๋Š”์ง€ ์ „๋ถ€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๋“œ๊ฐ€ ์ด์ƒํ•˜๋ฉด ๊ฐ€์žฅ ๋จผ์ € ์ด๊ฑธ ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ๋ฐฉ๋ฒ• 2: ์„ ์–ธํ˜• (Declarative) โ€” ์‹ค๋ฌด ํ‘œ์ค€ โญ

์‹ค๋ฌด์—์„œ๋Š” YAML ํŒŒ์ผ์„ ์ž‘์„ฑํ•ด์„œ “์ด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์ค˜”๋ผ๊ณ  ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ํ˜•์ƒ ๊ด€๋ฆฌ๋„ ๋˜๊ณ , ํŒ€์›๊ณผ ๊ณต์œ ๋„ ์‰ฝ์Šต๋‹ˆ๋‹ค.

# nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.21
    ports:
    - containerPort: 80
    resources:           # ์ž์› ๊ด€๋ฆฌ (์ค‘์š”!)
      requests:          # "์ตœ์†Œ ์ด๋งŒํผ์€ ์žˆ์–ด์•ผ ์ผํ•ฉ๋‹ˆ๋‹ค"
        memory: "64Mi"
        cpu: "100m"      # 1 CPU์˜ 10%
      limits:            # "์ด ์ด์ƒ์€ ์ ˆ๋Œ€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค"
        memory: "128Mi"
        cpu: "200m"

Resource ์„ค์ •์ด ์™œ ์ค‘์š”ํ•œ๊ฐ€? requests๊ฐ€ ์—†์œผ๋ฉด ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์–ด๋А ๋…ธ๋“œ์— ๋ฐฐ์น˜ํ• ์ง€ ํŒ๋‹จ์„ ๋ชป ํ•ฉ๋‹ˆ๋‹ค. limits๊ฐ€ ์—†์œผ๋ฉด ํ•˜๋‚˜์˜ ํŒŒ๋“œ๊ฐ€ ๋…ธ๋“œ ์ž์›์„ ๋…์‹ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ ํŒŒ๋“œ๋“ค์„ ์ฃฝ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ์Šต๊ด€์ฒ˜๋Ÿผ ๋„ฃ์–ด๋‘๋Š” ๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค.

# ํŒŒ๋“œ ์ƒ์„ฑ
kubectl apply -f nginx-pod.yaml

# ๋…ธ๋“œ ํ• ๋‹น ํ™•์ธ (-o wide ์˜ต์…˜์ด ํ•ต์‹ฌ)
kubectl get pods -o wide

-o wide ์˜ต์…˜์„ ์“ฐ๋ฉด ํŒŒ๋“œ์˜ IP์ฃผ์†Œ์™€ ์–ด๋А ๋…ธ๋“œ์— ๋ฐฐ์น˜๋๋Š”์ง€๊ฐ€ ๋ณด์ž…๋‹ˆ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ž์› ์—ฌ์œ ๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์ž๋™์œผ๋กœ ๋ฐฐ์ •ํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.


๐Ÿ” ํŒŒ๋“œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€์ฐฐ

ContainerCreating โ†’ Running

ํŒŒ๋“œ๋ฅผ ์ฒ˜์Œ ์ƒ์„ฑํ•˜๋ฉด ๊ณง๋ฐ”๋กœ Running์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  1. ContainerCreating โ€” ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๋‹ค์šด๋กœ๋“œ ์ค‘
  2. Running โ€” ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ, ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘

์ด๋ฏธ์ง€๊ฐ€ ๋…ธ๋“œ์— ์ด๋ฏธ ์บ์‹œ๋ผ ์žˆ์œผ๋ฉด ๋ช‡ ์ดˆ, ์ฒ˜์Œ ๋ฐ›์œผ๋ฉด ๋„คํŠธ์›Œํฌ ์†๋„์— ๋”ฐ๋ผ 10~30์ดˆ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. kubectl describe์˜ Events์—์„œ Pulling image "nginx:1.21" ๋ฉ”์‹œ์ง€๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿšจ ์‚ฝ์งˆ ํฌ์ธํŠธ

โš ๏ธ ContainerCreating ์ƒํƒœ๊ฐ€ ๊ณ„์† ์œ ์ง€๋œ๋‹ค๋ฉด?

์ฒ˜์Œ์— ์ž ๊น ๋‹นํ™ฉํ–ˆ๋Š”๋ฐ, ์ด๊ฑด ์‚ฌ์‹ค ์ •์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. kubectl describe pod nginx-pod๋กœ Events๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ํ˜„์žฌ ๋ฌด์Šจ ๋‹จ๊ณ„์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง„์งœ ๋ฌธ์ œ ์ƒํ™ฉ์ด๋ผ๋ฉด ImagePullBackOff๋‚˜ ErrImagePull ๊ฐ™์€ ์—๋Ÿฌ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ’ก ๋ช…๋ นํ˜• vs ์„ ์–ธํ˜•, ์–ธ์ œ ๋ญ˜ ์“ฐ๋‚˜?

์ƒํ™ฉ๋ฐฉ๋ฒ•
๋น ๋ฅธ ํ…Œ์ŠคํŠธ, ๋””๋ฒ„๊น…๋ช…๋ นํ˜• (kubectl run)
์‹ค์ œ ์„œ๋น„์Šค ๋ฐฐํฌ, ํŒ€ ํ˜‘์—…์„ ์–ธํ˜• (kubectl apply -f)
CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ์–ธํ˜• (YAML ํŒŒ์ผ์„ Git์œผ๋กœ ๊ด€๋ฆฌ)

์„ ์–ธํ˜•์ด ์ข‹์€ ์ด์œ ๋Š” “ํ˜„์žฌ ์›ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์ฝ”๋“œ๋กœ ์ •์˜”ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŒŒ๋“œ๊ฐ€ ์ฃฝ์–ด๋„ ๋‹ค์‹œ kubectl applyํ•˜๋ฉด ์›์ƒ๋ณต๊ตฌ๋ฉ๋‹ˆ๋‹ค.


โœ… ์ •๋ฆฌ

ํŒŒ๋“œ ํ•˜๋‚˜๋ฅผ ์ง์ ‘ ๋‹ค๋ค„๋ณด๋‹ˆ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ “์ปจํ…Œ์ด๋„ˆ๋ฅผ ์–ด๋””์— ์–ผ๋งˆ๋‚˜ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ• ์ง€”๋ฅผ ์ „๋ถ€ ์•Œ์•„์„œ ํ•ด์ค€๋‹ค๋Š” ๊ฑธ ์‹ค๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํŒŒ๋“œ๋Š” ํ˜ผ์ž์„  ์ž๊ฐ€ ์น˜์œ ๊ฐ€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ํŒŒ๋“œ๊ฐ€ ์ฃฝ์œผ๋ฉด ๊ทธ๋ƒฅ ๋์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๊ธ€์—์„œ๋Š” ํŒŒ๋“œ๋ฅผ “๊ตฐ๋‹จ” ๋‹จ์œ„๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์ฃฝ์œผ๋ฉด ์ž๋™์œผ๋กœ ์‚ด์•„๋‚˜๋Š” Deployment๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.