Overview
오늘은 ArgoCD에 대해 공부해보려고 한다.
ArgoCD란?
Argo CD 는 Kubernetes를 위한 선언적 GitOps 지속적 배포 도구이다.
그렇다면 왜 ArgoCD를 사용해야 할까?
애플리케이션 정의, 구성 및 환경은 선언적이고 버전이 제어되어야 한다.
애플리케이션 배포 및 수명 주기 관리는 자동화되고 감사 가능하며 이해하기 쉬워야 한다.
GitOps는 무엇일까?
GitOps는 2017년에 위브웍스(Weaveworks Inc.)에서 처음 사용한 용어로 프로젝트에 DevOps의 실천 방법 중 하나이다.
클라우드 네이티브 애플리케이션을 대상으로 한 지속적 배포(Continuous Deployment)에 초점을 두고 있다.
단어로 알 수 있듯이 애플리케이션의 배포와 운영에 관련된 모든 요소들을 코드화하여 Git에서 관리(Operation) 한다는 것을 뜻한다.
ArgoCD 설치
ArgoCD는 Helm, Kubectl, Kustomize와 같이 다양한 방법으로 설치가 가능하다.
ArgoCD stable 버전을 설치하는 방법은 간단하다. kubectl로 설치하도록 하겠다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
ArgoCD HA 버전 구축방법
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/ha/install.yaml
ArgoCD CLI 설치 방법은 다음과 같다.
curl -sL -o argocd https://github.com/argoproj/argo-cd/releases/download/v2.7.1/argocd-linux-amd64
chmod +x argocd
sudo mv argocd /usr/local/bin/
ArgoCD 설치를 완료한 후 NodePort 또는 로드벨런서를 사용해 서비스를 외부로 오픈시켜준다.
MetalLB와 Ingress-nginx를 사용해서 ArgoCD 서비스를 외부로 오픈시켜준다.
2023.05.03 - [Container Orchestration/Kubernetes] - MetalLB란?
k get cm -n metallb-system -o yaml
apiVersion: v1
items:
- apiVersion: v1
data:
config: |
address-pools:
- name: somaz-ip-range
protocol: layer2
addresses:
- 10.10.100.26 - 10.10.100.26
$ k get po,svc -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-admission-patch-s6zwc 0/1 Completed 2 378d
pod/ingress-nginx-controller-75f58fbf6b-qph5z 1/1 Running 5 (110d ago) 378d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.233.10.100 10.10.100.26 80:31500/TCP,443:31158/TCP 378d
service/ingress-nginx-controller-admission ClusterIP 10.233.39.214 <none> 443/TCP 378d
AWS Route53에 도메인을 CNAME으로 등록하였고 라우팅 대상은 MetalLB의 DNS로 지정하였다.
다음과 같이 Ingress를 작성해준다.
ArgoCD 공식 사이트에 내용은 설명되어 있다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ilb-argocd
namespace: argocd
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: argocd.somaz.link
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
name: https
tls:
- hosts:
- argocd.somaz.link
secretName: argocd-tls-gcp
설치된 리소스를 확인해준다.
$ k get po,svc,ingress,sts -n argocd
NAME READY STATUS RESTARTS AGE
pod/argocd-application-controller-0 1/1 Running 0 56s
pod/argocd-applicationset-controller-6c88cfbf55-dstbz 1/1 Running 0 57s
pod/argocd-dex-server-7d94775cbf-q98sd 1/1 Running 0 57s
pod/argocd-notifications-controller-56cd68f646-fpcj7 1/1 Running 0 57s
pod/argocd-redis-74f98b85f-7ztmz 1/1 Running 0 56s
pod/argocd-repo-server-fdbf7cb4-5dfnv 1/1 Running 0 56s
pod/argocd-server-675cbc776c-d5lfg 1/1 Running 0 56s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argocd-applicationset-controller ClusterIP 10.233.38.250 <none> 7000/TCP,8080/TCP 57s
service/argocd-dex-server ClusterIP 10.233.9.21 <none> 5556/TCP,5557/TCP,5558/TCP 57s
service/argocd-metrics ClusterIP 10.233.28.14 <none> 8082/TCP 57s
service/argocd-notifications-controller-metrics ClusterIP 10.233.51.0 <none> 9001/TCP 57s
service/argocd-redis ClusterIP 10.233.22.211 <none> 6379/TCP 57s
service/argocd-repo-server ClusterIP 10.233.18.44 <none> 8081/TCP,8084/TCP 57s
service/argocd-server ClusterIP 10.233.25.36 <none> 80/TCP,443/TCP 57s
service/argocd-server-metrics ClusterIP 10.233.15.122 <none> 8083/TCP 57s
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress.networking.k8s.io/ilb-arogcd <none> argocd.somaz.link 10.10.100.22 80 49s
NAME READY AGE
statefulset.apps/argocd-application-controller 1/1 56s
초기 패스워드를 확인해준다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
WsRuJgZjc-gXYt7M
Reference
https://argo-cd.readthedocs.io/en/stable/
https://picluster.ricsanfre.com/docs/argocd/
https://www.devkuma.com/docs/git-ops/
'IaC > CI CD Tool' 카테고리의 다른 글
2. Github Action (With Syntax) (0) | 2023.05.22 |
---|---|
1. Github Action이란? (0) | 2023.05.19 |
3. GitLab이란? / GitLab CI/CD (0) | 2023.04.24 |
2. GitLab이란? / GitLab Runner 개념 및 설치 (0) | 2023.04.23 |
1. GitLab이란? / 개념 및 설치 (0) | 2023.04.20 |