Kubernetes 환경에서 Application을 안정적으로 운영하려면 단순히 Container를 실행하는 것뿐만 아니라 원하는 개수의 Pod를 유지하고, Version 변경과 업데이트 과정을 안전하게 관리해야 합니다.
예를 들어 Web Application을 운영할 때 하나의 Pod만 실행하면 장애 발생 시 서비스가 중단될 수 있습니다.
또한 새로운 Version의 Application을 배포할 때 모든 Pod를 한 번에 교체하면 서비스 중단 위험이 발생합니다.
Kubernetes에서는 이러한 문제를 해결하기 위해 Deployment 기능을 제공합니다.
Deployment는 ReplicaSet과 Pod를 관리하며 Application 배포, Scaling, Rolling Update, Rollback을 지원하는 Kubernetes 핵심 Controller입니다.
| 구성 요소 | 역할 |
|---|---|
| Deployment | Application 배포 관리 |
| ReplicaSet | Pod 개수 유지 |
| Pod | Container 실행 |
| Controller | 상태 조정 |
Deployment 구조를 이해하면 Kubernetes에서 Application을 안정적으로 배포하고 운영하는 방식을 이해할 수 있습니다.
Kubernetes Deployment란 무엇인가?
Deployment는 Kubernetes에서 Stateless Application을 관리하기 위한 Resource입니다.
사용자가 원하는 Pod 개수와 Application 상태를 정의하면 Kubernetes가 항상 해당 상태를 유지합니다.
예:
원하는 상태:
Web Pod 3개 실행
현재 상태:
Web Pod 1개 실행
↓
Deployment Controller 확인
↓
Pod 2개 추가 생성
↓
총 3개 유지
이처럼 Deployment는 Desired State와 Current State를 일치시키는 역할을 합니다.
Kubernetes Deployment가 필요한 이유
Container 운영 환경에서는 지속적인 관리가 필요합니다.
문제:
| 상황 | 문제 |
|---|---|
| Pod 장애 | 서비스 중단 가능 |
| Version 변경 | 업데이트 위험 |
| Traffic 증가 | Pod 부족 |
| 수동 관리 | 운영 부담 증가 |
Deployment를 사용하면 Application Lifecycle을 자동으로 관리할 수 있습니다.
Kubernetes Deployment 동작 구조
Deployment는 ReplicaSet을 생성하고 ReplicaSet이 Pod를 관리하는 구조입니다.
구조:
| 구성 요소 | 역할 |
|---|---|
| Deployment | 배포 상태 관리 |
| ReplicaSet | Pod Replica 유지 |
| Pod | Application 실행 |
| Container | 실제 서비스 실행 |
동작 과정:
| 단계 | 내용 |
|---|---|
| 1단계 | Deployment 생성 |
| 2단계 | ReplicaSet 생성 |
| 3단계 | Pod 생성 |
| 4단계 | 상태 확인 |
| 5단계 | 원하는 상태 유지 |
Deployment Controller가 전체 상태를 관리합니다.
Kubernetes Deployment와 ReplicaSet 관계
Deployment는 직접 Pod를 관리하지 않습니다.
중간에 ReplicaSet을 통해 Pod 개수를 유지합니다.
구조:
Deployment
↓
ReplicaSet
↓
Pod
예:
Deployment:
nginx-app
ReplicaSet:
nginx-app-v1
Pod:
nginx Pod 3개
이 구조를 통해 안정적인 Version 관리가 가능합니다.
Kubernetes Replica란 무엇인가?
Replica는 동일한 Application Pod의 개수를 의미합니다.
예:
replicas: 5
의미:
동일한 Pod 5개 실행
효과:
| 효과 | 설명 |
|---|---|
| 가용성 증가 | 장애 대응 |
| Load 분산 | Traffic 처리 |
| 확장 가능 | 사용자 증가 대응 |
Replica 설정은 Application 안정성에 중요한 요소입니다.
Kubernetes Deployment Scaling 방식
Deployment는 Replica 개수를 조절하여 Application 규모를 변경합니다.
Scale Up:
Pod 3개
↓
Pod 10개 증가
Scale Down:
Pod 10개
↓
Pod 3개 감소
Scaling 명령:
| 방법 | 설명 |
|---|---|
| kubectl scale | 직접 변경 |
| HPA | 자동 Scaling |
| Manifest 변경 | 설정 변경 |
운영 환경에서는 HPA와 함께 사용하는 경우가 많습니다.
Kubernetes Rolling Update란?
Rolling Update는 Application Version 변경 시 기존 Pod를 조금씩 교체하는 배포 방식입니다.
서비스 중단 없이 새로운 Version을 적용할 수 있습니다.
동작:
기존 Version Pod
↓
새로운 Version Pod 생성
↓
Traffic 이동
↓
기존 Pod 제거
안정적인 무중단 배포 방식입니다.
Kubernetes Rolling Update 설정
Deployment에서는 업데이트 전략을 설정할 수 있습니다.
주요 옵션:
| 설정 | 설명 |
|---|---|
| maxUnavailable | 동시에 줄일 수 있는 Pod 수 |
| maxSurge | 추가 생성 가능한 Pod 수 |
예:
현재 Pod:
10개
maxSurge:
2
↓
최대 12개까지 생성 가능
점진적인 업데이트가 가능합니다.
Kubernetes Deployment Rollback이란?
새로운 Version 배포 후 문제가 발생하면 이전 Version으로 되돌릴 수 있습니다.
이를 Rollback이라고 합니다.
과정:
Version 업데이트
↓
Application 오류 발생
↓
이전 ReplicaSet 선택
↓
기존 Version 복구
빠른 장애 복구가 가능합니다.
Kubernetes Deployment Revision 관리
Deployment는 변경 이력을 저장합니다.
각 변경은 Revision으로 관리됩니다.
활용:
| 기능 | 설명 |
|---|---|
| Revision 확인 | 배포 기록 확인 |
| Rollback | 이전 상태 복구 |
| Version 관리 | 변경 추적 |
운영 환경에서 안정적인 배포를 지원합니다.
Kubernetes Deployment Update 전략
Deployment는 두 가지 Update 전략을 제공합니다.
| 전략 | 설명 |
|---|---|
| RollingUpdate | 순차 변경 |
| Recreate | 전체 삭제 후 재생성 |
일반적인 Production 환경에서는 RollingUpdate를 많이 사용합니다.
Kubernetes Deployment와 Service 관계
Deployment는 Pod를 관리하고 Service는 Pod에 Traffic을 전달합니다.
구조:
Client
↓
Service
↓
Deployment
↓
Pod
역할이 서로 다릅니다.
Kubernetes Deployment와 HPA 관계
HPA는 Deployment Replica 수를 자동으로 변경합니다.
구조:
Traffic 증가
↓
HPA 감지
↓
Deployment Replica 증가
↓
Pod 추가 생성
자동 Scaling 환경에서 중요한 구조입니다.
Kubernetes Deployment 활용 사례
| Application | 사용 목적 |
|---|---|
| Web Server | 서비스 운영 |
| API Server | Backend 운영 |
| Frontend | UI 서비스 |
| Microservice | Application 배포 |
Stateless Application 운영에서 가장 많이 사용하는 Controller입니다.
Kubernetes Deployment 운영 시 고려사항
Production 환경에서는 안정적인 배포 전략이 필요합니다.
| 항목 | 설명 |
|---|---|
| Replica 수 | 서비스 규모 고려 |
| Update 전략 | 배포 방식 선택 |
| Resource 설정 | CPU, Memory 관리 |
| Health Check | 상태 확인 |
Deployment 설정은 서비스 안정성과 직접 연결됩니다.
Kubernetes Deployment 장애 처리
Pod 장애가 발생하면 Deployment는 자동으로 복구합니다.
과정:
Pod 장애 발생
↓
ReplicaSet 감지
↓
새로운 Pod 생성
↓
원하는 Replica 유지
자동 복구 구조를 제공합니다.
Kubernetes Deployment 장점
| 장점 | 설명 |
|---|---|
| 자동 복구 | Pod 상태 유지 |
| 무중단 배포 | Rolling Update 지원 |
| Scaling | Replica 조절 |
| Rollback | 빠른 복구 가능 |
Deployment는 Kubernetes Application 운영의 핵심 Resource입니다.
자주 묻는 질문
Deployment와 Pod 차이는 무엇인가요?
Pod는 Container를 실행하는 단위이고 Deployment는 Pod의 생성과 상태를 관리하는 Controller입니다.
Deployment 없이 Pod를 실행할 수 있나요?
가능하지만 Production 환경에서는 자동 복구와 Version 관리를 위해 Deployment 사용이 일반적입니다.
Rolling Update 중 서비스 중단이 발생하나요?
정상적으로 설정하면 기존 Pod와 새로운 Pod를 함께 운영하면서 서비스 중단을 최소화할 수 있습니다.
마무리
Kubernetes Deployment는 Application 배포, Replica 관리, Scaling, Rolling Update, Rollback을 담당하는 핵심 Controller입니다.
| 구성 요소 | 역할 |
|---|---|
| Deployment | 배포 관리 |
| ReplicaSet | Pod 개수 유지 |
| Pod | Application 실행 |
| Controller | 상태 조정 |
Deployment 구조를 이해하면 Kubernetes 환경에서 안정적인 Application 배포와 운영 자동화 방식을 이해할 수 있습니다.
다음 글에서는 Kubernetes Service를 통한 Application Network 연결을 위한 Kubernetes Service 완벽 가이드! ClusterIP, NodePort, LoadBalancer 구조 이해하기를 알아보겠습니다.