티스토리 뷰
목차
3. ArgoCD 개념 파악 및 배포하기 👈 here
4. ELK Stack으로 로그 모니터링 시스템 구축하기
이번 포스팅에서는 ArgoCD가 무엇인지 살펴보고 쿠버네티스에 배포한 후 app을 등록해 보는 것까지 진행해 보겠다.
ArgoCD
ArgoCD 공식 홈페이지에 가면 지속배포(CD)를 위한 GitOps 방식의 쿠버네티스 관리 툴이라고 소개한다. GitOps란 인프라 자동화를 위해 코드를 작성하여 인프라를 구성하고 코드의 변경점이 발생할 때 자동배포 등을 지원하는 것을 의미한다. 이러한 GitOps 방식의 배포관리라는 것은 서버 인프라를 테라폼코드로 작성해서 배포를 관리할 수 있듯이 ArgoCD도 코드로 작성해서 쿠버네티스 리소스 및 배포를 관리하고 추가로 UI에서 모니터링도 가능하다고 보면 되지 않을까 싶다.
정리하면 ArgoCD를 사용하면 코드로 애플리케이션을 작성하여 레포지토리에 변경점이 발생할 때마다 손쉽게 배포를 진행하거나 롤백할 수 있고 애플리케이션에 대한 상태 검사 모니터링도 가능하다.
코드를 작성하기 위해서는 Kustomize나 Helm 방식을 사용하는데 이 프로젝트에서는 Helm을 사용하였다.
설치
먼저 ArgoCD를 위치시킬 namespace를 하나 만들고 공식 제공하는 install yml파일을 사용해 설치한다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
argocd CLI를 설치한다.
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
외부에서 접근 가능하도록 LoadBalancer 타입의 Service를 생성해 준다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
생성한 서비스 정보를 확인하여 접근 URL을 취득하고 접근해 본다.
kubectl describe svc argocd-server -n argocd
초기 Username은 admin이며 비밀번호는 아래 명령어로 확인할 수 있다.
argocd admin initial-password -n argocd
로그인을 하면 아래의 화면을 확인할 수 있다.
User Info에서 비밀번호를 변경하는 것을 추천한다.
Helm Chart 작성하기
ArgoCD 설치까지 마쳤으니 이번에는 Helm Chart를 작성하여 App of Apps 패턴으로 이전 포스팅에서 띄워놓은 nginx 애플리케이션과 ArgoCD 자체를 연결해 보자.
우선 App of Apps 패턴이란, 애플리케이션 관리용의 앱을 따로 만들어 하나의 앱 하위에 자식 앱들을 두어 관리하는 구조이다. 꼭 이 구조로 해야 하는 것은 아니지만 대개 이렇게 구성한다고 공식 문서에서 소개하고 있다. (참고)
이제 앱을 코드로 정의해야 하는데 helm을 사용할 것이다.
ArgoCD에서는 아래와 같이 레포지토리를 구성한다. 이 하나의 구성을 chart라고 하며 차트를 관리한다고 말한다.
├── Chart.yaml
├── templates
│ ├── guestbook.yaml
│ ├── helm-dependency.yaml
│ ├── helm-guestbook.yaml
│ └── kustomize-guestbook.yaml
└── values.yaml
나는 앱 단위로 폴더를 구성하기 위해 아래와 같이 작성할 것이다.
.
├── apps
│ ├── Chart.yaml
│ ├── templates
│ │ └── application.yaml
│ └── values.yaml
└── nginx
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
먼저 파일 별 역할을 살펴보면,
- Chart.yaml : 차트에 대한 메타 정보를 명세하는 파일
- values.yaml : 차트에 대한 기본 환경설정 값들
- template : values 값들을 사용하여 유효한 쿠버네티스 manifest 파일들이 생성될 템플릿들의 디렉터리
apps/Chart.yaml 부터 살펴보자.
apiVersion: 0.0.1
name: apps
version: 0.0.1
앱들을 묶어주는 앱이라 기본 정보만 작성한다.
apps/templates/application.yaml을 살펴보자.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
project: default
source:
path: nginx
repoURL: https://github.com/Jyejin/build-monitoring-system
targetRevision: HEAD
kind가 Application 인 CRD 리소스를 만든다. 참고로 CRD는 어떠한 항목이 정의되어야 하는지 등을 저장하는 선언적인 메타데이터 오브젝트일 뿐이다. 해당 CRD 명세에서 source로부터 자식 앱들의 명세 위치를 찾아간다. 즉 nginx 경로의 chart를 찾아간다.!
nginx 템플릿에서는 이전 포스팅에 작성했던 명세 파일들을 위치시키면 된다.
아래 명령어에 repo url을 추가하여 실행시키면 ArgoCD의 대시보드에 앱들이 올라온 것을 확인할 수 있다.
argocd app create apps \
--dest-namespace argocd \
--dest-server https://kubernetes.default.svc \
--repo <REPO_URL> \
--path apps
nginx 앱 상세 페이지에 들어가 보면 리소스 별 상태 정보와 로그도 확인할 수 있다.!
코드나 리소스의 변경점이 생기면 아래와 같이 Out of Sync라고 알려주고 Sync 버튼을 클릭하여 배포를 진행할 수 있다.
혹시 커밋 이후에도 Out of Sync 상태가 되지 않는다면 refresh 버튼을 눌러보면 된다.
'개발계발 > Project' 카테고리의 다른 글
[kubernetes로 모니터링시스템 구축하기] 0. 프로젝트 시작 (0) | 2023.05.03 |
---|---|
[kubernetes로 모니터링시스템 구축하기] 5. Prometheus와 Grafana 사용해보기 (0) | 2023.05.02 |
[kubernetes로 모니터링시스템 구축하기] 4. ELK Stack으로 로그 모니터링 시스템 구축하기 (0) | 2023.05.02 |
[kubernetes로 모니터링시스템 구축하기] 2. 인프라 설정 및 Nginx 띄워보기 (0) | 2023.05.01 |
[kubernetes로 모니터링시스템 구축하기] 1. 쿠버네티스 구성 살펴보기 (0) | 2023.05.01 |
- Total
- Today
- Yesterday
- JWT
- fastapi
- Supervisor
- GitOps
- kubernetes
- OAuth
- bugfix
- miniproject
- ArgoCD
- async
- elasticsearch
- gradle
- numble
- jwt로그인
- grafana
- factory_boy
- NCP
- DevOps
- logstash
- Project
- promethus
- Pydantic
- coroutine
- kubectl
- kibana
- elk
- supervisord
- await
- pytest
- sns로그인
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |