suyeonme

Kustomize, ArgoCD에 대해서 알아보기 본문

프로그래밍👩🏻‍💻/기타

Kustomize, ArgoCD에 대해서 알아보기

suyeonme 2024. 9. 29. 15:04

ArgoCD란?

GitOps 방식으로 어플리케이션의 상태를 관리하고 배포하는 도구로, 코드 변환에 따라 자동으로 쿠버네티스 리소스를 관리한다.

예를 들어, git commit hash 또는 git tag가 변경된 경우 자동(또는 수동)으로 이를 감지하고 배포하게 된다.

Kustomize란?

 Kubernetes 리소스를 템플릿 없이 선언적으로 관리할 수 있게 해주는 도구이다. ArgoCD와 Kustomize를 함께 사용해서 쿠버네티스 리소스 정의 파일을 렌더링하고 손쉽게 클러스터에 배포할 수 있다. 

1) Application 리소스 정의

ArgoCD가 어떤 Git 레포지토리와 브랜치를 추적하고, 어떤 Kustomize를 사용하고 어플리케이션을 어떤 네임스페이스에 배포할지 정의해야한다.

apiVersion: argoproj.io/v1alpha1
kind: Application # 어플리케이션 정의
metadata:
  name: [어플리케이션 이름]
  namespace: argocd
spec:
  project: default
  source:
    repoURL: [레포지토리 주소]
    targetRevision: HEAD
    path: [Kustomize 설정 파일이 위치한 경로]
    kustomize:
      namePrefix: [이름에 사용할 prefix]
  destination:
    server: [Kubernetes API 서버]
    namespace: [리소스가 배포될 네임스페이스]
  syncPolicy:
    automated:
      prune: true # 필요없는 리소스 제거
      selfHeal: true

2) Kustomize 설정 정의 (Kustomization.yaml)

ArgoCD가 지정된 경로에서 Kustomize로 어플리케이션 리소스를 생성하는 파일

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: [모든 리소스를 배포할 네임스페이스]

# 리소스 파일 목록
resources:
- deployment-front.yaml
- deployment-server.yaml
...

# 도커 이미지를 새버전으로 치환
images:
- name: [이미지 이름]
  newName: [이미지 이름]
  newTag: 2.0.0
  ...

3) 리소스별 설정

# Service 정의
apiVersion: v1
kind: Service
...

# Gateway 정의
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
...

# VirtualService 정의
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
...

deployment

  • 파일에 정의된대로 어플리케이션의 인스턴스를 생성한다.

Gateway

  • Istio의 리소스로, 클러스터 외부의 트래픽을 수신한다. (트래픽을 적절한 서비스로 라우팅)
  • HTTP, HTTPS, TCP 트래픽을 관리하며, 특정 port를 리스닝해서 트래픽을 적적한 서비스로 라우팅

VirtualService

  • Istio의 리소스로, 트래픽 라우팅 규칙을 정의한다.
  • Gateway와 함께 사용되며 트래픽이 클러스터 내부로 들어온 후, 어떤 서비스로 라우팅될지 결정한다.
Istio란?
MSA를 관리하고 보호하기위한 오픈소스 Service Mesh 플랫폼 마이크로 서비스간의 통신을 제어/추적/보안/인증등의 기능을 제공해서 어플리케이션의 가용성/안정성/보안을 강화한다.

Service(SVC)

  • Kubernetes 리소스로 Pod의 고정 네트워크 엔드포인트를 제공한다. (로드밸런싱, 서비스 디스커버리 지원)
Comments