ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • GitOps (2) - Progressive Delivery
    카테고리 없음 2021. 2. 13. 15:20

    이전 포스트에서 살펴본 것처럼 GitOps는 Git을 Single Source of Truth 로 두고, 전체 인프라 및 워크로드를 선언적으로 코드로 정의하여 이를 기반으로 운영한다. 쿠버네티스에서는 kubectl create/applyhelm install/upgrade가 아니라 git push로 운영을 한다는 의미이다.

    실제로 GitOps 모델로 운영하기 위해서는 다음과 같은 것들이 필요하다.

    • CI 시스템이 immutable한 이미지를 푸시하는 컨테이너 레지스트리 (latest 태그 X, 깃 커밋 번호 등을 태그로 이용)
    • 워크로드를 YAML, Helm chart, Custom Resource 형식으로 정의하는 Git 레파지토리
    • 컨피그 Git 레포를 모니터링하고 클러스터 상태를 원하는 상태로 변경해줄 쿠버네티스 컨트롤러

    Git 을 기반으로 배포가 이루어지는 건 알겠는데... 이런 상황에서 조금 더 고급 배포 방식을 선택하려면?

     

    Progressive Delivery?

    Progressive Delivery (이하 PD)는 카나리 배포, 기능 플래그 (Feature flag), A/B 테스트와 같은 고급 배포 패턴을 통칭하는 단어이다. 이런 PD 기술들은 새 소프트웨어 버전이 프로덕션에 배포됐을 때 발생하는 리스크를 최소화하기 위해 개발자/SRE팀에 blast radius에 대한 보다 섬세한 제어를 할 수 있게 해준다.

    이때 기술적으로 필요한 컴포넌트에는 다음과 같은 것들이 있다.

    • 서비스 메쉬 혹은 Ingress Controllers: 트래픽 전환 및 라우팅 담당. 서비스 메쉬가 없으면 쿠버네티스의 기본 L4 네트워킹을 활용해서 블루/그린 배포 정도 가능.
      • 서비스 메쉬 예시: Istio, Linkerd, App Mesh..
      • IC 예시: NGINX, Traefik, Gloo...
    • 메트릭: Canary 배포 등에 사용되는 지표 수집 용도. HTTP 요청 성공 비율, P99 응답 속도 등. Prometheus 주로 사용.
    • Kubernetes Controller: 지표 종합 및 트래픽 제어 역할을 해줌. Argo Rollout, Weaveworks Flagger.

     

    Flagger

    Weaveworks 와 1의 연관도 없는 사람인데 솔루션들이 좋아서 계속 공부하게 된다...

    Flagger 는 이런 Progressive Delivery를 가능하게 해주는 쿠버네티스 오퍼레이터이다. Istio, LinkerD, AppMesh, NGINX, Skipper, Contour, Gloo, Traefik 등을 트래픽 라우팅 목적으로 활용하며 프로메테우스 메트릭을 통해 의사 결정을 한다. 카나리 배포를 위한 웹훅도 지원을 해서 시스템 통합 테스트, 로드 테스트 등 기타 추가 검증 역시 가능하게 한다. HTTP 요청 성공 비율, 평균 응답 소요 시간 및 파드 정상 여부 등과 같은 핵심 성능 측정 지표들을 활용하여 트래픽 제어를 할 수 있게 해준다. Flagger는 이전 포스트에서 언급한 Flux 와 함께 사용하는 GitOps 툴이되 조금 더 고급 배포가 필요한 경우에 함께 사용한다고 이해하면 된다.

     

    위에서 언급한 컴포넌트들의 동작 방식은 대략 이런 모습이다. 아래는 AWS App Mesh 와 함께 쓰는 그림인데, Istio 등 다른 서비스 메쉬를 함께 쓸 때에도 대동소이하다.

    출처: https://eks.handson.flagger.dev/profile/#create-a-github-repository

    • Kubernetes custom resources - mesh, virtual nodes, services and gateways
    • CRD controller - keeps the custom resources in sync with the App Mesh control plane
    • Admission controller - injects the Envoy sidecar and assigns pods to App Mesh virtual nodes
    • Envoy Gateway - routes traffic from outside the cluster into the mesh
    • Telemetry service - Prometheus instance that collects and stores Envoy's metrics
    • Progressive delivery operator - Flagger instance that automates canary releases on top of App Mesh
Designed by Tistory.