쿠버네티스 Controller 살펴보기1 Deployment - 기초(4)

쿠버네티스 기초 시리즈

Controller 주요 기능

Auto Healing

Pod 혹은 Node가 다운된 경우 즉각 새로운 Pod와 Node로 만들어주는 것

Auto Scaling

Pod의 리소스가 다 찬 경우 이 상태를 파악하여 새로운 파드를 만들어서 부하 분산 시켜줌

Software Update

여러 Pod에 대한 버전 업그레이드를 해야하는 경우 컨트롤러를 통해 한 번에 할 수 있음

업그레이드 도중 에러가 생기면 롤백 가능

Job

일시적인 작업을 해야하는 경우 일시적으로 Pod를 만들어서 종료하기때문에 자원 활용이 가능함

ReplicaSet

기존 Replication Controller(deprecated)이 ReplicaSet으로 변경 됨

Template

  • Controller가 Pod를 생성할 때 사용할 Pod용 템플릿
  • 버전을 업그레이드 하고자 할 때 이 템플릿을 변경하고 Pod를 다운 시키면 새로운 버전으로 Pod가 생성됨

Replicas

  • scale in/out에 관련한 옵션
  • pod template를 같이 정의하면 해당 템플릿으로 스케일-인/아웃이 일어남

Selector ( only ReplicaSet )

  • Pod를 select하기 위한 옵션
  • 기존 replcation에서는 label이 정확히 일치해야만 Pod 연결이 가능했지만
  • ReplicaSet에서는 다양한 match옵션을 제공함
    • Exists : Key가 일치하는 경우만, Vaule는 상관 없음
    • DoesNotExists : Key가 일치하지 않는 경우만, Vaule는 상관 없음
    • In : Key가 일치하는 경우만, 일치할 Vaules를 여러개 지정
    • NotIn : Key가 일치하는 경우만, 일치하지 않을 Vaules를 여러개 지정
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replica1
spec:
  replicas: 1
  selector: # selector의 내용이 바로 아래의 template#labels에 포함되어야 함!
    matchLabels:
      type: web
      ver: v1
    matchExpressions:
      - { key: type, operator: In, values: [web] }
      - { key: ver, operator: Exists }
  template:
    metadata:
      labels:
        type: web
        ver: v1
        location: dev
    spec:
      containers:
        - name: container
          image: tmkube/app:v1
      terminationGracePeriodSeconds: 0 # Pod를 몇초 후에 삭제할지 옵션, default 30sec
# 컨트롤러 삭제 명령
# --cascade=false : Controller 삭제시 연결된 Pod도 함께 삭제 되는데, 이 옵션은 Pod는 남겨달라는 옵션
kubectl delete replicationcontrollers replication1 --cascade=false

Deployment

새로운 버전의 릴리스를 관리하는 객체로 애플리케이션의 특정 소프트웨어 버전보다 상위 버전으로 배포된 애플리케이션임

  • ReCreate는 Downtime이 존재함
  • Rolling Update, Blue/Green, Canary는 zero downtime이지만 자원량이 배포시에 더 필요함

ReCreate 전략

  • deployment template에 버전을 올림
  • 기존 ReplicaSet의 Pod를 제거
  • 여기서 다운타임 발생
  • 새로운 ReplicaSet을 만들어서 Pod를 생성시킴

Rolling Update 전략

  • 새로운 ReplicaSet을 추가한 뒤 replicas를 1로 조정
  • 그럼 기존 replicaSet + 신규 replicaSet으로 트래픽이 분산됨
  • 기존 replicaSet의 replicas를 1로 변경하여 Pod를 하나 줄임
  • 신규 replicaSet의 replicas를 1개 올리고
  • 기존 replicaSet의 replicas를 0ㅇ로 변경하여 기존 Pod를 제거함

Blue/Green 전략

  • Blue와 Green group을 구분하여 기존 버전의 애플리케이션과 새로운 버전의 애플리케이션을 구분하여 스위칭

Canary 전략

  • 카나리 전략은 광산에 산소 부족을 확인하기 위하여 산소 부족에 민감한 카나리아 새를 들고 들어가던 방식에서 유래함
  • 새로운 버전의 애플리케이션을 1개의 레플리카 셋으로 기존 버전의 애플리케이션에 추가로 생성
  • 에러나 장애가 없으면 새로운 버전의 애플리케이션의 레플리카 셋을 원하는 수만큼으로 늘림
  • 기존 버전의 애플리케이션의 레플리카 셋을 0으로 조정하여 배포를 마침