Kubernetes Operator 패턴으로 구현된 Prometheus Operator 를 사용해 Prometheus 에 메트릭 정보를 적재하고 Grafana 를 사용하여 모니터링 할 수 있게 해주는 Helm Chart 를 kube-prometheus-stack 이라고 부릅니다.
이 Chart 는 쉽게 설정하여 사용할 수 있으며 기본적으로 강력한 Kubernetes 모니터링 대시보드를 가지고 있습니다.
이외에도 추가적으로 여러 소프트웨어에 대한 exporter 를 설정하는 것으로 모니터링 항목에 대한 쉬운 확장이 가능합니다.
### kube-prometheus-stack 설치
# 많은 구성 요소의 조합으로 이루어진 kube-prometheus-stack 특성 상 직접 모든 구성 요소를 설치하고 설정하기 어려우니,
# Kubernetes의 Package Manager 라고 볼 수 있는 Helm 을 통하여 한번에 설치를 하도록 하겠습니다.
# 우선 Helm 을 설치합니다
curl https://baltocdn.com/helm/signing.asc | sudo apt-key add -
sudo apt-get install apt-transport-https --yes
echo "deb https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
# 해당 Chart가 들어있는 Repository 를 추가합니다.
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# monitoring 이라는 네임스페이스를 만들어 이 안에 Prometheus Operator를 설치 해 줍니다.
kubectl create ns monitoring
# helm install <instance 명> <helm chart> -n <namespace>
helm install pro-op prometheus-community/kube-prometheus-stack -n monitoring
# 잘 Deploy 되었는지 확인합니다.
kubectl get all -n monitoring
# Prometheus Operator 의 Dashboard 인 Grafana를 외부에서 접근 할 수 있게 노출 합니다.
# 이 설정중에서 selector 의 값은 현재 동작중인 Grafana 의 Pod 명이 실행 환경마다 다르기 때문에 Metadata 에 지정한 값을 검색하여 맞는 Pod만을 서비스와 연결하기 위해 지정된 것입니다.
# 그렇기 때문에 helm 으로 설치 하였을 때 instance 값을 변경하였다면 이 곳에도 반영해야 합니다.
# ports 아래의 값은 각각 다음과 같습니다.
# - port: 클러스터 내에서 노출 할 포트
# - targetPort: 연결 될 Pod의 포트 (Grafana는 3000번 포트)
# - nodePort: 노드에서 외부에 노출 할 포트 (30000-32767 사이)
# nodePort 는 모든 노드에 대해서 적용되기 때문에 Kubernetes의 어떤 노드라도 해당 포트를 입력하면 Grafana에 접근할 수 있습니다.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Service
metadata:
name: pro-op-grafana-service
namespace: monitoring
spec:
selector:
app.kubernetes.io/instance: pro-op
app.kubernetes.io/name: grafana
ports:
- port: 3000
protocol: TCP
targetPort: 3000
nodePort: 30000
type: NodePort
EOF
# 아래 명령어로도 같은 동작이 가능하지만, nodeport를 지정 할 수 없고 자동으로 할당 됩니다.
# 이 명령은 Deployment 의 값을 참조로 생성되기 때문에 Grafana 의 Web Port 인 3000 번 뿐만이 아니라 80번 포트도 개방됩니다.
# 위의 명령을 입력하였다면 아래 명령은 넘기십시오.
kubectl expose deployment pro-op-grafana --type=NodePort --name=pro-op-grafana-service -n monitoring
# 포트 확인
kubectl get svc pro-op-grafana-service -n monitoring
# 노드 IP (Master, Worker 아무거나 가능) 로 접속 (id: admin, pw: prom-operator)
http://192.168.0.230:30000/