๊ด€๋ฆฌ ๋ฉ”๋‰ด

<Hello Hosung๐Ÿ˜Ž/>

[k8s] Deployment / Service / Pod ๋ณธ๋ฌธ

โš“๏ธ k8s

[k8s] Deployment / Service / Pod

์ขŒ์ถฉ์šฐ๋Œ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ผ๊ธฐ๐Ÿง 2025. 8. 16. 00:57

1๏ธโƒฃ Pod

  • ์šฉ๋„: ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„
  • ํŠน์ง•:
    • ๋‹จ์ผ ๋˜๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๊ฐ€๋Šฅ
    • Pod๋งŒ ์žˆ์œผ๋ฉด ์™ธ๋ถ€ ์ ‘์†์€ ๋ถˆ๊ฐ€
    • ์žฌ์ƒ์„ฑ/๋กค๋ง ์—…๋ฐ์ดํŠธ๋Š” ์ง€์› ์•ˆ ๋จ
  • ์‚ฌ์šฉ ๊ฒฝ์šฐ:
    1. ๋‹จ์ผ Pod ์ง์ ‘ ์ƒ์„ฑ
    2. ํ…Œ์ŠคํŠธ/ํ•™์Šต์šฉ ์ž„์‹œ Pod
    3. Deployment/StatefulSet ๋‚ด๋ถ€ template ๊ตฌ์กฐ

Pod YAML ์˜ˆ์‹œ

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
spec:
  containers:
  - name: my-container
    image: nginx
    ports:
    - containerPort: 80

 

2๏ธโƒฃ Deployment

  • ์šฉ๋„: Pod๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด
  • ํŠน์ง•:
    • ์ง€์ •ํ•œ Pod ๊ฐœ์ˆ˜(replica)๋ฅผ ํ•ญ์ƒ ์œ ์ง€
    • Pod๊ฐ€ ์ฃฝ์œผ๋ฉด ์ž๋™ ์žฌ์ƒ์„ฑ
    • ๋กค๋ง ์—…๋ฐ์ดํŠธ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉ ๊ฒฝ์šฐ:
    • ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ Pod ๊ด€๋ฆฌ
    • ์ž๋™ ์Šค์ผ€์ผ๋ง, ์—…๋ฐ์ดํŠธ ํ•„์š” ์‹œ

Deployment YAML ์˜ˆ์‹œ

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deploy
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-springboot:latest
        ports:
        - containerPort: 3000  # targetPort

3๏ธโƒฃ Service

  • ์šฉ๋„: Pod์— ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€/์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฐ์ฒด
  • ํŠน์ง•:
    • Pod๊ฐ€ ์žฌ์‹œ์ž‘๋˜์–ด๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • NodePort, ClusterIP, LoadBalancer ๋“ฑ ํƒ€์ž…๋ณ„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์™ธ๋ถ€ ์ ‘์† ํฌํŠธ(nodePort)์™€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ(targetPort)๋ฅผ ๋งคํ•‘ ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉ ๊ฒฝ์šฐ:
    • Deployment๋กœ ๋งŒ๋“  Pod๋“ค์„ ์™ธ๋ถ€/๋‚ด๋ถ€์—์„œ ์ ‘๊ทผํ•˜๊ฒŒ ํ•  ๋•Œ

Service YAML ์˜ˆ์‹œ (NodePort)

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - port: 7070        # ClusterIP ํฌํŠธ (ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์šฉ)
      targetPort: 3000  # Pod ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ
      nodePort: 30070   # ์™ธ๋ถ€ ์ ‘์†์šฉ ํฌํŠธ (NodePort ๋ฒ”์œ„ 30000~32767)
  type: NodePort

 

  • ์™ธ๋ถ€ ์ ‘์† URL: http://<๋…ธ๋“œIP>:30070
  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€ Pod ์ ‘์†: http://my-app-service:7070
  • Pod ๋‚ด๋ถ€ ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ: 3000

๐Ÿ”น ํ•ต์‹ฌ ์š”์•ฝ

์ข…๋ฅ˜(kind) ์„ค๋ช… ํŠน์ง•  
Pod ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ๋‹จ์œ„ ๋‹จ์ผ/์ž„์‹œ, ์žฌ์ƒ์„ฑ ์•ˆ ๋จ ์ง์ ‘ Pod YAML
Deployment Pod ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ ์ž๋™ ์žฌ์ƒ์„ฑ, ๋กค๋ง ์—…๋ฐ์ดํŠธ replicas: 2, template.spec
Service Pod ์ ‘๊ทผ ์ง€์  Cluster ๋‚ด๋ถ€/์™ธ๋ถ€ ์ ‘๊ทผ, ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ NodePort/ClusterIP/LoadBalancer