--- title: 'Deploying Prometheus on a Kind cluster using Helm' disqus: hackmd --- Deploying Prometheus on a Kind cluster using Helm === ## Table of Contents [TOC] ## Kube-Prometheus-stack Kube-prometheus stack is a collection of Kubernetes manifests, Grafana dashboards, and Prometheus rules, this provides an easy to operate end-to-end Kubernetes cluster monitoring with Prometheus using the Prometheus Operator. Helm must be installed to use the charts [Helm installation](https://hackmd.io/cGywaGHwSJqheQpBo3NN-g#Install-helm) #### 1. **Helm Repository** Add prometheus and stable repo to local helm repository ```bash= $ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts $ helm repo add stable https://charts.helm.sh/stable $ helm repo update ``` #### 2. **Create namespace monitoring to deploy all services in that namespace.** ```bash= $ kubectl create namespace monitoring namespace/monitoring created ``` #### **3. Install kube-prometheus stack. The services will be exposed on NodePort:** a. Prometheus : 30000 b. Grafana: 31000 c. AlertManager: 32000 ```bash= #helm install [RELEASE_NAME] prometheus-community/kube-prometheus-stack $ helm install kind-prometheus prometheus-community/kube-prometheus-stack --namespace monitoring --set prometheus.service.nodePort=30000 --set prometheus.service.type=NodePort --set grafana.service.nodePort=31000 --set grafana.service.type=NodePort --set alertmanager.service.nodePort=32000 --set alertmanager.service.type=NodePort --set prometheus-node-exporter.service.nodePort=32001 --set prometheus-node-exporter.service.type=NodePort NAME: kind-prometheus LAST DEPLOYED: Sat Nov 7 01:08:37 2020 NAMESPACE: monitoring STATUS: deployed REVISION: 1 NOTES: kube-prometheus-stack has been installed. Check its status by running: kubectl --namespace monitoring get pods -l release=kind-prometheus Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator. ``` #### 4. **Validate kube-prometheus-stack has been installed.** **Step1:** Check its status by running: :::spoiler kubectl --namespace monitoring get pods -l release=kind-prometheus ```bash= $ kubectl --namespace monitoring get pods -l release=kind-prometheus NAME READY STATUS RESTARTS AGE kind-prometheus-kube-prome-operator-c745544dd-ktm9x 1/1 Running 0 80s kind-prometheus-prometheus-node-exporter-8tfbw 1/1 Running 0 80s kind-prometheus-prometheus-node-exporter-lk4sm 1/1 Running 0 80s kind-prometheus-prometheus-node-exporter-pn7kn 1/1 Running 0 80s ``` ::: **Step2:** Check all the components in the stack :::spoiler kubectl get all --namespace monitoring ```bash= $ kubectl get all --namespace monitoring NAME READY STATUS RESTARTS AGE pod/alertmanager-kind-prometheus-kube-prome-alertmanager-0 2/2 Running 0 26m pod/kind-prometheus-grafana-5ffd86dcc4-89skd 2/2 Running 0 27m pod/kind-prometheus-kube-prome-operator-c745544dd-ktm9x 1/1 Running 0 27m pod/kind-prometheus-kube-state-metrics-747b54b966-f6bz2 1/1 Running 0 27m pod/kind-prometheus-prometheus-node-exporter-8tfbw 1/1 Running 0 27m pod/kind-prometheus-prometheus-node-exporter-lk4sm 1/1 Running 0 27m pod/kind-prometheus-prometheus-node-exporter-pn7kn 1/1 Running 0 27m pod/prometheus-kind-prometheus-kube-prome-prometheus-0 2/2 Running 1 26m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 26m service/kind-prometheus-grafana NodePort 10.96.224.21 <none> 80:31000/TCP 27m service/kind-prometheus-kube-prome-alertmanager NodePort 10.96.106.224 <none> 9093:32000/TCP 27m service/kind-prometheus-kube-prome-operator ClusterIP 10.96.213.97 <none> 443/TCP 27m service/kind-prometheus-kube-prome-prometheus NodePort 10.96.239.179 <none> 9090:30000/TCP 27m service/kind-prometheus-kube-state-metrics ClusterIP 10.96.6.211 <none> 8080/TCP 27m service/kind-prometheus-prometheus-node-exporter ClusterIP 10.96.103.85 <none> 9100:32001/TCP 27m service/prometheus-operated ClusterIP None <none> 9090/TCP 26m NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/kind-prometheus-prometheus-node-exporter 3 3 3 3 3 <none> 27m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/kind-prometheus-grafana 1/1 1 1 27m deployment.apps/kind-prometheus-kube-prome-operator 1/1 1 1 27m deployment.apps/kind-prometheus-kube-state-metrics 1/1 1 1 27m NAME DESIRED CURRENT READY AGE replicaset.apps/kind-prometheus-grafana-5ffd86dcc4 1 1 1 27m replicaset.apps/kind-prometheus-kube-prome-operator-c745544dd 1 1 1 27m replicaset.apps/kind-prometheus-kube-state-metrics-747b54b966 1 1 1 27m NAME READY AGE statefulset.apps/alertmanager-kind-prometheus-kube-prome-alertmanager 1/1 26m statefulset.apps/prometheus-kind-prometheus-kube-prome-prometheus 1/1 26m ``` ::: Step 3: The dashboard can be accessed at: 1. Prometheus: http://<nodeIP>:30000/graph 2. AlertManager: http://<nodeIP>:32000/graph 3. Grafana: http://<nodeIP>:32000/graph The Grafana dashboard can be accessed by using the credentials ``` User: admin Pass: prom-operator ``` ![](https://i.imgur.com/9LyQdhg.png) The following services can also be exposed using NodePort during install using helm by specifying the NodePort * kube-prometheus-stack-operator * kube-state-metrics * prometheus-node-exporter ## Appendix and FAQ [Prometheus Helm Charts](https://github.com/prometheus-community/helm-charts) ### Pre-requisites: [Setting up kind cluster](https://hackmd.io/9Q6dhBmaT6OuQzcxcUNxsg) :::info **Find this document incomplete?** Leave a comment! ::: ###### tags: `Templates` `Documentation`