오랜만에 글을 쓴다.
그동안 Kubernetes며 AWS며 Spring이며 다양한걸 공부했다.
그 중 Kubernetes를 공부하며 ArgoCD에 대해 공부하게 되었는데 공부한 겸 글을 정리한다.
그 전에 GitOps먼저 알아본다.
GitOps는DevOps의 실천 방법 중 하나로,
애플리케이션의 배포와 운영에 관련된 모든 요소들을Git에서관리(Operation)한다는 뜻이다.
GitOps는Git Pull요청을 사용하여인프라 프로비저닝및배포를자동으로 관리한다.
Git레포지토리에는 전체 시스템 상태가 포함되어 있어 시스템 상태의 변화 추이를확인,감사할 수 있다.
ArgoCD는GitOps방식으로 관리되는Manifest(yaml)파일의 변경사항을 감시하며,현재 배포된 환경의 상태와Github Manifest 파일에 정의된 상태를 동일하게 유지하는 역할을 수행한다.
이전엔 Jenkins로 CD과정을 진행했는데 이때 SSH로 패키징된 파일을 컨테이너에 건네줬다.
ArgoCD는 CD과정을 진행하는데 Kubernetes로 배포한다고 보면 편하다.
ArgoCD는 쿠버네티스의 구성 요소를 배포하기 위해서는 Manifest (ex).yaml 파일을 구성해 실행해야 하는데 이러한 파일들은 계속해서 변경되기 때문에 지속적인 관리가 필요하다.
이를 간편하게
Git으로 관리하는 방식이GitOps이고
GitOps를 실현시키며Kubernetes에 배포하는 툴이ArgoCD이다.
kubectl create namespace argocd
curl https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml -o argo-cd.yaml
---
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/name: argocd-server
app.kubernetes.io/part-of: argocd
name: argocd-server
spec:
type: NodePort # argocd-server에 NodePort type추가
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
- name: https
port: 443
protocol: TCP
targetPort: 8080
selector:
app.kubernetes.io/name: argocd-server
---
VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
echo $VERSION
curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
kubectl apply -n argocd -f argo-cd.yaml

ArgoCD 관리자의 기본 ID는 admin 이고 PW는 아래 명령어를 통해 알 수 있다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

이로써 ArgoCD설치가 완료됐다.
다음엔 ArgoCD를 활용해보는 글을 작성해보겠다.