web-dev-qa-db-fra.com

Utiliser l'opérateur Prometheus avec un volume DB pour k8s

nous essayons de surveiller K8S avec Grafana et Prometheus Operator
la plupart des mesures fonctionnent comme prévu et j'ai pu voir le tableau de bord avec la bonne valeur, notre système contient 10 nœuds avec 500 pods au total, maintenant quand je redémarre Prometheus, toutes les données étaient supprimé (Je veux qu'il soit stocké pendant deux semaines) Ma question est, comment puis-je définir le volume Prometheus pour conserver les données pendant deux semaines ou 100GB DB. J'ai trouvé ce qui suit (nous utilisateur Prométhée opérateur)

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md

Ceci est la configuration de l'opérateur Prometheus

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  labels:
    k8s-app: prometheus-operator
  name: prometheus-operator
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: prometheus-operator
  template:
    metadata:
      labels:
        k8s-app: prometheus-operator
    spec:
      containers:
      - args:
        - --kubelet-service=kube-system/kubelet
        - --logtostderr=true
        - --config-reloader-image=quay.io/coreos/configmap-reload:v0.0.1
        - --prometheus-config-reloader=quay.io/coreos/prometheus-config-reloader:v0.29.0
        image: quay.io/coreos/prometheus-operator:v0.29.0
        name: prometheus-operator
        ports:
        - containerPort: 8080
          name: http

Ceci est la configuration du Prométhée

    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:
      name: prometheus
      namespace: monitoring
      labels: 
        prometheus: prometheus
    spec:
      replica: 2
      serviceAccountName: prometheus
      serviceMonitorNamespaceSelector: {}
      serviceMonitorSelector:
        matchLabels:
          role: observeable
      tolerations:
      - key: "WorkGroup"
        operator: "Equal"
        value: "operator"
        effect: "NoSchedule"
      - key: "WorkGroup"
        operator: "Equal"
        value: "operator"
        effect: "NoExecute"
      resources:
        limits:
          cpu: 8000m
          memory: 24000Mi
        requests:
          cpu: 6000m
          memory: 6000Mi
     storage:
       volumeClaimTemplate:
         spec:
        selector:
          matchLabels:
            app: prometheus
        resources:
          requests:
            storage: 100Gi

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md

nous avons un système de fichiers (nfs), et la configuration de stockage ci-dessus ne fonctionne pas, ma question est:

  1. ce qui me manque ici, c'est comment configurer les volume, server, path dans ce qui suit sous la section nfs

où dois-je trouver ce "/ chemin/vers/prom/db"? comment puis-je y faire référence? dois-je le créer en quelque sorte, ou simplement fournir le chemin. nous avons configuré nfs dans notre système

  1. comment le combiner à Prométhée

Comme je n'ai pas de connaissances approfondies dans pvc et pv j'ai créé ce qui suit (je ne suis pas sûr de ces valeurs, quel est mon serveur et quel chemin dois-je fournir ...

server: myServer
path: "/path/to/prom/db"

que dois-je y mettre et comment je fais mon Prométhée (c'est-à-dire la configuration que j'ai fournie dans la question) pour l'utiliser

apiVersion: v1
kind: PersistentVolume
metadata:
  name: prometheus
  namespace: monitoring
  labels:
    app: prometheus
    prometheus: prometheus
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteOnce # required
  nfs:
    server: myServer
    path: "/path/to/prom/db"

s'il existe un autre volume de persistance autre que nfs que je peux utiliser pour mon cas d'utilisation, veuillez indiquer comment

18
Jhon D

reportez-vous au code ci-dessous. définir le stockage-rétention à 7j ou les jours de rétention requis dans une configmap et le charger en tant que variable env dans le conteneur comme indiqué ci-dessous

      containers:
      - name: prometheus
        image: image: prom/prometheus:latest
        args:
          - '--storage.tsdb.path=/prometheus'
          - '--storage.tsdb.retention=$(STORAGE_RETENTION)'
          - '--web.enable-lifecycle'
          - '--storage.tsdb.no-lockfile'
          - '--config.file=/etc/prometheus/prometheus.yml'
        ports:
        - name: web
          containerPort: 9090
        env:
        - name: STORAGE_RETENTION
          valueFrom:
            configMapKeyRef:
              name: prometheus.cfg
              key: storage-retention

vous devrez peut-être ajuster ces paramètres dans les fichiers de l'opérateur prometheus

1
P Ekambaram

Pour déterminer quand supprimer les anciennes données, utilisez ce commutateur --storage.tsdb.retention

par exemple. --storage.tsdb.retention='7d' (par défaut, Prometheus conserve les données pendant 15 jours).

Pour supprimer complètement les données, utilisez cet appel d'API:

$ curl -X POST -g 'http://<your_Host>:9090/api/v1/admin/tsdb/<your_index>'

ÉDITER

Exemple d'extrait de code Kubernetes

...
 spec:
      containers:
      - name: prometheus
        image: docker.io/prom/prometheus:v2.0.0
        args:
          - '--config.file=/etc/prometheus/prometheus.yml'
          - '--storage.tsdb.retention=7d'
        ports:
        - name: web
containerPort: 9090
...
1
matson kepson

vous devez utiliser le volume persistant et la revendication de volume (PV et PVC) pour les données persistantes. Vous pouvez vous référer " https://kubernetes.io/docs/concepts/storage/persistent-volumes/ " doit voir soigneusement l'approvisionnement, la politique de récupération, le mode d'accès, le type de stockage dans l'URL ci-dessus.

1
hk'

J'ai commencé à travailler avec le graphique de l'opérateur récemment,

Et réussi à ajouter de la persistance sans définir pv et pvc.

Dans la nouvelle configuration de graphique, l'ajout de persistance est beaucoup plus facile que ce que vous décrivez, il suffit d'éditer le fichier /helm/vector-chart/prometheus-operator-chart/values.yaml sous prometheus.prometheusSpec:

storageSpec:
  volumeClaimTemplate:
    spec:
      storageClassName: prometheus
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
    selector: {}

Et ajoutez ce /helm/vector-chart/prometheus-operator-chart/templates/prometheus/storageClass.yaml:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: prometheus
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Retain
parameters:
  type: gp2
  zones: "ap-southeast-2a, ap-southeast-2b, ap-southeast-2c"
  encrypted: "true"

Cela vous créera automatiquement à la fois pv et un pvc qui créera un ebs dans aws qui stockera toutes vos données à l'intérieur.

1