ArgoCD (w/Helm)

강다·2023년 5월 21일
0
post-thumbnail

GitOps

GitOps는 Continuous Deployment에 초점을 두고 있고, 애플리케이션의 배포와 운영에 관련된 모든 요소들(manifest파일)을 코드화하여 단일 원천(Git)에서 관리(Ops)한다는 것을 뜻한다. (최종적으로 기술서 = 운영 환경 상태)

GitOps 자체에 대한 내용은 양질의 자료가 많으므로 여기서 세세히 다루지는 않겠다. 아래는 공부하며 참고했던 포스팅 링크이다.

에스코어

GitOps란? 무엇인가?

ArgoCD쿠버네티스를 위한 GitOps도구이다. 쿠버네티스 상태를 정의한 파일을 Git에 저장하면, ArgoCD가 git 내용을 바탕으로 쿠버네티스를 배포한다. (이 때 정의 된 상태가 desired state)

Helm

helm은 쿠버네티스 패키지 매니저로, 원하는 패키지들을 k8s에 쉽게 설치할 수 있게 해준다. 쉽게 말해서 pip install, brew install 할 때의 pip, brew에 해당한다.

(k8s에서 어떤 서비스를 배포, 관리할 때는 보통 이런 방법들을 쓴다고 한다 : k8s manifest yaml, Kustomize, Helm Chart)

helm을 통해 chart를 배포하는데, 이때 chart가 다양한 k8s 리소스들을 패키징한 것이다. helm 차트는 쿠버네티스 yaml파일을 그룹화 한 템플릿과 기타 파일을 압축한 파일이다.

여기는 hub들과 비슷하게 repository가 있는데, 사용자는 해당 repo를 add하고 패키지를 install하기만 하면 된다. helm은 values.yaml과 같은 설정 파일을 통해 대부분의 것들을 커스텀하여 편리하게 설정하고 관리할 수 있다.(values.yaml에는 템플릿에 사용될 변수값들을 정의)
⇒ 복잡한 형태의 오픈소스 배포에 적합하다. (Ingress Controller, ArgoCD, Cert manager등..)

Helm 시작하기 - 1편. helm이란?

ArgoCD

ArgoCD 접속 과정은 요기 또는 공식 문서를 참고한다. 위 사진은 ArgoCD 접속시 보이는 사이드바이다. 이걸로 먼저 살펴보자면,,

Applications

  • ArgoCD가 사용하는 CRD(Custom Resource Definition) 중 하나이다. (CRD는 k8s의 표준 리소스는 아니지만, 개별적으로 정의하여 사용할 수 있는 리소스 종류들을 말한다. )
  • 어떤 k8s 리소스를 어떤 git repository에서 가져와서 어떤 k8s 클러스터에 배포(CD)할 것인 지를 정한다.
  • 즉, argocd는 application이라는 단위로 배포할 리소스를 관리하므로, ‘argocd를 사용한다 = application을 관리한다’와 같다.

Settings

  • ArgoCD를 통해 애플리케이션 및 프로젝트의 동작을 세부적으로 제어하기 위한 션
  • settings/repositories에서 repo connect 설정을 해줌
    • Repository에서 다양한 Repository에 대한 설정을 담당한다.
  • 설정가능한 AppProject 또는 Project는 Application이 속하는 그룹

이때, Private repository를 이용하기 전까지는 Repository가 필요하지 않을 것이고, default project 외의 프로젝트를 설정해서 사용하는 것이 아니면 AppProject도 필요하지 않다! (Application은 필수 생성)

App of Apps

하지만, 수동으로 application을 등록해줘야 한다거나, application 생성, 변경 마다 kubectl을 직접 수행해야하는 불편함이 있다. 이런 점을 해소하기 위해 App of Apps 패턴을 사용할 수 있다.

이런 접근법으로 다른 앱으로만 구성된 하나의 ArgoCD 앱을 선언적으로 지정할 수 있다. (+ 동일한 k8s 인프라 구축 가능)

app of apps패턴으로 구성된 application을 sync하면 여러 ArgoCD application을 생성한다. 그러면, 생성된 application들은 git에 저장된 k8s 리소스를 배포한다.

실습

예제 repo ⇒ https://github.com/argoproj/argocd-example-apps/tree/master/apps

실습 영상 ⇒ https://www.youtube.com/watch?v=1_lUTXwJExw

├── templates
│   ├── guestbook.yaml
│   ├── helm-dependency.yaml
│   ├── helm-guestbook.yaml
│   └── kustomize-guestbook.yaml
├── Chart.yaml
└── values.yaml

예제는 helm chart로 구성되어 있고, helm차트 템플릿은 argoCD application으로 되어 있다.

ArgoCD 접속은 이 과정을 참고! namespace를 만들고 나서,기존 클러스터가 없을 시, 이렇게 설치하면 된다.

# 쿠버네티스 클러스터에 argocd 설치
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

이제 ArgoCD 페이지 접속 후 실습을 진행한다!
먼저, application을 생성한다.

이제, application을 create하고, 아래 화면에서 sync 버튼을 클릭합니다.

그럼 이제, 예제의 helm 차트 템플릿에 정의 되어 있던 application이 생성된다.
이때, 위에서 application의 sync policy를 manual로 설정 해놓았기 때문에, 각 application은 out of sync로 설정 되어 있다!

각 application의 sync 버튼을 누를 수 있고, application이 sync 될 때마다 k8s 리소스가 배포된다. (Sync 해주면 healthy 상태가 됨)

터미널에서도 각각에 해당하는 namespace에서의 pods들을 볼 수 있다.


이렇게 삭제 옵션도 있는데, default인 Foreground나 Background를 선택하면 cascade 옵션을 통해 app(app-of-apps)의 모든 apps들이 app이 삭제될 때 함께 삭제된다. 둘은 propagation 방식의 차이일 뿐이고, Non-cascading도 가능하다.


참고

0개의 댓글