Helm을 통해서 Promethus와 Grafana를 세팅할 것이기 때문에
Helm을 세팅하지 않으셨다면, Helm세팅하기를 보시고 세팅해주세요.
먼저 Metric Server를 구성하여서 쿠버네티스에서 Metric을 확인해보도록 하겠습니다.
Metric Server를 통해 HPA나 Prometheus가 현재 쿠버네티스 Pod와 Node의 각 리소스를 체크할 수 있기 때문입니다.
먼저 명령행 JSON 처리기 jq를 설치해줍니다.
sudo yum install -y jq
이후 아래 명령어를 수행해서 Metric Server를 세팅해주세요.
DOWNLOAD_URL=$(curl -Ls "https://api.github.com/repos/kubernetes-sigs/metrics-server/releases/latest" | jq -r .tarball_url)
DOWNLOAD_VERSION=$(grep -o '[^/v]*$' <<< $DOWNLOAD_URL)
curl -Ls $DOWNLOAD_URL -o metrics-server-$DOWNLOAD_VERSION.tar.gz
mkdir metrics-server-$DOWNLOAD_VERSION
tar -xzf metrics-server-$DOWNLOAD_VERSION.tar.gz --directory metrics-server-$DOWNLOAD_VERSION --strip-components 1
kubectl apply -f metrics-server-$DOWNLOAD_VERSION/deploy/1.8+/
제대로 서버가 올라왔는지 확인해줍시다.
kubectl get deployment metrics-server -n kube-system
잘 올라왔다면, 아래 명령어를 통해 체크를 해보도록 하겠습니다.
kubectl top po
kubectl top node
자 이제 그러면 해당 Metric을 프로메테우스를 통해 수집 저장할 수 있도록 Prometheus를 세팅해주겠습니다.
저는 namespace를 prd-mornitoring로 설정하여 Prometheus와 Grafana를 모두 구성할 것입니다.
helm install stable/prometheus \
--name prometheus \
--namespace prd-mornitoring \
--set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"
위의 명령어를 수행했을 때, 아래의 EndPoint를 통해 Grafana와 매핑되도록 설정하기 때문에 기록해주세요
이제 ALB를 구성하여서 확인할 수 있도록 Type을 수정해주겠습니다.
kubectl patch svc prometheus-server -n prd-mornitoring -p '{"spec": {"type": "NodePort"}}'
kubectl get all -n prd-mornitoring
모두 Running으로 정상상태 이기 때문에 Grafana를 세팅해주겠습니다.
아래 admin 비밀번호를 꼭 바꿔서 입력해주세요
helm install stable/grafana \
--name grafana \
--namespace prd-mornitoring \
--set persistence.storageClassName="gp2" \
--set adminPassword='{password}' \
--set datasources."datasources\.yaml".apiVersion=1 \
--set datasources."datasources\.yaml".datasources[0].name=Prometheus \
--set datasources."datasources\.yaml".datasources[0].type=prometheus \
--set datasources."datasources\.yaml".datasources[0].url=http://prometheus-server.prd-mornitoring.svc.cluster.local \
--set datasources."datasources\.yaml".datasources[0].access=proxy \
--set datasources."datasources\.yaml".datasources[0].isDefault=true \
--set service.type=NodePort
자 마지막으로 Ingress를 설정해서 ALB를 생성해주고, 접속해보도록 하겠습니다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: prd-mornitoring-ingress
namespace: prd-mornitoring
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:{account-number}:certificate/{id}
alb.ingress.kubernetes.io/ssl-policy: ELBSecurityPolicy-2016-08
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80,"HTTPS": 443}]'
alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
spec:
rules:
- http:
paths:
- backend:
serviceName: ssl-redirect
servicePort: use-annotation
- host: prometheus.domain.shop
http:
paths:
- backend:
serviceName: prometheus-server
servicePort: 80
- host: grafana.domain.shop
http:
paths:
- backend:
serviceName: grafana
servicePort: 80
자 도메인으로 접속해보면 아주 잘 Metric을 수집하고 있는 것을 볼 수 있습니다.
Grafna에서 Import에 6417 / 8588 을 해주도록 하겠습니다.
6417을 입력해주시면 아래와 같이 Cluster Node를 모니터링하는 대시보드를 간단하게 불러오실 수 있습니다.
8588은 파드들에 대한 모니터링 지표이며 아래와 같이 보실 수 있습니다.
좋은 대시보드 넘버가 있다면 공유부탁드립니다.
다음 포스트에서는 ALERT 설정하는 부분을 알아보도록 하겠습니다.
'EKS > Prometheus & Grafana' 카테고리의 다른 글
Grafana - EKS Custom DashBoard 구성하기 (0) | 2020.07.25 |
---|---|
Grafana - Image Render Plugin & Slack Alert 연동 (0) | 2020.07.25 |
Prometheus - EFS Provisioner / PVC 연동 (0) | 2020.07.25 |
EKS Mornitoring - 2. AlertManager 세팅 (0) | 2020.02.10 |