GemTD 2023. 11. 3. 04:54

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로 접속을하고 확인한 암호로 접속한다.