Argo CD - 1 : 개요
Argo CD 란?
ArgoCD는 쿠버네티스에 쿠버네티스 오브젝트(Service, Deploment 등)를 배포하는 것을 도와주는 도구이다. 공식 홈페이지에서는 다음과 같이 설명한다. ▼
“Argo CD는 GitOps를 활용하여 쿠버네티스에 지속적으로 배포(delivery)하는 도구이다.”
지금 이 글을 읽는 독자라면 아래와 같은 내용을 미리 알고 있어야 이 글의 내용을 이해하는데 큰 문제가 없을 것이다. ▼
- yaml
- 쿠버네티스(kubernetes) : kubectl, manifest
- GitOps, Git
- CD(Continous delivery/deployment)
Argo CD를 사용하지 않을 때의 배포 환경
쿠버네티스 환경에서는 일반적으로(아니 모든 상황에서) 개발한 애플리케이션을 배포하기 위해 컨테이너 이미지를 생성하게 된다. 그리고 이 컨테이너 이미지를 컨테이너 레지스트리에 저장한다.
예를 들어, 여러분이 생성한 컨테이너 이미지의 이름이 다음과 같다고 가정해 보자. ▼
컨테이너 이미지 :
my/my-app:0.0.1
위의 이미지를 쿠버네티스에 배포하기 위해서 Deployment를 생성하기로 했다면 이 Deployment를 위한 manifest(매니페스트) YAML은 대략 다음과 같을 것이다. ▼
Deployment.yaml :
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
image: 'my/my-app:0.0.1'
imagePullPolicy: Always
name: my-app
위의 Deployment 매니페스트를 배포하기 위해 kubectl을 사용(물론 다른 방법들도 있다)한다. ▼
$ kubectl apply -f Deployment.yaml
애플리케이션에 변경 사항이 생긴다면 my-app 이미지의 태그는 아마 다음과 같이 변경될 것이다. ▼
my/my-app:0.0.2
우리는 변경된 태그에 맞춰서 Deployment.yaml을 바꿀 것이고 변경된 이미지로 새로운 컨테이너를 배포하기 위해 위에서 사용했던 kubectl 명령어를 사용할 것이다.
우리는 이런 작업을 개발 또는 운영에서 반복적으로 할 것이고 my-app과 같은 이미지는 한 두개가 아닐 것이다.
Argo CD를 사용할 때의 배포 환경
컨테이너 이미지는 어떤 방식으로든 생성 했을 것이다. 이 부분은 Argo CD의 영역이 아니다.
Argo CD환경(정확히는 GitOps 환경)에서는 위의 Deployment.yaml을 Git Repository에 저장한다.
Argo CD는 Git Repository에 있는 Deployment.yaml을 읽고 이 매니페스트를 쿠버네티스에 배포한다. 마치 우리가 kubectl을 사용하여 배포한 것처럼 말이다.
또한, Argo CD는 Git Repository에 있는 Deployment.yaml을 주기적(대략 3분마다)으로 읽는다. 만약, Deployment.yaml이 쿠버네티스에 배포된 Deployment와 다르다면 자동(설정에 따라 수동)으로 Git Repository의 Deployment.yaml을 쿠버네티스에 배포(이를 동기화라고 함) 한다.