Skip to content

deployment

TL;DR

  • Kubernetes Deployment는 애플리케이션 배포 및 업데이트를 관리하는 객체임.
  • Deployment 리소스를 사용하여 안정적인 롤링 업데이트와 스케일링을 수행할 수 있음.
  • YAML 스펙을 통해 replicas, selector, template 등 주요 필드를 정의함.

Kubernetes Deployment 개요

  • Deployment는 Pod의 생성, 업데이트, 삭제를 관리하는 컨트롤러 역할을 함.
  • 애플리케이션의 배포 전략을 설정하고, 원하는 상태를 유지할 수 있도록 함.
  • ReplicaSet을 자동으로 관리하여 필요한 만큼의 Pod가 유지되도록 보장함.
  • 롤링 업데이트 및 롤백 기능을 제공하여 안정적인 배포가 가능함.

Deployment YAML 스펙

  • apiVersion: apps/v1을 사용하며, Deployment를 정의하는 API 그룹임.
  • kind: 리소스 타입을 Deployment로 지정해야 함.
  • metadata: Deployment의 이름 및 네임스페이스를 정의함.
  • spec: Deployment의 주요 설정을 포함하며, 다음 필드가 중요함.

주요 필드 설명

replicas
  • 실행할 Pod의 개수를 지정함.
  • 기본값은 1이며, 필요에 따라 조정 가능함.
selector
  • 관리할 Pod를 찾기 위한 matchLabels 조건을 정의함.
  • template에서 정의한 labels과 일치해야 함.
template
  • Pod의 스펙을 정의하는 필드임.
  • metadata.labels: Pod의 라벨을 지정하여 selector와 매칭되도록 함.
  • spec.containers: 실행할 컨테이너 목록을 정의하며, 아래 속성을 포함함.
    • name: 컨테이너의 이름
    • image: 사용할 컨테이너 이미지
    • ports: 노출할 포트 정보
    • env: 환경 변수 설정 가능

Deployment 예제 YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
        image: my-app:latest
        ports:
        - containerPort: 8080

롤링 업데이트 및 롤백

  • strategy.typeRollingUpdate로 설정하면 새로운 버전의 Pod가 점진적으로 배포됨.
  • maxUnavailablemaxSurge 값을 조정하여 업데이트 전략을 세부적으로 설정 가능함.
  • kubectl rollout undo deployment my-app 명령어로 이전 버전으로 롤백할 수 있음.

적용 및 관리 명령어

  • Deployment 생성: kubectl apply -f deployment.yaml
  • 현재 상태 확인: kubectl get deployments
  • 롤링 업데이트 진행 상태 확인: kubectl rollout status deployment my-app
  • 롤백 수행: kubectl rollout undo deployment my-app

마무리

  • Kubernetes Deployment는 안정적인 애플리케이션 배포 및 관리를 위한 핵심 리소스임.
  • YAML 스펙을 이해하고, replicas, selector, template 필드를 적절히 활용하는 것이 중요함.
  • 롤링 업데이트 및 롤백을 통해 운영 중인 애플리케이션을 안전하게 유지할 수 있음.