Devops Tutorial


개요


이전 실습EKS, Kubernetes를 마쳤다면 이번엔 ArgoCD, Prometheus, Granfanaf를 연동해 서비스 배포, 모니터링 파이프라인을 구축해보자


What is ArgoCD

What is Prometheus

What is ArgoCD



ArgoCD 연동

ArgoCD CLI 설치

https://argoproj.github.io/argo-cd/cli_installation/

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

This will create a new namespace, argocd, where Argo CD services and application resources will live.




ArgoCD 설치

https://argoproj.github.io/argo-cd/getting_started/




ArgoCD Server 접속

URL을 통해 ArgoCD에 접근하기 위해서는 ArgoCD API server를 외부에 노출시켜야하므로 argocd-server의 service type 을 LoadBalancer 로 바꿔야 한다.


LB Endpoint를 노출 하더라도 도메인 등록 시간이 소요 되므로 브라우저를 통한 접근이 가능하기 까지는 약 5분 소요.


linux CLI

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'



Window CLI (escape 문자 추가)

kubectl patch svc argocd-server -n argocd -p '{\"spec\": {\"type\": \"LoadBalancer\"}}'



오류 수정

alt text


처음에 kubectl 사용 가이드를 그대로 따라 했지만 오류가 발생.

Window CLI, powershell 환경에서는 escape character을 추가해야 함.




Check the LB Endpoint


kubectl get -n argocd svc argocd-server    
NAME            TYPE           CLUSTER-IP       EXTERNAL-IP                                                                    PORT(S)                      AGE
argocd-server   LoadBalancer   10.100.160.242   a1521dde2ec11asdg7fb04632sdda8-1608723687.ap-northeast-2.elb.amazonaws.com   80:32511/TCP,443:31088/TCP   21m




ArgoCD Login


EXTERNAL-IP를 통해 ArgoCD 접근


default Username : admin


Get Password


  1. linux CLI : https://argoproj.github.io/argo-cd/getting_started/#4-login-using-the-cli

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d


Output을 바로 Password로 사용


  1. Window CLI

위 리눅스 커맨드 경우 base64 인코딩값을 디코딩 후 Output으로 Password를 전달했지만 Window CLI에서는 작동하지 않는다.

best way는 아니지만 저자는 직접 base64 디코딩을 통해 암호를 확인했다.



kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}"


Output은 아직 base64 디코딩 이전 상태

https://www.base64decode.org 접속 후 Output을 직접 decoding 후 Password로 사용


alt text




ArgoCD를 통해 모니터링 App(Prometheus, Grafana) 배포


Prometheus

웹 콘솔에 접속후 + New App 클릭하여 신규 애플리케이션(Prometheus) 생성


  • GENERAL
  • Application Name: prometheus
  • Project: default
  • Sync Policy: Manual
  • SOURCE
  • Repo URL: https://prometheus-community.github.io/helm-charts HELM
  • Chart: prometheus 13.6.0
  • DESTINATION
  • Cluster URL: https://kubernetes.default.svc
  • Namespace: default


Create

화면을 새로고침 하면 앱이 하나 등록 됨.

Sync 정책을 Manual 로 하였기 때문에 초기에 OutOfSync 상태는 정상.


SYNC

레포지토리 URL이 문제 없다면 sync가 완료 및 아래와 같이 확인 가능


alt text



Prometheus의 ClusterIP 확인 (Dashboard 구성에 필요)


kubectl get svc prometheus-server
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
prometheus-server   ClusterIP   10.100.160.196   <none>        80/TCP    4m35s




Granfana

웹 콘솔에 접속후 + New App 클릭하여 신규 애플리케이션(Granfana) 생성


  • GENERAL
  • Application Name: Granfana
  • Project: default
  • Sync Policy: Manual
  • SOURCE
  • Repo URL: https://grafana.github.io/helm-charts HELM
  • Chart: granfana 6.6.2
  • DESTINATION
  • Cluster URL: https://kubernetes.default.svc
  • Namespace: default


아래 HELM 변수값 탭에서 service.type 검색 후 값을 LoadBalancer 로 변경


alt text



CreateSYNC 수행 후 admin password 조회


kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo


Endpoint 확인을 위해 ArgoCD 화면에서 Grafana 선택 후 상세페이지 Service(화면에서는 svc grafana)의 Hostnames 항목에 앱에 접속 가능한 LB URL이 생성 되었는지 확인


alt text


생성 되었다면 url을 통해 접속




Monitoring Dashboard 구성


  1. 왼쪽 텝 Configuration 에서 Data Sources 선택
  2. Prometheus Cluster IP를 HTTP URL로 지정


alt text


  1. SAVE & TEST 하여 Data Source 등록
  2. 왼쪽 텝에서 + 선택, Import -> Upload Json File: kubernetes-cluster-prometheus_rev1.json 업로드
  3. Options - prometheus: Promethesus


위 그림처럼 리소스에 대한 모니터링 대쉬보드가 나타났다면 실습 성공!