[쿠버네티스] #4. 컨트롤러란? Deployment란? :: 잡다한 프로그래밍
반응형

1. 디플로이먼트의 업데이트 방법 4가지

  • ReCreate
  • Rolling Update
  • Blue/Green
  • Canary

#1) ReCreate

Pod1이 작동 중이라면 Pod1을 죽이고 Pod2를 실행시켜 업데이트하는 방식. Pod1이 죽고 Pod2가 실행되는 시간(Downtime)만큼의 빈 공간이 생긴다

 

#2) Rolling Update

Pod1이 1개 실행중이라면 Pod1이 실행된 상태로 Pod2를 실행한다 총 2개를 사용하는 셈 (이때 누군가는 Pod1에, Pod2에 접근할 수 있는 상태) 이후 Pod1을 삭제(이제부터 Pod2에만 접근함) 추가적인 자원을 요구하지만 Downtime이 없음

 

#3) Blue/Green

서비스와 연결된 pod1(컨트롤러1)이 실행 중일 때 pod2(컨트롤러 2)를 만듦 이후 서비스에 연결된 pod1을 pod2로 바꿔주면 pod2로 바꿀 수 있음(추가적인 자원을 요구하고, 서비스의 downtime 없음) 만약 pod2에 문제가 생기면 서비스에 연결된 pod만 pod1으로 바꿔주면 됨 문제가 없으면 pod1과 컨트롤러 1을 삭제해주면 됨

 

#4) Canary

업데이트 예정


2. Rolling Update 실습

다음과 같은 구조로 이루어져있을때 Deployment의 pod v1을 v2로 수정하면 자동으로 Rolling Update가 된다(Rolling Update가 Default)

 

Deployment.YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      type: app
  template:
    metadata:
      labels:
        type: app
    spec:
      containers:
      - name: pod-test
        image: diqmwl/pod:v1
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: test-service
spec:
  selector:
    type: app
  ports:
    - port: 9000
      targetPort: 8080

다음과 같은 YAML에서 image: diqmwl/pod:v1 부분을 pod:v2로 수정하면 Rolling Update가 이루어진다.

반응형

+ Recent posts