[Kubernetes] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Deployment ๋ฐ Service ํŒŒ์ผ ๊ฐ€์ด๋“œ

2025. 2. 17. 17:13ยท๐Ÿ’ป Programming/Docker & Kubernetes
๋ฐ˜์‘ํ˜•

1. ๊ฐœ์š”

Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ์šด์˜ํ•˜๋ ค๋ฉด Deployment์™€ Service ํŒŒ์ผ์ด ํ•„์ˆ˜์˜ˆ์š”. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” deployment.yaml๊ณผ service.yaml์„ ์ƒ์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ , ๊ฐ ์•„๊ทœ๋จผํŠธ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณผ๊ฒŒ์š”.

 

2. Deployment ํŒŒ์ผ (deployment.yaml)

Deployment๋Š” Kubernetes์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ค‘ ํ•˜๋‚˜์˜ˆ์š”.

๊ธฐ๋ณธ ์˜ˆ์ œ (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
  labels:
    app: my-app
spec:
  replicas: 3  # ์‹คํ–‰ํ•  Pod ๊ฐœ์ˆ˜
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: nginx:latest  # ์‚ฌ์šฉํ•  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€
        ports:
        - containerPort: 80  # ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ๋…ธ์ถœํ•  ํฌํŠธ

์ฃผ์š” ์•„๊ทœ๋จผํŠธ ์„ค๋ช…

ํ•„๋“œ ์„ค๋ช…
apiVersion ์‚ฌ์šฉํ•  Kubernetes API ๋ฒ„์ „ (apps/v1)
kind ์ƒ์„ฑํ•  ๋ฆฌ์†Œ์Šค ํƒ€์ž… (Deployment)
metadata ์ด๋ฆ„, ๋ผ๋ฒจ ๋“ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •
spec.replicas ์ƒ์„ฑํ•  Pod ๊ฐœ์ˆ˜ (3๊ฐœ)
spec.selector.matchLabels ์–ด๋–ค ๋ผ๋ฒจ์„ ๊ฐ€์ง„ Pod๋ฅผ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ์ง€ ์„ค์ •
spec.template Pod์˜ ํ…œํ”Œ๋ฆฟ ์ •์˜ (์‹ค์ œ ์‹คํ–‰๋  ์ปจํ…Œ์ด๋„ˆ ์„ค์ •)
spec.template.spec.containers ๋ฐฐํฌํ•  ์ปจํ…Œ์ด๋„ˆ ์ •์˜
image ์‚ฌ์šฉํ•  ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ (์—ฌ๊ธฐ์„œ๋Š” nginx:latest)
ports.containerPort ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์—ด์–ด๋‘˜ ํฌํŠธ (80๋ฒˆ)

 

์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜

1๏ธโƒฃ Rolling Update ์„ค์ •

๋ฐฐํฌ ์ค‘ ๋ฌด์ค‘๋‹จ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด strategy๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์š”.

  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1  # ํ•œ ๋ฒˆ์— ๋ช‡ ๊ฐœ์˜ Pod๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ๋Š”์ง€
      maxSurge: 1  # ์ถ”๊ฐ€๋กœ ๋ช‡ ๊ฐœ์˜ Pod๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€

2๏ธโƒฃ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€

        env:
        - name: ENV_VAR_NAME
          value: "my-value"

3๏ธโƒฃ ์ž์› ์ œํ•œ ๋ฐ ์š”์ฒญ ์„ค์ •

        resources:
          requests:
            cpu: "500m"  # ์ตœ์†Œ 0.5 CPU ํ•„์š”
            memory: "256Mi"  # ์ตœ์†Œ 256MB ๋ฉ”๋ชจ๋ฆฌ ํ•„์š”
          limits:
            cpu: "1"  # ์ตœ๋Œ€ 1 CPU ์‚ฌ์šฉ ๊ฐ€๋Šฅ
            memory: "512Mi"  # ์ตœ๋Œ€ 512MB ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

 

3. Service ํŒŒ์ผ (service.yaml)

Service๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ Pod์— ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์„ ๊ด€๋ฆฌํ•ด์š”.

๊ธฐ๋ณธ ์˜ˆ์ œ (service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app  # ์—ฐ๊ฒฐํ•  Pod์˜ ๋ผ๋ฒจ ์ง€์ •
  ports:
  - protocol: TCP
    port: 80  # ์„œ๋น„์Šค๊ฐ€ ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋…ธ์ถœํ•˜๋Š” ํฌํŠธ
    targetPort: 80  # ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ํฌํŠธ
  type: ClusterIP  # ๊ธฐ๋ณธ๊ฐ’ (ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ)

์ฃผ์š” ์•„๊ทœ๋จผํŠธ ์„ค๋ช…

ํ•„๋“œ ์„ค๋ช…
apiVersion ์‚ฌ์šฉํ•  Kubernetes API ๋ฒ„์ „ (v1)
kind ์ƒ์„ฑํ•  ๋ฆฌ์†Œ์Šค ํƒ€์ž… (Service)
metadata ์ด๋ฆ„, ๋ผ๋ฒจ ๋“ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •
spec.selector ์—ฐ๊ฒฐํ•  Pod๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ผ๋ฒจ (app: my-app)
spec.ports ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•  ํฌํŠธ ์„ค์ •
port ์„œ๋น„์Šค๊ฐ€ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๋Š” ํฌํŠธ (80)
targetPort ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํฌํŠธ (80)
type ์„œ๋น„์Šค ํƒ€์ž… (๊ธฐ๋ณธ๊ฐ’: ClusterIP)

Service ํƒ€์ž… ์ข…๋ฅ˜

ํƒ€์ž… ์„ค๋ช…
ClusterIP ๊ธฐ๋ณธ๊ฐ’, ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (์™ธ๋ถ€ ์ ‘๊ทผ ๋ถˆ๊ฐ€)
NodePort ๋…ธ๋“œ์˜ ํŠน์ • ํฌํŠธ๋ฅผ ์—ด์–ด ์™ธ๋ถ€์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ (30000-32767 ๋ฒ”์œ„)
LoadBalancer ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์™ธ๋ถ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ฐ€๋Šฅ
ExternalName DNS ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์™ธ๋ถ€ ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐ

NodePort ์‚ฌ์šฉ ์˜ˆ์ œ

  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080  # ํด๋Ÿฌ์Šคํ„ฐ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ (30000-32767 ๋ฒ”์œ„ ๋‚ด์—์„œ ์„ค์ • ๊ฐ€๋Šฅ)

 

 

 

4. Deployment์™€ Service ์ ์šฉ ๋ฐฉ๋ฒ•

1๏ธโƒฃ Deployment ๋ฐ Service ์ƒ์„ฑ

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

2๏ธโƒฃ ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ

kubectl get pods
kubectl get services

3๏ธโƒฃ Service๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๊ธฐ

  • ClusterIP ํƒ€์ž…: ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด๋ถ€์—์„œ curl http://my-app-service:80 ์‚ฌ์šฉ
  • NodePort ํƒ€์ž…: http://<๋…ธ๋“œ IP>:30080 ๋กœ ์ ‘์† ๊ฐ€๋Šฅ
  • LoadBalancer ํƒ€์ž…: ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ํผ๋ธ”๋ฆญ IP ํ• ๋‹น ํ›„ ์ ‘์†

 

  • Deployment๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋กœ, replicas, image, rollingUpdate ๋“ฑ์˜ ์„ค์ •์ด ์ค‘์š”ํ•ด์š”.
  • Service๋Š” Pod์— ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋ฉฐ, ClusterIP, NodePort, LoadBalancer ๋“ฑ์˜ ํƒ€์ž…์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ์‹ค๋ฌด์—์„œ๋Š” Deployment์™€ Service๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ AI ๋ชจ๋ธ ์„œ๋น™, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์š”.

์ด ๊ธ€์„ ํ†ตํ•ด deployment.yaml๊ณผ service.yaml์˜ ๊ตฌ์กฐ์™€ ์•„๊ทœ๋จผํŠธ๋ฅผ ์ดํ•ดํ•˜๊ณ , Kubernetes ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง์ ‘ ๋ฐฐํฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

'๐Ÿ’ป Programming > Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Kubernetes] ๋กœ์ปฌ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹ค์Šตํ•˜๊ธฐ - Minikube ํ™œ์šฉ  (0) 2025.02.12
[Docker] (12) ๊นƒํ—ˆ๋ธŒ๋กœ ๋„์ปค ์ด๋ฏธ์ง€ ๊ณต์œ ํ•˜๊ธฐ | Packages Container Registry  (0) 2023.08.31
[Docker] (11) ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์™€ vscode ์—ฐ๋™ํ•˜๊ธฐ | ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐœ๋ฐœ  (2) 2023.08.25
[Docker] (10) Dockerfile ๋นŒ๋“œ ์˜ˆ์‹œ | ENTRYPOINT ์™€ CMD์˜ ์ฐจ์ด  (0) 2023.08.24
[Docker] (9) Dockerfile(๋„์ปคํŒŒ์ผ) - ์Šค๋งˆํŠธํ•˜๊ฒŒ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•  (0) 2023.08.21
'๐Ÿ’ป Programming/Docker & Kubernetes' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Kubernetes] ๋กœ์ปฌ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์‹ค์Šตํ•˜๊ธฐ - Minikube ํ™œ์šฉ
  • [Docker] (12) ๊นƒํ—ˆ๋ธŒ๋กœ ๋„์ปค ์ด๋ฏธ์ง€ ๊ณต์œ ํ•˜๊ธฐ | Packages Container Registry
  • [Docker] (11) ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์™€ vscode ์—ฐ๋™ํ•˜๊ธฐ | ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ ๊ฐœ๋ฐœ
  • [Docker] (10) Dockerfile ๋นŒ๋“œ ์˜ˆ์‹œ | ENTRYPOINT ์™€ CMD์˜ ์ฐจ์ด
๋ญ…์ฆค
๋ญ…์ฆค
AI ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
    ๋ฐ˜์‘ํ˜•
  • ๋ญ…์ฆค
    CV DOODLE
    ๋ญ…์ฆค
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ About Me
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (198)
      • ๐Ÿ“– Fundamentals (33)
        • Computer Vision (9)
        • 3D vision & Graphics (6)
        • AI & ML (15)
        • NLP (2)
        • etc. (1)
      • ๐Ÿ› Research (64)
        • Deep Learning (7)
        • Image Classification (2)
        • Detection & Segmentation (17)
        • OCR (7)
        • Multi-modal (4)
        • Generative AI (6)
        • 3D Vision (2)
        • Material & Texture Recognit.. (8)
        • NLP & LLM (11)
        • etc. (0)
      • ๐ŸŒŸ AI & ML Tech (7)
        • AI & ML ์ธ์‚ฌ์ดํŠธ (7)
      • ๐Ÿ’ป Programming (85)
        • Python (18)
        • Computer Vision (12)
        • LLM (4)
        • AI & ML (17)
        • Database (3)
        • Apache Airflow (6)
        • Docker & Kubernetes (14)
        • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (4)
        • C++ (1)
        • etc. (6)
      • ๐Ÿ’ฌ ETC (3)
        • ์ฑ… ๋ฆฌ๋ทฐ (3)
  • ๋งํฌ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    GPT
    material recognition
    object detection
    nlp
    pandas
    OpenCV
    Image Classification
    OpenAI
    ์ปดํ“จํ„ฐ๋น„์ „
    Computer Vision
    3D Vision
    Text recognition
    ๋”ฅ๋Ÿฌ๋‹
    segmentation
    CNN
    AI
    OCR
    Python
    ํ”„๋กฌํ”„ํŠธ์—”์ง€๋‹ˆ์–ด๋ง
    pytorch
    ๊ฐ์ฒด๊ฒ€์ถœ
    LLM
    airflow
    ํŒŒ์ด์ฌ
    multi-modal
    VLP
    deep learning
    ๊ฐ์ฒด ๊ฒ€์ถœ
    ChatGPT
    ๋„์ปค
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
๋ญ…์ฆค
[Kubernetes] ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค Deployment ๋ฐ Service ํŒŒ์ผ ๊ฐ€์ด๋“œ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”