helm-charts icon indicating copy to clipboard operation
helm-charts copied to clipboard

[kube-prometheus-stack] how to use persistent volumes instead of emptyDir

Open sacoco opened this issue 1 year ago • 24 comments

Hey fellows, i would like to use persistent volumes instead of emptyDir(by default) config, does anybody how to do that? i would really appreciate an example, getting confused with pv creation and also the pvc

sacoco avatar Dec 15 '22 23:12 sacoco

Yeah I would like to know that as well please

Dragane avatar Dec 18 '22 00:12 Dragane

So I found the solution for the prometheus stack statefulset. You can either enable it in the values file prometheus.prometheusSpec.storageSpec or provide the external config file. For instance my config file looks like this:

prometheus:
  prometheusSpec:    
    storageSpec: 
     volumeClaimTemplate:
       spec:
         storageClassName: gp2
         accessModes: ["ReadWriteOnce"]
         resources:
           requests:
             storage: 50Gi

You can then reference this config file when installing or upgrading your helm chart like this helm install -f prometheus-custom-values.yaml kube-prometheus-stack kube-prometheus-stack -n monitoring

Now I still have to figure out how to enable volume for the AlertManager.

Dragane avatar Dec 18 '22 00:12 Dragane

Here is config for alertmanager volume:

alertmanager:
  alertmanagerSpec:
      storage: 
        volumeClaimTemplate:
          spec:
            storageClassName: longhorn-2
            accessModes: ["ReadWriteOnce"]
            resources:
                requests:
                  storage: 10Gi

klucsik avatar Dec 20 '22 14:12 klucsik

Thank you! I think this ticket can be marked as solved.

Dragane avatar Dec 21 '22 21:12 Dragane

Did this create a PVC for you? I can't find any in my cluster after applying the prometheusSpec..

MerzMax avatar Jan 20 '23 16:01 MerzMax

Hi I also dont see any PVC created

    storageSpec:
     volumeClaimTemplate:
       spec:
         storageClassName: ceph-block
         accessModes: ["ReadWriteOnce"]
         resources:
           requests:
             storage: 2Ti

and there is just one storageSpec: under the proper prometheusSpec:

thank you

Mihai-CMM avatar Feb 22 '23 15:02 Mihai-CMM

Hi, when trying this way I have an error: failed to provision volume with StorageClass could not create volume in EC2: UnauthorizedOperation: You are not authorized to perform this operation . Directly, when I create a PVC I don't have this error?

myrondev avatar Feb 24 '23 16:02 myrondev

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Any further update will cause the issue/pull request to no longer be considered stale. Thank you for your contributions.

stale[bot] avatar Apr 02 '23 02:04 stale[bot]

Same here, no PVC created after adding the volumeClaimTemplate spec.

davyrod avatar Apr 06 '23 22:04 davyrod

same from my side, I specify the following

prometheusSpec:
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: default
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 10Gi

and there is no pvc created after that

lverba avatar May 05 '23 10:05 lverba

Try this

      prometheus:
        prometheusSpec:
          storageSpec:
            volumeClaimTemplate:
              spec:
                storageClassName: foo
                accessModes:
                  - ReadWriteOnce
                resources:
                  requests:
                    storage: 30Gi

In my case, It works.

If you missed prometheus the higher layer of prometheusSpec, The helm chart's template will not make PVC. (prometheus.prometheusSpec.storageSpec.volumeClaimTemplate)

kimsehwan96 avatar May 05 '23 12:05 kimsehwan96

Hmm strange

I have it like this and it does not . Do you think there could be conflicting statements in the [Other configs]?

prometheus:
  enabled: true
  ................................ [Other configurations from values.yaml]
  prometheusSpec:
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: ceph-block
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 2Ti
        selector:
          matchLabels:
            app: prometheus

Mihai-CMM avatar May 10 '23 08:05 Mihai-CMM

Facing the same issue here (trying to use persistent volumes for prometheus / alertmanager)

adamatti avatar May 26 '23 12:05 adamatti

I had the same issue. Found these two issues #563 and #655 and am now good.

I'm using kube-prometheus-stack-45.29.0 helm chart. and below are relevant part of my-values

alertmanager:
  alertmanagerSpec:
    storage: 
      volumeClaimTemplate:
        metadata:
          name: data
        spec:
          storageClassName: cstor-csi-disk
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 50Gi

adding metadata name under volumeClaimTemplate: was needed for me becuase of the name too long issue/bug

      volumeClaimTemplate:
        metadata:
          name: data

kirbymark avatar May 26 '23 15:05 kirbymark

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Any further update will cause the issue/pull request to no longer be considered stale. Thank you for your contributions.

stale[bot] avatar Aug 10 '23 02:08 stale[bot]

i have a suspicion:

I saw that this solution worked only on installing a chart. If you wanted to upgrade it was ignored. i guess the prometheus operator can not handle the migration of one storage (empty dir is the default i guess) to another one and therefore ignores it, because otherwise the data would be just lost.

I do not know if there is a flag to or so to force this change but that could be the solution?

flokain avatar Aug 21 '23 14:08 flokain

Facing Same Issue

Rahulsharma0810 avatar Nov 25 '23 18:11 Rahulsharma0810

Why not made just a parameter persistent: true in alertManager/pushgateway and promserver to simplify all this part ?

throrin19 avatar Dec 06 '23 15:12 throrin19

Why not made just a parameter persistent: true in alertManager/pushgateway and promserver to simplify all this part ?

Because Storage is a complex topic and there's no one size fits all like solution (for example Storage Classes and Disk Sizes).

davemaul avatar Dec 12 '23 12:12 davemaul

This definitely looks like a bug. I tried installing 55.4.1 and the prometheus PVC would not get created no matter what I tried. I started successively taking lower releases (jumping several at a time), and it finally worked when I tried 48.5.0. So the bug was introduced somewhere between the two versions.

mschaefer-gresham avatar Dec 15 '23 14:12 mschaefer-gresham

Thank you for the hint, tried with version 55.7.1, but no pvc where created where as with version 48.5.0 it worked.

bbkz avatar Jan 13 '24 16:01 bbkz

Hello, I am also getting an error.

prometheus: prometheusSpec:
storageSpec: volumeClaimTemplate: spec: storageClassName: gp2 accessModes: ["ReadWriteOnce"] resources: requests: storage: 50Gi

alertmanager: alertmanagerSpec: storage: volumeClaimTemplate: spec: storageClassName: longhorn-2 accessModes: ["ReadWriteOnce"] resources: requests: storage: 10Gi

pods and statefulset are in pending state ..no pv, pvc pending

Rose94t avatar Jan 29 '24 07:01 Rose94t

Bunu dene

      prometheus:
        prometheusSpec:
          storageSpec:
            volumeClaimTemplate:
              spec:
                storageClassName: foo
                accessModes:
                  - ReadWriteOnce
                resources:
                  requests:
                    storage: 30Gi

Benim durumumda işe yarıyor.

prometheusEğer üst katmanını kaçırırsanız prometheusSpec, dümen haritasının şablonu PVC olmayacaktır. ( prometheus.prometheusSpec.storageSpec.volumeClaimTemplate)

I tried your yaml but it says pvc pending..it didn't work

Rose94t avatar Jan 29 '24 08:01 Rose94t

This is still in an issue in the latest version 56.16.0.

mschaefer-gresham avatar Feb 29 '24 13:02 mschaefer-gresham

To be honest, i dont see the issue! Above comments tell you how to add storage. With that, its done..

Rohmilchkaese avatar May 08 '24 15:05 Rohmilchkaese

If the PVCs are pending, they the issue belongs to your infrastructure which is not part of kube-prometheus-stack

jkroepke avatar May 09 '24 14:05 jkroepke

Creating the pv with a label

apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus-server
  labels:
    volumeIdentifier: prometheus-server
spec:
...

and using a selector in the values.yaml worked for me.

prometheus:
  prometheusSpec:
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: "csi-cephfs-sc"
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 100Gi
          selector:
            matchLabels:
              volumeIdentifier: prometheus-server

It was not neccessary with 48.5.0, but now it works fine for me.

bbkz avatar May 10 '24 08:05 bbkz

I upgraded the chart to 58.1.3 and the CRDs accordingly. It is working.

mschaefer-gresham avatar May 13 '24 10:05 mschaefer-gresham