BAEKDEV
BAEKDEV

자바 둘 타세요-에서 <자바 인력1>을 맡고 있습니다.

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

쿠버네티스 컨트롤러는 Auto Healing, Auto Scaling, Software Update, Job 등의 주요 기능을 갖고 있습니다. 그 중에서 디플로이먼트에 대해 살펴보도록 하겠습니다.

쿠버네티스 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를 여러개 지정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    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
1
2
3
    # 컨트롤러 삭제 명령
    # --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으로 조정하여 배포를 마침