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.type
을 RollingUpdate
로 설정하면 새로운 버전의 Pod가 점진적으로 배포됨. maxUnavailable
및 maxSurge
값을 조정하여 업데이트 전략을 세부적으로 설정 가능함. 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
필드를 적절히 활용하는 것이 중요함. - 롤링 업데이트 및 롤백을 통해 운영 중인 애플리케이션을 안전하게 유지할 수 있음.