Kubernetes - Deployment

choko's avatar
Jun 29, 2024
Kubernetes - Deployment
 
  • Deployment 는 쿠버네티스에서 가장 널리 사용되는 오브젝트이다.
    • ReplicaSet을 이용하여 Pod를 업데이트하고 이력을 관리하여 롤백하거나 특정 버전으로 돌아갈 수 있다. → 버전 관리
    • Replicaset은 파드 수를 관리하는데만 중점을 두고, Deployment는 Replicaset를 사용하여 애플리케이션의 배포 및 업데이트를 관리하는 높은 수준의 추상화를 제공한다.
 

Deployment 만들기

이전에 만든 ReplicaSet을 Deployment로 만들어 보자
apiVersion: apps/v1 kind: Deployment metadata: name: echo-deploy spec: replicas: 4 selector: matchLabels: app: echo tier: app template: metadata: labels: app: echo tier: app spec: containers: - name: echo image: ghcr.io/subicura/echo:v1
→ type을 제외하고는 ReplicaSet과 완전히 동일하다.
 
  • deployment는 Pod을 새로운 이미지로 업데이트 하면 기존의 Pod를 제거하고 새로운 버전의 Pod를 생성한다.
  • 새로운 이미지로 업데이트하기 위해 사용, 버전을 업데이트하기 위해 ReplicaSet을 이용한다. 버전을 업데이트하면 새로운 ReplicaSet을 생성하고, 해당 ReplicaSet이 새로운 Pod을 생성한다.
 
 
 

Deployment 작동 방식

notion image
  1. Deployment Controller는 Deployment조건을 감시하면서 현재 상태와 원하는 상태가 다른 것을 체크
  1. Deployment Controller가 원하는 상태가 되도록 ReplicaSet 설정
  1. ReplicaSet Controller는 ReplicaSet조건을 감시하면서 현재 상태와 원하는 상태가 다른 것을 체크
  1. ReplicaSet Controller가 원하는 상태가 되도록 Pod을 생성하거나 제거
  1. Scheduler는 API서버를 감시하면서 할당되지 않은 Pod이 있는지 체크
  1. Scheduler는 할당되지 않은 새로운 Pod을 감지하고 적절한 노드에 배치
  1. 이후 노드는 기존대로 동작
  • Deployment는 Deployment Controller가 관리하고 ReplicaSet과 Pod은 기존 Controller와 Scheduler가 관리
 
 

버전관리

// Deployment는 변경된 상태를 기록한다. # 히스토리 확인 kubectl rollout history deploy/echo-deploy # revision 1 히스토리 상세 확인 kubectl rollout history deploy/echo-deploy --revision=1 # 바로 전으로 롤백 kubectl rollout undo deploy/echo-deploy # 특정 버전으로 롤백 kubectl rollout undo deploy/echo-deploy --to-revision=2
 
 
Share article

Tom의 TIL 정리방