[英]Use Prometheus operator with DB volume for k8s
我们正在尝试使用 Grafana 和 Prometheus Operator 监控 K8S。 大多数指标都按预期工作,我能够看到具有正确值的仪表板,我们的系统包含 10 个节点,总共 500 个 pod。 现在,当我重新启动 Prometheus 时,所有数据都被删除了。 我想把它保存两周。
我的问题是,如何定义 Prometheus 卷以将数据保留两周或 100GB DB。
我发现了以下内容(我们使用Prometheus运算符):
https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md
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
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
我们有文件系统 (nfs),上面的存储配置不起作用,我的问题是:
nfs
部分下配置下面的volume
、 server
、 path
? 我应该在哪里找到这个/path/to/prom/db
? 我该如何参考? 我应该以某种方式创建它,还是只提供路径?我们在系统中配置了 NFS。
由于我对pvc
和pv
没有深入的了解,因此我创建了以下内容(不确定这些值,我的服务器是什么以及我应该提供什么路径)...
server: myServer
path: "/path/to/prom/db"
我应该在那里放什么以及如何让我的 Prometheus (即我在问题中提供的配置)使用它?
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"
除了nfs
,是否还有其他持久性卷可以用于我的用例? 请指教如何。
我最近开始使用操作符图表,
并设法在不定义 pv 和 pvc 的情况下添加持久性。
在新的图表配置上添加持久性比您描述的要容易得多,只需编辑 prometheus.prometheusSpec 下的文件 /helm/vector-chart/prometheus-operator-chart/ values.yaml :
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: prometheus
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
selector: {}
并添加这个 /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"
这将自动为您创建pv和pvc ,它将在 aws 中创建一个 ebs,它将存储您的所有数据。
您必须对持久数据使用持久卷和卷声明(PV 和 PVC)。 您可以参考“https://kubernetes.io/docs/concepts/storage/persistent-volumes/ ”必须仔细查看上面url中的配置,回收策略,访问模式,存储类型。
要确定何时删除旧数据,请使用此开关--storage.tsdb.retention
例如--storage.tsdb.retention='7d'
(默认情况下,Prometheus 保留数据 15 天)。
要完全删除数据,请使用此 API 调用:
$ curl -X POST -g 'http://<your_host>:9090/api/v1/admin/tsdb/<your_index>'
编辑
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
...
参考下面的代码。 在 configmap 中将 storage-retention 定义为 7d 或所需的保留天数,并将其作为 env 变量加载到容器中,如下所示
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
您可能需要在 prometheus 操作员文件中调整这些设置
提供有关我收集的信息的见解,因为我们刚刚开始设置 kube-prometheus 操作符并遇到默认设置的存储问题。
使用 helm show values 命令创建自定义 values.yaml,如下所示,使用默认值。
helm show values prometheus-com/kube-prometheus-stack -n monitoring > custom-values.yaml
然后开始更新 prometheus、alertmanager 和 grafana 部分以覆盖默认设置或添加自定义名称等...
谈到存储选项,我在文档中看到以下内容来定义自定义存储类或 PV/PVC(如果没有默认 SC 或其他原因)。
这里还有一个很好的例子,用于对所有 3 个 pod 使用存储类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.