AWS EKS를 이용해 쿠버네티스 클러스터를 구성하고 어플리케이션을 배포해보았다.
지난 실습에 이어 컨테이너 어플리케이션에 ArcoCD를 연동하고 Grafana, Prometheus로 모니터링 파이프라인을 구성하는 실습을 진행해볼 것이다.
실습은 EKS 구성을 마친 상태라고 가정하고 시작한다.
✔️ ArgoCD 연동
✔️ ArgoCD 설치
우선 ArgoCD를 연동하기 위해 ArgoCD를 설치해줘야 한다.
ArgoCD 설치에 대한 공식 문서는 다음과 같으며 지난 실습에서 kubectl 설치를 완료했기 때문에 명령줄 두줄이면 간단하게 ArgoCD를 설치할 수 있다.
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
명령줄을 이용해 ArgoCD를 설치해준다.
ArgoCD CLI를 설치하고 싶다면,
Non-HA:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.1.14/manifests/install.yaml
HA:
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.1.14/manifests/ha/install.yaml
✔️ ArgoCD 서버 접속
URL을 통해 서버에 액세스 하기 위해서는 ArgoCD API 서버를 노출시켜야 한다.
따라서 argocd-server 서비스 유형을 LoadBalancer 로 변경해준다.
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
LB Endpoint를 노출하더라도 도메인 등록 시간이 필요하므로 브라우저를 통한 접근이 가능하기 까지 약 5분 정도가 소요된다.
LB Endpoint를 체크한다.
kubectl get -n argocd svc argocd-server
외부 LB endpoint의 초기값을 확인할 수 있다.
kubectl get -n argocd svc argocd-server --output jsonpath='{.status.loadBalancer.ingress[0].hostname}'
초기 admin 패스워드를 확인한다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
다음 URL를 통해 LB Endpoint에 접속할 수 있다.
https://argoproj.github.io/argo-cd/getting_started/#4-login-using-the-cli
Username은 admin, Password는 앞서 명령줄로 얻은 정보로 로그인 해준다.
✔️ 모니터링 App(Prometheus, Grafana) 배포하기
웹 콘솔에 접속 후 + 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 15.1.1
DESTINATION
Cluster URL: https://kubernetes.default.svc
Namespace: default
Create 진행 후 화면을 새로 고침하면 앱이 하나 등록되고 Sync가 아직 되지 않은 OutOfSync 상태로 확인된다.
Sync 정책을 Manual로 했기 때문에 초기에 OutOfSync 상태는 정상이다.
Sync 수행 후 레포지토리 URL이 올바르게 되어있다면 문제 없이 sync가 완료되고 상세 페이지는 다음과 같이 확인이 가능하다.
Prometheus의 ClusterIP를 확인한다.
kubectl get svc prometheus-server
다시 웹 콘솔에서 + New App을 클릭하고 신규 어플리케이션(Grafana)을 생성한다.
GENERAL
Application Name: grafana
Project: default
Sync Policy: Manual
SOURCE
Repo URL: https://grafana.github.io/helm-charts HELM
Chart: grafana 6.21.1
DESTINATION
Cluster URL: https://kubernetes.default.svc
Namespace: default
HELM 변수값 탭에서 service.type을 검색하고 값을 LoadBalancer로 변경한다.
Create, SYNC 수행 후 정상적으로 어플리케이션이 만들어졌다면 admin password를 조회한다.
kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
Endpoint 확인을 위해 AargoCD 화면에서 Grafana를 선택후 상세페이지 Service(화면에서 svc grafana)의 Hostnames 항목에 앱에 접속 가능한 LB URL이 생성되었는지 확인 후 웹 브라우저를 통해 해당 URL로 접속해 Grafana에 접근한다.
password는 위에서 조회한 결과를 사용한다.
Configuration에서 Data Sources를 선택한 후 위에서 조회한 Prometheus Cluster IP를 HTTP URL로 지정한다.
하단의 Save & test를 클릭하여 Data Source를 등록한다.
Import 에서 Upload Json File을 통해 json 파일을 업로드한다.
리소스에 대한 모니터링 대시보드를 확인할 수 있다.
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!