CentOS Stream 10: Deploy Prometheus
Install and configure Prometheus for monitoring and alerting in a Kubernetes cluster on CentOS Stream 10.
Deploy Prometheus to monitor metrics in Kubernetes Cluster.
This example is based on the environment like follows.
+----------------------+ +----------------------+
| [ ctrl.srv.world ] | | [ dlp.srv.world ] |
| Manager Node | | Control Plane |
+-----------+----------+ +-----------+----------+
eth0|10.0.0.25 eth0|10.0.0.30
| |
------------+--------------------------+-----------
| |
eth0|10.0.0.51 eth0|10.0.0.52
+-----------+----------+ +-----------+----------+
| [ node01.srv.world ] | | [ node02.srv.world ] |
| Worker Node#1 | | Worker Node#2 |
+----------------------+ +----------------------+
Step 1
Persistent storage is needed for Prometheus.
On this example, configure [nfs.srv.world:/home/nfsshare] directory on NFS server
as external storage, and also configure dynamic volume provisioning with NFS plugin
like the example [1], [2], [3] of here.
Step 2
Install Prometheus chart with Helm.
output config and change some settings
[cent@ctrl ~]$ helm inspect values bitnami/kube-prometheus > prometheus.yaml
[cent@ctrl ~]$ vi prometheus.yaml
.....
.....
<span class="color2">line 21 : specify [storageClass] to use</span>
defaultStorageClass: "<span class="color1">nfs-client</span>"
.....
.....
.....
<span class="color2">line 1304 : specify [storageClass] to use</span>
storageClass: "<span class="color1">nfs-client</span>"
.....
.....
.....
<span class="color2">line 2389 : specify [storageClass] to use</span>
storageClass: "<span class="color1">nfs-client</span>"
create a namespace for Prometheus
[cent@ctrl ~]$ kubectl create namespace monitoring
namespace/monitoring created
[cent@ctrl ~]$ helm install prometheus --namespace monitoring -f prometheus.yaml bitnami/kube-prometheus
NAME: prometheus
LAST DEPLOYED: Tue May 20 13:40:25 2025
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: kube-prometheus
CHART VERSION: 11.1.13
APP VERSION: 0.82.2
Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami for more information.
** Please be patient while the chart is being deployed **
Watch the Prometheus Operator Deployment status using the command:
kubectl get deploy -w --namespace monitoring -l app.kubernetes.io/name=kube-prometheus-operator,app.kubernetes.io/instance=prometheus
Watch the Prometheus StatefulSet status using the command:
kubectl get sts -w --namespace monitoring -l app.kubernetes.io/name=kube-prometheus-prometheus,app.kubernetes.io/instance=prometheus
Prometheus can be accessed via port "9090" on the following DNS name from within your cluster:
prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local
To access Prometheus from outside the cluster execute the following commands:
echo "Prometheus URL: http://127.0.0.1:9090/"
kubectl port-forward --namespace monitoring svc/prometheus-kube-prometheus-prometheus 9090:9090
Watch the Alertmanager StatefulSet status using the command:
kubectl get sts -w --namespace monitoring -l app.kubernetes.io/name=kube-prometheus-alertmanager,app.kubernetes.io/instance=prometheus
Alertmanager can be accessed via port "9093" on the following DNS name from within your cluster:
prometheus-kube-prometheus-alertmanager.monitoring.svc.cluster.local
To access Alertmanager from outside the cluster execute the following commands:
echo "Alertmanager URL: http://127.0.0.1:9093/"
kubectl port-forward --namespace monitoring svc/prometheus-kube-prometheus-alertmanager 9093:9093
WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
- alertmanager.resources
- blackboxExporter.resources
- operator.resources
- prometheus.resources
- prometheus.thanos.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
[cent@ctrl ~]$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 67s
prometheus-kube-prometheus-blackbox-exporter-d9df9d45f-pw9qj 1/1 Running 0 87s
prometheus-kube-prometheus-operator-6bb87f9755-99fz8 1/1 Running 0 87s
prometheus-kube-state-metrics-58bc46b9d6-2f89h 1/1 Running 0 87s
prometheus-node-exporter-8rd7s 1/1 Running 0 87s
prometheus-node-exporter-kklbh 1/1 Running 0 87s
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 67s
if access from outside of cluster, set port-forwarding
[cent@ctrl ~]$ kubectl port-forward -n monitoring service/prometheus-kube-prometheus-prometheus --address 0.0.0.0 9090:9090 &
Step 3
If you deploy Grafana, too, It's possible like follows.
output config and change some settings
[cent@ctrl ~]$ helm inspect values bitnami/grafana > grafana.yaml
[cent@ctrl ~]$ vi grafana.yaml
<span class="color2"># line 630 : change to your [storageClass]</span>
persistence:
enabled: true
## If defined, storageClassName: <storageClass>
## If set to "-", storageClassName: "", which disables dynamic provisioning
## If undefined (the default) or set to null, no storageClassName spec is
## set, choosing the default provisioner. (gp2 on AWS, standard on
## GKE, AWS & OpenStack)
##
storageClass: "<span class="color1">nfs-client</span>"
[cent@ctrl ~]$ helm install grafana --namespace monitoring -f grafana.yaml bitnami/grafana
NAME: grafana
LAST DEPLOYED: Tue May 20 13:43:14 2025
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
CHART NAME: grafana
CHART VERSION: 12.0.3
APP VERSION: 12.0.0
Did you know there are enterprise versions of the Bitnami catalog? For enhanced secure software supply chain features, unlimited pulls from Docker, LTS support, or application customization, see Bitnami Premium or Tanzu Application Catalog. See https://www.arrow.com/globalecs/na/vendors/bitnami for more information.
** Please be patient while the chart is being deployed **
1. Get the application URL by running these commands:
echo "Browse to http://127.0.0.1:8080"
kubectl port-forward svc/grafana 8080:3000 &
2. Get the admin credentials:
echo "User: admin"
echo "Password: $(kubectl get secret grafana-admin --namespace monitoring -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"
# Note: Do not include grafana.validateValues.database here. See https://github.com/bitnami/charts/issues/20629
WARNING: There are "resources" sections in the chart not set. Using "resourcesPreset" is not recommended for production. For production installations, please set the following values according to your workload needs:
- grafana.resources
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
[cent@ctrl ~]$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-prometheus-kube-prometheus-alertmanager-0 2/2 Running 0 3m45s
grafana-7f668b5786-9rmrr 1/1 Running 0 77s
prometheus-kube-prometheus-blackbox-exporter-d9df9d45f-pw9qj 1/1 Running 0 4m5s
prometheus-kube-prometheus-operator-6bb87f9755-99fz8 1/1 Running 0 4m5s
prometheus-kube-state-metrics-58bc46b9d6-2f89h 1/1 Running 0 4m5s
prometheus-node-exporter-8rd7s 1/1 Running 0 4m5s
prometheus-node-exporter-kklbh 1/1 Running 0 4m5s
prometheus-prometheus-kube-prometheus-prometheus-0 2/2 Running 0 3m45s
if access from outside of cluster, set port-forwarding
[cent@ctrl ~]$ kubectl port-forward -n monitoring service/grafana --address 0.0.0.0 3000:3000 &
Step 4
If you access to Prometheus UI from a Host in cluster, access to the URL below with an Web browser.
=> http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local
If you set port-forwarding, access to the URL below on a client computer in your local network.
=> http://(Manager Node Hostname or IP address):(setting port)/
That's OK if following Prometheus UI is displayed.
Step 5
If you access to Grafana from a Host in cluster, access to the URL below with an Web browser.
=> http://grafana.monitoring.svc.cluster.local
If you set port-forwarding, access to the URL below on a client computer in your local network.
=> http://(Manager Node Hostname or IP address):(setting port)/
That's OK if following Grafana UI is displayed.
For [admin] password, it's possible to confirm with the command below.
=> echo "Password: $(kubectl get secret grafana-admin --namespace monitoring -o jsonpath="{.data.GF_SECURITY_ADMIN_PASSWORD}" | base64 -d)"