쿠버네티스 Blue·Green / Canary 배포 방법

ZER0·2023년 2월 2일
0

Kubernetes

목록 보기
39/39
post-thumbnail
post-custom-banner

1. 개념

  • Blue·Green 및 Canary 배포 전략에 대한 개념은 앞서 작성한 참고
  • Blue·Green 배포 : Blue 리소스를 구성하고 Selector로 서비스와 맵핑한 상태에서 Green 리소스를 구성하고 서비스의 Selector를 Green으로 변경
  • Canary 배포 : v1과 v2 리소스를 구성하고 두 리소스를 Selector로 서비스와 맵핑한 상태에서 v2의 레플리카 개수를 점진적으로 증가시킴과 동시에 v1의 개수를 감소시키다 마지막에는 v1 리소스 삭제

2. Blue·Green 배포

  • Blue에 해당하는 nginx 웹서버 리소스 구성
    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: Deployment
    metadata:
      name: resource-blue
      namespace: default
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: resource-blue
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: resource-blue
        spec:
          containers:
          - image: nginx
            name: nginx
          restartPolicy: Always
    cs
  • 서비스 생성 및 selector를 통해 Blue 리소스와 맵핑
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apiVersion: v1
    kind: Service
    metadata:
      name: blue-green
    spec:
      ports:
      - name: "80"
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: resource-blue
      type: NodePort
    cs
  • Blue 리소스 서비스 접근 테스트
  • Green에 해당하는 아파치 웹서버 리소스 구성
    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: Deployment
    metadata:
      name: resource-green
      namespace: default
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: resource-green
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: resource-green
        spec:
          containers:
          - image: httpd
            name: httpd
          restartPolicy: Always
    cs
  • 서비스의 selector를 Green 리소스와 맵핑
  • Green 리소스 서비스 접근 테스트

3. Canary 배포

  • v1 리소스 생성
    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: Deployment
    metadata:
      name: canary-v1
      namespace: default
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: canary
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: canary
        spec:
          containers:
          - image: nginx
            name: nginx
          restartPolicy: Always
    cs
  • v2 리소스 생성
    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: Deployment
    metadata:
      name: canary-v2
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: canary
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: canary
        spec:
          containers:
          - image: httpd
            name: httpd
          restartPolicy: Always
    cs
  • 서비스 생성 및 selector를 통해 v1과 v2 리소스를 서비스에 맵핑
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-canary
    spec:
      ports:
      - name: "80"
        port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: canary
      type: NodePort
    cs
  • 서비스 접근 테스트(현재 5:1 비율)
  • v2 레플리카 증가 및 v1 레플리카 감소 및 서비스 접근 테스트(현재 1:5 비율)
  • v1 리소스 삭제

4. 참고

  1. https://www.udemy.com/course/certified-kubernetes-application-developer/
profile
Security Compliance Engineer
post-custom-banner

0개의 댓글