[CKAD] Kubernetes Deployment

HongSeokChoi·2025년 8월 27일

ckad

목록 보기
7/14

Deployment란?

  • Pod → ReplicaSet 위에 존재하는 상위 레벨의 컨트롤러
  • 실무에서 가장 많이 사용하는 쿠버네티스 워크로드 리소스
  • 애플리케이션 배포와 라이프사이클 관리를 담당

Deployment의 주요 기능

  • 안정적 배포: 프로덕션 환경에서 애플리케이션을 안전하게 배포
  • 롤링 업데이트(Rolling Update): Pod을 순차적으로 교체 → 무중단 서비스 제공
  • 롤백(Rollback): 문제 발생 시 즉시 이전 버전으로 되돌리기 가능
  • 일시 정지(Pause) & 재개(Resume): 여러 변경 사항을 모아 한 번에 적용
  • 스케일링(Scaling): 부하 상황에 따라 Pod 개수를 수평 확장(Horizontal) 또는 축소

왜 Deployment인가?

  • 단일 Pod: 장애 발생 시 자동 복구 불가
  • ReplicaSet: 복제 유지 및 자동 복구 가능하지만, 업데이트/롤백 기능 부족
  • Deployment: 업데이트, 롤백, 점진적 배포(rolling update)까지 지원 → 실무 표준

구조 관계:

Deployment → ReplicaSet → Pod
  • Deployment 생성 시 ReplicaSet이 자동으로 생성됨
  • ReplicaSet은 지정된 수의 Pod을 유지

Deployment 예시 (deployment-definition.yml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
    type: front-end
spec:
  replicas: 3     # 유지할 Pod 개수 지정
  selector:       # 관리할 Pod 라벨 정의
    matchLabels:
      type: front-end
  template:       # Pod 템플릿
    metadata:
      labels:
        app: myapp
        type: front-end
    spec:
      containers:
      - name: nginx-container
        image: nginx

Deployment 관련 명령어

목적명령어설명
Deployment 생성kubectl create -f deployment-definition.ymlDeployment 객체 생성
Deployment 목록kubectl get deployments생성된 Deployment 확인
ReplicaSet 확인kubectl get rsDeployment가 생성한 ReplicaSet 확인
Pod 확인kubectl get podsRS가 관리하는 Pod 확인
전체 리소스 확인kubectl get allDeployment, RS, Pod 등 모두 확인
Deployment 삭제kubectl delete deployment <이름>Deployment와 관련 RS, Pod 삭제

업데이트 & 롤백 전략

롤링 업데이트 (Rolling Update)

  • 기본 전략: Pod을 하나씩 교체하여 서비스 중단 없이 업데이트
kubectl set image deployment/myapp-deployment nginx-container=nginx:1.21

롤백 (Rollback)

  • 문제가 발생하면 바로 이전 ReplicaSet으로 되돌림
kubectl rollout undo deployment/myapp-deployment

배포 상태 확인

kubectl rollout status deployment/myapp-deployment
kubectl rollout history deployment/myapp-deployment

kubectl 출력 포맷팅

기본 출력

  • 기본적으로 사람이 읽기 쉬운 plain-text 표 형식

-o 옵션 (Output Format)

kubectl [command] [TYPE] [NAME] -o <output_format>

자주 쓰이는 포맷

옵션설명예시
-o jsonJSON 형식 출력kubectl get pod mypod -o json
-o yamlYAML 형식 출력kubectl get pod mypod -o yaml
-o name리소스 이름만 출력kubectl get pods -o name
-o wide표 형식 + 추가 정보kubectl get pods -o wide

예시:

kubectl create namespace test-123 --dry-run=client -o json
kubectl create namespace test-123 --dry-run=client -o yaml
kubectl get pods -o wide

profile
Network/Cloud

0개의 댓글