Skip to main content

CentOS Stream 10: Deploy Prometheus

Install and configure Prometheus for monitoring and alerting in a Kubernetes cluster on CentOS Stream 10.

May 24, 2026 8 min read
centoscentos-stream-10kubernetesk8scluster

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)"