Argo-CD
1. Argo-CD
1.1. 정의
argo-cd는 kubernetes에서 배포 및 관리를 자동화하는 오픈소스 도구이다. 애플리케이션를 선언적으로 관리 제어한다. GitOps 방식을 지원하며, Git 리포지토리에 저장된 애플리케이션 코드와 kubernetes 리소스 정의 파일 기반으로 배포를 수행한다.
1.2. 특징
● Declarative와 GitOps 방식
○ (자동화) 배포할 애플리케이션의 상태를 Git 리포지토리에 저장하고, 이를 기반으로 배포를 자동화합니다.
○ (선언적) Declarative 방식으로 애플리케이션을 배포하므로, 인프라 및 애플리케이션 상태를 손쉽게 관리할 수 있습니다.
○ (동기화) 애플리케이션 상태를 선언적 구성의 현재 버전과 자동으로 동기화할 수 있습니다.
○ (추적성) Git 저장소를 진실의 원천으로 사용하기 때문에, 배포 과정이 감사 가능하고 재현 가능하며 롤백 가능합니다.
○ (협업강화) Git 저장소와 통합되어 있기 때문에, 개발자와 운영자가 동일한 구성 파일을 공유하고 리뷰하고 승인할 수 있습니다.
● 다양한 배포 전략
○ (배포방식) Blue/Green, Canary, Rollout 등의 전략을 쉽게 구성할 수 있습니다.
○ (유연성) 애플리케이션을 수동 또는 자동으로 배포할 수 있습니다
● 높은 수용성
○ (수용성) 수천 개의 애플리케이션 배포를 지원하며, 다수의 팀이 공유하는 대규모 Kubernetes 클러스터에서 안정적으로 동작합니다.
● 멀티 클러스터 관리
○ (확장성) 역할 기반 접근 제어(RBAC)를 통해 멀티 클러스터를 관리할 수 있습니다.
● UI 및 CLI 지원
○ (사용성) UI와 CLI를 모두 지원합니다. UI는 사용하기 쉽고 직관적이며, CLI를 사용하면 배포 과정을 스크립트로 자동화할 수 있습니다.
● 높은 속도의 배포와 편리한 운영 관리
○ (민첩성) 애플리케이션의 변경 사항을 실시간으로 감지하고 즉시 반영할 수 있습니다. 이는 지속적인 전달(CD) 파이프라인을 간소화하고 가속화합니다.
○ (가시성) 배포 문제를 시각화하고, 구성 이탈을 감지하고 복구할 수 있습니다
● 비용 절감
○ (비용) k8s의 기본 기능과 표준을 활용하여 애플리케이션을 관리합니다. 이는 별도의 인프라나 에이전트가 필요하지 않으므로 운영 비용을 줄일 수 있습니다
● 커뮤니티 활동
○ (오픈소스) 활발한 커뮤니티 활동이 진행되고 있습니다. 개발자들이 새로운 기능을 제안하고 구현하며, 지속적으로 업데이트됩니다. 또한, 다른 오픈소스 도구와의 통합도 잘 되어 있습니다.
1.3. 설치 과정
[admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ helm repo add argo https://argoproj.github.io/argo-helm [admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ helm pull argo/argo-cd [admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ tar -xzvf argo-cd-5.43.4.tgz [admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ rm -rf argo-cd-5.43.4.tgz [admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ mv argo-cd argo-cd-5.43.4 [admin@ubu22-01 ~ (kubernetes-admin@cluster.local:kube-system)]$ cd argo-cd [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:kube-system)]$ cp values.yaml my-values.yaml [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:kube-system)]$ vi my-values.yaml ... 94 # -- Mapping between IP and hostnames that will be injected as entries in the pod's hosts files 95 hostAliases: 96 - ip: 192.168.100.62 97 hostnames: 98 - gitlab.myweb.io ... 1787 # -- Server service type 1788 type: LoadBalancer [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:kube-system)]$ k create ns argocd [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:kube-system)]$ k ns argocd [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:argocd)]$ helm install argocd -f my-values.yaml . [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:argocd)]$ kubectl get pod NAME READY STATUS RESTARTS AGE argocd-application-controller-0 1/1 Running 5 (98m ago) 36s argocd-applicationset-controller-6495b69db9-ln6q2 1/1 Running 5 (98m ago) 36s argocd-dex-server-7755b95455-cvs54 1/1 Running 5 (98m ago) 2d18h argocd-notifications-controller-866f94f8cf-kpb8k 1/1 Running 5 (98m ago) 36s argocd-redis-849887cb95-jlzmv 1/1 Running 5 (98m ago) 36s argocd-repo-server-774b6454b4-lhgvt 1/1 Running 6 (98m ago) 36s argocd-server-74d595c4fd-ztbwj 1/1 Running 6 (98m ago) 36s [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:argocd)]$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR argocd-applicationset-controller ClusterIP 10.233.16.230 <none> 7000/TCP 40s app.kubernetes.io/instance=argocd,app.kubernetes.io/name=argocd-applicationset-controller argocd-dex-server ClusterIP 10.233.26.118 <none> 5556/TCP,5557/TCP 40s app.kubernetes.io/instance=argocd,app.kubernetes.io/name=argocd-dex-server argocd-redis ClusterIP 10.233.41.210 <none> 6379/TCP 40s app.kubernetes.io/instance=argocd,app.kubernetes.io/name=argocd-redis argocd-repo-server ClusterIP 10.233.21.124 <none> 8081/TCP 40s app.kubernetes.io/instance=argocd,app.kubernetes.io/name=argocd-repo-server argocd-server LoadBalancer 10.233.53.2 192.168.100.64 80:31463/TCP,443:30615/TCP 40s app.kubernetes.io/instance=argocd,app.kubernetes.io/name=argocd-server [admin@ubu22-01 ~/argo-cd (kubernetes-admin@cluster.local:argocd)]$ kubectl -n argocd get secrets argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d Sfeldsgkl ## admin 암호 |
1.4. 설치 확인
kubectl get service 명령어로 확인한 EXTERNAL-IP로 접속을하고 확인한 암호로 접속한다.