Study_note
[CI/CD] ArgoCD 사용하여 간단한 POD 배포 본문
ArgoCD
단일 진실의 원천(SSOT)을 기반으로 하는 쿠버네티스에서만 사용되는 CD 툴로 오직 진실(결과)이 오직 한가지의 원천(이유)에서 비롯된다는 의미로 사용되며 ArgoCD에서는 원천을 git을 기반으로 사용한다.
또한 쿠버네티스는 선언적 api를 기반으로 사용되어 모든 명령어는 Desired state로 인식되어 실행되는데
ArgoCD 또한 git에 저장되어 있는 선언형 파일들과 쿠버네티스 리소스들과 차이가 있다면 Desired state에 맞춰 쿠버네티스에 동기화 시켜준다.
즉 간단하게 쿠버네티스 상태를 git으로 관리하는 툴이다
장점으로는 위에서 말한걸 더 디테일하게 설명하면 아래와 같다
1. 선언형 작업 정의서
더 쉽게 배포할 수 있으며 문제 발생시, 쉬운 롤백 및 장애 등으로 인해 손상된 배포 환경을 자가 치유하기 유리
2. Git 기반 버전 관리
Git에 모든 배포에 관련된 정보가 정의되어 쉽게 예전 버전으로 롤백을 하거나 새로운 버전으로 업그레이드 가능
3. 변경 사항 운영 반영 자동화 (수동/자동 선택 가능)
이를 통해 human error를 줄이고 지속적 빌드/배포를 가능
4. 자가 치유 및 이상 탐지
desired state를 작성하게 되면 실제 배포 환경이 그에 맞게 유지되고 있는지 확인하며
Git 저장소의 변경 사항 등이 없는지를 체크하여 운영 환경에 반영하는 역할 가능
ArgoCD를 eks cluster 에 설치
아래 명령어로 네임스페이스 생성 및 야믈파일 출력
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
ArgoCD 는 CLI을 제공 하는데 아래를 실행하여 ArgoCD CLI 를 설치
cd ~/environment
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
sudo curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
sudo chmod +x /usr/local/bin/argocd
생성된 argocd- server에 타입을 로드벨런서로 또는 노드포트로 바꿔주고 접속 할 수 있다.
필자는 로드벨런서로 바꿔주고 접속했다.
출력된 로드벨런서 dns로 진입시 아래와 같은 이미지가 보이고 여기서 Username과 Password를 입력해야한다.
ArgoCD의 Username은 admin 이고 설정된 비밀 번호는 account의 초기 password를 kubernetes의 secret 으로 저장해 놓기 때문에 아래와 같이 password를 얻어야한다
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
제대로 로그인 된것을 확인 가능
다음으로 간단하게 서버와 파드를 배포하면 아래와 같다.
왼쪽 위에 있는 + new app 클릭 시 생성 창이 나오는데 각 값은 아래와 같다
application name : 배포할 리소스를 관리하는 단위 필자는 argo-test로 생성
(application은 쿠버네티스 CRD로서 argocd를 설치하면 자동으로 CRD가 생성)
project name : argocd가 관리하는 논리적 그룹이고 application을 관리 하기 때문에 생성한 application은 무조건 project에 속한다 (project를 따로 생성 안했다면 default로 사용)
sync policy : 동기화를 수동으로 할건지 자동으로 할건지 선택 우선 여기선 수동 선택( 자동 동기화는 다음에 제대로 설명 )
repository URL : 사용할 git 주소
revision : 동기화 종류 선택 ex) main, master, brunch 등
path : git 레포지토리 내부에 동기화 할 파일 경로
cluster URL : 쿠버네티스 클러스터 정보 (아래처럼 클러스터에서 사용하는 정보)
namespace : 클러스터 내부에 동기화할 때 사용할 네임스페이스
directory : 해당 설정은 레포지토리 경로 내부에 디렉토리도 선택 가능한 옵션인데 다음에 디테일하게 설명
현재 아래와 같이 파드와 서비스 파일이 있는 레포지토리 내부 argo-test 내부에 있다.
이제 create를 클릭하면 아래와 같이 application이 생성된것을 확인할 수 있다
하지만 동기화 설정에서 동기화를 수동으로 했기 때문에 색깔이 노란색으로 생성 되었다.
(초록색 동기황 완료, 노란색 동기화 안됨, 빨간색 에러 발생)
선택하면 현재 싱크 상태가 outofsync로 sync를 클릭하고 synchronize를 클릭하면 정상적으로 동기화 된것을 확인 할 수있다
클러스터 내부에서도 생성되었는지 확인해보면 정상적으로 application 및 pod,service가 생성된것을 확인 가능
다음 포스팅에서 자동 동기화 및 설정, 현재 싱크 상태, app health 등 설명
참조
https://sungwook-choi.gitbook.io/argocd/argo-cd-helloworld/nginx-pod-service
'CICD' 카테고리의 다른 글
[CICD] Kustomzie (0) | 2022.12.14 |
---|---|
[CI/CD] ArgoCD sync 설정 (0) | 2022.11.25 |