Deployment

Monday·2024년 6월 10일
post-thumbnail

Deployment

Pod을 새롭게 업데이트 하고 Rollback 하거나 특정 버전으로 돌아갈 수 있다

Yaml 파일

apiVersion: v1
kind: Deployment
metadata:
  name: deployName
spec:
  replicas: 4
  selector:
    matchLabels:
      app: appName
      tier: tierName
  template:
    metadata:
      labels:
        app: appName
        tier: tierName
    spec:
      containers:
        - name: containerName
          image: imagePath

Deployment의 ReplicaSet 사용

Deployment는 새로운 이미지로 업데이트 하기 위해 ReplicaSet을 활용한다.

버전 업데이트시, 새로운 ReplicaSet을 생성하고 해당 ReplicaSet에서 새로운 버전의 Pod을 생성한다.

새로운 버전의 Pod이 생길때마다 기존의 버전의 Pod은 줄인다.

결국 원하는 버전의 Pod이 Replicas의 갯수만큼 생성되고, 기존 버전의 Pod은 0개가 되는 것이다.

Deployment 동작 방식

Deployment Controller

  • 원하는 배포 상태를 API Server를 통해 체크하고,
    그 만큼 ReplicaSet이 설정이 되었는지 체크
  • 필요하다면 조건에 맞는 ReplicaSet 생성

ReplicaSet Controller

  • ReplicaSet의 조건을 API Server를 통해 체크
  • 조건을 만족할 만큼 Pod을 생성/제거

Scheduler

  • 할당되지 않은 Pod이 있는지 감시
  • 할당되지 않은 Pod은 적절한 Node로 할당

버전 관리

Deployment는 변경된 상태를 기록한다.
명령어를 통해 이러한 기록을 확인할 수 있다.

# 히스토리 확인하기
kubectl rollout history deploy/${deploy_name}

# 특정 조건의 히스토리 상세 확인하기
# (revision 1의 히스토리 상세 확인)
kubectl rollout history deploy/${deploy_name} --revision=1 

# 바로 전으로 롤백
kubectl rollout undo deploy/${deploy_name}

# 특정 버전으로 롤백
# (revision 2로 롤백)
kubectl rollout undo deploy/${deploy_name} --to-revision=2

배포 전략 설정

업데이트 되는 Pod의 갯수도 조정이 가능하다
(아까는 새 버전이 하나 생기고, 구 버전이 하나 사라지고 하는 형식)

apiVersion: v1
kind: Deployment
metadata:
  name: deployName
spec:
  replicas: 4
  selector:
    matchLabels:
      app: appName
      tier: tierName
  minReadySeconds: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 3
      maxUnavailable: 3
  template:
    metadata:
      labels:
        app: echo
        tier: app
    spec:
      containers:
        - name: echo
          image: ghcr.io/subicura/echo:v1
          livenessProbe:
            httpGet:
              path: /
              port: 3000
  • 최소 기다리는 시간 5초 (minReadySeconds: 5)
  • 최대 동시 추가 가능 Pod 갯수 3개 (maxSurge: 3)
  • 최대 동시 제거 가능 Pod 갯수 3개 (maxUnavailable: 3)
  • Pod 갯수 관련 설정은 기본 보통 25%로 설정되어 있다
profile
차근차근 꾸준히

0개의 댓글