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:
- ce qui me manque ici, c'est comment configurer les
volume
,server
,path
dans ce qui suit sous la sectionnfs
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
- 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
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
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
...
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.
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.