CloudNet@ 팀의 가시다님께서 Leading 하시는 PKOS 2기 Study 내용 요약
해당 Kubernetes Study 는 '24단계 실습으로 정복하는 쿠버네티스' 책을 기반으로 진행 중입니다.
이번 포스팅에서는 ArgoCD 를 설치하고 실행하는 방법에 대해 알아보겠습니다.
1. ArgoCD
쿠버네티스 GitOps 환경에서 지속적인 배포를 위한 오픈소스 도구
기본적인 GitOps 아키텍처는 다음과 같습니다.
예전에 구축했던 GitOps 아키텍처인데, 현재 Anchore는 Harbor 의 Trivy 로 대체하였습니다.
GitOps 아키텍처의 흐름
- 소스코드 수정 및 Git Push
- Jenkins 등 빌드 도구에서 코드 변경 감지 및 Image Build
- 빌드된 이미지를 Harbor 등의 Image Registry 에 저장
- 빌드 도구에서 ArgoCD 가 바라보는 yaml 파일의 Image Tag 정보 변경
- yaml 파일의 변화를 감지한 ArgoCD가 해당 이미지를 Pull 해서 쿠버네티스에 새로 배포
2. ArgoCD 설치
해당 포스팅에서는 ArgoCD 를 Helm Chart로 설치할 예정입니다.
설치할 helm chart 링크는 아래와 같습니다.
2.1. 사전 준비
- Helm 설치
- Kubernetes by kops
- Personal Domain
- GitLab 설치
2.2. Helm Repo Add & Config
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update
2.3. ArgoCD 설치
kubectl create ns argocd
helm install argocd argo/argo-cd --set server.service.type=LoadBalancer --namespace argocd --version 5.19.14
ArgoCD 접속 URL 확인
kubectl get svc -n argocd
ArgoCD 최초 비밀번호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
ID: admin
PW: <위 명령어 결과값 입력>
3. ArgoCD 활용
ArgoCD 를 활용하기 위해서는 Application & Repository 를 등록해야합니다.
Application
ArgoCD 를 통해 배포할 Application
ArgoCD 가 지속적으로 체크할 yaml 파일이 있는 저장소와 해당 파일을 지정
Repository
ArgoCD 가 배포할 Application 의 yaml 파일이 위치한 Repository
Repository 접근 권한 인증에 사용
Application 과 Repository 를 UI 에서 등록할 수도 있지만 CLI 에서 명령어를 통해 등록이 가능합니다.
CLI 를 통한 ArgoCD Repo & App 등록 방법
- ArgoCD CLI
- kubectl apply
ArgoCD cli 를 사용하면 ArgoCD 의 다양한 기능을 활용할 수 있으나,
CLI 를 설치해야되며 ArgoCD 에 로그인을 한 번 더 해야된다는 단점이 있습니다.
여기서는 kubectl 로 간단하게 배포를 해보겠습니다.
3.1. ArgoCD Repository 등록
ArgoCD 는 Repository 를 kubernetes secret 리소스로 관리합니다.
다음과 같이 Secret.yaml 파일을 생성해줍니다.
apiVersion: v1
kind: Secret
metadata:
name: <SECRET_NAME> # Secret 오브젝트 네임
namespace: argocd # Namespace 는 반드시 ArgoCD 가 배포된 Namespace 로 지정해야 됩니다.
labels:
argocd.argoproj.io/secret-type: repository
stringData:
type: git
url: https://<GIT_URL>
# https://gitlab.kimalarm.net/root/test-stg.git
username: <GIT_USER> # Git Repo ID
password: <GIT_USER_PASSWORD> # Git Repo PW
해당 secret 을 배포합니다.
kubectl apply -f pkos-secret.yaml
이후 ArgoCD 에서 확인할 수 있습니다.
3.2. GitLab Repository 에 Application 업로드
ArgoCD 로 배포할 Application 을 GitLab 에 Push 해봅시다.
간단한 RabbitMQ 애플리케이션을 배포할 예정입니다.
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm fetch bitnami/rabbitmq --untar --version 11.10.3
별도로 지정한 yaml 파일을 배포하기 위해 새로운 yaml 파일을 생성합니다.
cd rabbitmq
cp values.yaml my-values.yaml
이후 GitLab 에 Push 합니다.
git add . & git commit -m "Add Rabbit MQ"
git push -u origin main
3.3. ArgoCD Application 등록
ArgoCD 는 Application 를 별도의 kubernetes crd 리소스로 관리합니다.
다음과 같이 app.yaml 파일을 작성해줍니다.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: rabbitmq-helm
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: https://gitlab.kimalarm.net/root/test-stg.git # values.yaml 이 위치한 Repo
path: rabbitmq
targetRevision: HEAD
helm:
valueFiles:
- my-values.yaml
destination:
namespace: rabbitmq
server: https://kubernetes.default.svc
syncPolicy:
# automated: # Auto Sync 옵션
# prune: true
# selfHeal: true
syncOptions:
- CreateNamespace=true
Application 등록
kubectl apply -f rabbitmq-helm-argo-application.yml
현재, AutoSync 가 비활성화 되어 있기 때문에 수동으로 Sync 를 눌러줘야 작동합니다.