오랜만에 글을 쓴다.
그동안 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를 활용해보는 글을 작성해보겠다.