Kubernetes 배포를 위한 GitHub와 ArgoCD 활용_4

duckiee·2023년 2월 20일
0

이전 포스트 까지 GitHub - ArgoCD 서비스를 연동하여 자동으로 배포되는 환경을 구축 했으며
기존 환경에서 ArgoRollout을 이용하면 블루그린 배포 및 canary 구성이 가능하다.

이번 포스트는 ArgoRollout을 통해 canary 배포를 진행한다.

GitHub 레포지토리에 업로드한 쿠버네티스 kustomize 로 Argo Rollout 구성

Argo Rollout EKS 클러스터 내 pod,서비스로 구성되며 Kustomize를 기반으로 구성할 예정이다.

로컬 PC에서 Argo CD를 설치하기 위한 디렉터리 구조 및 스크립트는 아래와 같이 구성 했다.

  1. kustomization.yaml
    깃허브 management-repository 내에 저장된 install.yaml, kustomization.yaml 파일 사용
resources:
  - https://github.com/<github 유저명>/management-repository//argo-rollout?ref=main
  1. setup.sh
  • Argo Rollout 네임스페이스 및 pod를 생성한다.
  • 로컬 PC에서 Argo Rollout 플러그인을 설치하며, 리눅스 환경으로 작성 했다.
#! /bin/bash
# Namespace 생성
kubectl create namespace argo-rollouts

# Argo Rollout 설치
kubectl kustomize ../manifests/ | kubectl apply -f -

# 리눅스에서의 Argo Rollout 플러그인 설치
curl -LO https://github.com/argoproj/argo-rollouts/releases/download/v1.4.0/kubectl-argo-rollouts-linux-amd64
chmod +x ./kubectl-argo-rollouts-linux-amd64
sudo mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

# 로컬 PC가 MAC OS라면 위의 플러그인 설치 내용을 주석 처리한다.
#brew install argoproj/tap/kubectl-argo-rollouts

# Argo Rollout Dashboard 기동 (http://localhost:3100)
kubectl argo rollouts dashboard &

아래와 같이 설치가 끝나면 로컬 PC에서 3100 포트로 접근이 가능해진다.

Argo Rollout 사용하기 위해서 쿠버네티스 환경에서 Rollout 오브젝트가 필요하여
로컬 PC에서 아래와 같이 어플리케이션 매니패스트를 작성했다.

application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: bubble-pool
  namespace: argocd
spec:
  destination:
    namespace: bubblepool
    server: https://kubernetes.default.svc
  project: default
  source:
    path: bubblepool
    repoURL: git@github.com:<github 유저명>/service-repository.git
    targetRevision: HEAD
  syncPolicy:
    automated:
      selfHeal: true
    syncOptions:
    - CreateNamespace=true

작성된 yaml 파일은 깃허브 내 service-repository 를 참조하며 아래와 같이 service.yaml, rollout.yaml 파일로 구성했다

  • rollout.yaml
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: bubble-pool
spec:
  replicas: 3
  strategy:
    canary:
      steps:
      - setWeight: 33
      - pause: {duration: 10}
      - setWeight: 66
      - pause: {duration: 10}
      - setWeight: 99
  revisionHistoryLimit: 2
  selector:
    matchLabels:
      app: bubble-pool
  template:
    metadata:
      labels:
        app: bubble-pool
    spec:
      containers:
      - name: bubble-pool
        image: argoproj/rollouts-demo:red
        ports:
        - name: http
          containerPort: 8080
          protocol: TCP
        resources:
          requests:
            memory: 32Mi
            cpu: 5m
  • service.yaml
apiVersion: v1
kind: Service
metadata:
  name: bubble-pool
spec:
  ports:
  - port: 80
    targetPort: http
    protocol: TCP
    name: http
  selector:
    app: bubble-pool
  externalTrafficPolicy: Cluster
  sessionAffinity: None
  type: LoadBalancer

application.yaml 파일을 kubectl로 배포할 경우 기존 ArgoCD 콘솔에서 새로운 어플리케이션이 확인되며, Argo Rollout 콘솔에서도 배포 상태를 확인 할 수 있다.

  • ArgoCD 콘솔

  • Argo Rollout 콘솔


Argo Rollout으로 canary 배포 상태 확인하기

GitHub 레포지토리에 저장된 롤아웃 오브젝트를 GitOps 기반으로 실행할 수 있으며
Argo Rollout이 설치된 환경에서 새로운 버전의 어플리케이션 배포 시 버전 변경 이력을 확인할 수 있다.

현재 배포한 bubble-pool 어플리케이션은 초기 버전으로 사이트에서 red-bubble을 출력하고 있으며, blue-burble을 출력하도록 버전을 업데이트하고 Argo Rollout 상에서도 해당 상태를 확인할 것이다.

앞서 설명했던 rollout.yaml 파일에서 컨테이너 이미지를 red > blue 버전으로 업데이트할 경우
canary 방식으로 배포되며, 해당 과정을 ArgoRollout으로도 확인 가능하다.

  • rollout.yaml (red>blue 버전 변경)

새로운 버전이 배포되면 ArgoRollout 콘솔에서도 적용되어 실시간으로 상태 확인이 가능하다.

burble-pool 어플리케이션은 rollout.yaml 파일에 설정된 배포정책에 따라 배포된다.

배포가 완료된 경우 burble-pool 어플리케이션에서도 확인 가능하며, ArgoRollout 콘솔에서도 적용 된다.

  • 어플리케이션
  • ArgoRollout 콘솔
profile
DevOps로 진화하기

0개의 댓글