Hunny's Daily

개발과 일상에서의 달콤한 순간들을 기록하며, 유용한 팁과 인사이트를 공유합니다.

Kubernetes Deployment 동작 방식 정리

파드는 어떻게 생성되고 업데이트되는가

Kubernetes에서 애플리케이션을 배포할 때 가장 많이 사용하는 리소스는 Deployment다. Helm Chart를 사용하더라도 실제로 파드를 생성하고 업데이트하는 주체는 Deployment다. 이 글에서는 Kubernetes Deployment가 어떤 역할을 하고, 내부적으로 어떤 방식으로 동작하는지 개념 중심으로 정리한다.


Kubernetes Deployment란 무엇인가

Deployment는 파드를 선언적으로 관리하기 위한 리소스다. 사용자는 파드를 몇 개 실행하고, 어떤 방식으로 업데이트할지 정의하고, 실제 실행과 유지 관리는 Kubernetes가 담당한다.

Deployment의 핵심 역할은 다음과 같다.

  • 파드 생성 및 유지
  • 파드 개수 관리
  • 애플리케이션 업데이트
  • 롤백 지원

즉, Deployment는 파드를 직접 다루지 않고 원하는 상태(desired state)를 정의하는 역할을 한다.


Deployment와 Pod의 관계

Deployment는 파드를 직접 관리하지 않는다. 중간에 ReplicaSet이라는 리소스가 존재한다.

관계는 다음과 같다.

  • Deployment
  • ReplicaSet
  • Pod

Deployment는 ReplicaSet을 생성하고, ReplicaSet이 파드를 생성하는 구조다.


Deployment 생성 시 내부 동작 흐름

Deployment를 생성하면 Kubernetes 내부에서는 다음과 같은 흐름이 발생한다.

  1. 사용자가 Deployment를 생성
  2. Deployment Controller가 변경 사항 감지
  3. 새로운 ReplicaSet 생성
  4. ReplicaSet이 지정된 개수만큼 Pod 생성
  5. Scheduler가 Pod를 Node에 배치
  6. Kubelet이 컨테이너 실행

이 과정을 통해 파드가 실제로 실행된다.


ReplicaSet의 역할

ReplicaSet의 역할은 단순하다.

  • 지정된 개수의 파드를 항상 유지

만약 파드가 하나 종료되면 ReplicaSet은 즉시 새로운 파드를 생성한다. 이를 통해 파드 장애가 발생해도 자동으로 복구된다.


Deployment 업데이트가 동작하는 방식

Deployment에서 이미지 태그나 설정이 변경되면 Kubernetes는 이를 업데이트로 인식한다. 이때 기본 동작 방식은 Rolling Update다.


Rolling Update 동작 과정

Rolling Update는 파드를 한 번에 모두 교체하지 않고, 점진적으로 교체하는 방식이다.

일반적인 흐름은 다음과 같다.

  1. 새로운 ReplicaSet 생성
  2. 새 파드 일부 생성
  3. 기존 파드 일부 종료
  4. 새 파드 정상 상태 확인
  5. 이 과정을 반복

이를 통해 서비스 중단 없이 배포가 가능해진다.


Rolling Update와 Probe의 관계

Deployment 업데이트 과정에서 Probe는 중요한 역할을 한다.

  • Readiness Probe는 준비되지 않은 파드로 트래픽 전달을 방지한다.
  • Startup Probe는 기동 중인 파드를 보호한다.

Probe가 제대로 설정되어 있지 않으면 배포 중 장애가 발생할 수 있다.


maxSurge와 maxUnavailable

Rolling Update 동작은 두 가지 옵션으로 제어할 수 있다.

  • maxSurge는 동시에 추가로 생성할 수 있는 파드 수를 의미한다.
  • maxUnavailable은 동시에 중단될 수 있는 파드 수를 의미한다.

이 설정을 통해 배포 중 리소스 사용량과 안정성을 조절할 수 있다.


Deployment 롤백이 가능한 이유

Deployment는 변경 이력을 관리한다. 이전 ReplicaSet 정보가 남아 있기 때문에 문제가 발생하면 이전 버전으로 되돌릴 수 있다. 이 기능은 운영 환경에서 중요한 안전 장치다.


Helm Chart와 Deployment의 관계

Helm Chart는 Deployment를 생성하는 도구일 뿐이다. 실제로 파드를 생성하고 업데이트하는 로직은 Kubernetes Deployment에 의해 수행된다.

Helm을 사용하더라도 Deployment 동작 방식을 이해하지 못하면 배포 문제를 해결하기 어렵다.


Deployment를 사용할 때 자주 발생하는 문제

다음과 같은 문제가 자주 발생한다.

  • Probe 미설정으로 인한 배포 실패
  • 리소스 부족으로 파드 Pending
  • 이미지 태그 관리 미흡
  • 롤백 시 의도치 않은 상태 발생

Deployment는 단순한 리소스처럼 보이지만 운영에서는 매우 많은 요소와 연결된다.


어떤 경우에 Deployment 이해가 중요한가

Deployment 동작 방식에 대한 이해는 다음 상황에서 특히 중요하다.

  • 무중단 배포가 필요한 서비스
  • 트래픽이 있는 운영 환경
  • Spring Boot, JVM 기반 애플리케이션
  • Helm Chart를 사용하는 배포 구조

이 단계부터 Kubernetes는 사용이 아니라 운영의 영역이 된다.


정리

Kubernetes Deployment는 파드를 선언적으로 관리하는 핵심 리소스다. Deployment는 ReplicaSet을 통해 파드를 생성하고, Rolling Update를 통해 안전하게 업데이트를 수행한다. Helm Chart를 사용하더라도 Deployment의 내부 동작을 이해하는 것은 필수이며, 안정적인 배포를 위해 Probe와 함께 설계되어야 한다.