CKA

(TIL) Kubernetes Deployment

심플코더 2025. 3. 16. 18:42

Kubernetes Deployment란

프로뎍선 환경, 즉 실제로 서비스를 이용자들에게 제공하는 환경에서 서버를 운영하는 경우 다양한 상황을 고려해야만한다.
단일 인스턴스가 아닌 여러 개의 웹 서버 인스턴스를 사용하면서 장애 상황에 대처할 수 있어야하며 롤백과 업데이트에 대한 내용또한 고려되어야한다.
이러한 요구사항을 충족하기 위한 개념이 Deployment이며 Deployment는 ReplicaSet을 감싸는 상위 개념에 해당한다.

Deployment의 주요 기능

Rolling Updates

한 번에 모든 Pod를 업데이트하지 않고 순차적으로 새로운 버전으로 업데이트한다. 이를 통해 어플리케이션이 중단되지 않고 업데이트될 수 있다.

Rollback

업데이트 후 문제가 발생하면 이번 버전으로 되돌릴 수 있다.

Pause & Resume

변경 사항을 즉시 적용하지 않고 일시 중지 후 검토한 뒤 재개할 수 있다.

Self-healing

Pod이 비정상적으로 종료되면 자동으로 새로운 Pod를 생성하여 복구한다.

Deployment YAML 파일

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  # 이 레이블이 있는 Pod을 선택
  template:  # Pod 템플릿 정의
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: nginx-container
          image: nginx:latest

각 필드는 다음과 같은 의미를 가진다.

필드명 설명
apiVersion Kubernetes API 버전을 의미한다
kind 객체 유형을 의미하며 여기에서는 객체가 Deployment임을 의미한다.
metadata Deployment의 이름 및 레이블 설정을 의미한다
spec.replicas 실행할 Pod 개수를 뜻한다
spec.selector 관리할 Pod를 지정하는 Label을 의미한다
spec.template Pod의 템플릿 정보를 의미한다

Deployment의 전체 리소스 확인

Deployment를 생성하면 쿠버네티스는 자동으로 ReplicaSet과 Pod를 생성한다.
관련된 객체를 한 번에 확인하려면 다음과 같은 명령어를 실행한다.

kubectl get all