2.9. 配置持久性存储
如果使用持久性存储运行集群监控,您的指标将保存在持久性卷(PV)中,并可在 Pod 重新启动或重新创建后保留。如果您需要预防指标或警报数据丢失,这是理想方案。在生产环境中,强烈建议配置持久性存储。由于 IO 需求很高,使用本地存储颇有优势。
2.9.1. 持久性存储的先决条件
- 分配充足的专用本地持久性存储,以确保磁盘不会被填满。您需要的存储量取决于 Pod 的数目。
- 确保持久性卷 (PV) 已准备好以供持久性卷声明 (PVC) 使用,每个副本一个 PV。因为 Prometheus 和 Alertmanager 有两个副本,所以您需要四个 PV 来支持整个监控堆栈。PV 可从 Local Storage Operator 获得,但如果您启用了动态置备存储,则不会使用它。
在配置持久性卷时,使用
Filesystem
作为volumeMode
参数的存储类型值。注意如果将本地卷用于持久性存储,请不要使用原始块卷,这在
LocalVolume
对象中的volumeMode: block
描述。Prometheus 无法使用原始块卷。重要Prometheus 不支持兼容 POSIX 的文件系统。例如,一些 NFS 文件系统实现不兼容 POSIX。如果要使用 NFS 文件系统进行存储,请验证与其 NFS 实现完全兼容 POSIX 的供应商。
2.9.2. 配置本地持久性卷声明
要让监控组件使用持久性卷 (PV),您必须配置持久性卷声明 (PVC)。
先决条件
如果要配置 OpenShift Container Platform 核心监控组件:
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
您已创建
cluster-monitoring-config
ConfigMap
对象。
-
您可以使用具有
如果您要配置用于监控用户定义的项目的组件:
-
您可以使用具有
cluster-admin
角色的用户访问集群,也可以使用在openshift-user-workload-monitoring
项目中具有user-workload-monitoring-config-edit
角色的用户访问集群。 -
您已创建了
user-workload-monitoring-config
ConfigMap
对象。
-
您可以使用具有
-
已安装 OpenShift CLI(
oc
)。
流程
编辑
ConfigMap
对象:为监控 OpenShift Container Platform 核心项目的组件配置 PVC:
编辑
openshift-monitoring
项目中的cluster-monitoring-config
ConfigMap
对象:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
将组件的 PVC 配置添加到
data/config.yaml
下:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | <component>: volumeClaimTemplate: spec: storageClassName: <storage_class> resources: requests: storage: <amount_of_storage>
如需有关如何指定
volumeClaimTemplate
的信息,请参阅 Kubernetes 文档中与 PersistentVolumeClaim 相关的内容。以下示例配置了一个 PVC 来声明用于监控 OpenShift Container Platform 核心组件的 Prometheus 实例的本地持久性存储:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 40Gi
在上例中,由 Local Storage Operator 创建的存储类称为
local-storage
。以下示例配置了一个 PVC 来声明用于 Alertmanager 的本地持久性存储:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 10Gi
要为监控用户定义的项目的组件配置 PVC:
在
openshift-user-workload-monitoring
项目中编辑user-workload-monitoring-config
ConfigMap
对象:$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
将组件的 PVC 配置添加到
data/config.yaml
下:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | <component>: volumeClaimTemplate: spec: storageClassName: <storage_class> resources: requests: storage: <amount_of_storage>
如需有关如何指定
volumeClaimTemplate
的信息,请参阅 Kubernetes 文档中与 PersistentVolumeClaim 相关的内容。以下示例配置了一个 PVC 来为监控用户定义的项目的 Prometheus 实例声明本地持久性存储:
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 40Gi
在上例中,由 Local Storage Operator 创建的存储类称为
local-storage
。以下示例配置了一个 PVC 来声明用于 Thanos Ruler 的本地持久性存储:
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | thanosRuler: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 10Gi
注意thanosRuler
组件的存储要求取决于要评估的规则数量以及每个规则生成的样本数量。
保存文件以使改变生效。受新配置影响的 Pod 会自动重启,并且应用新的存储配置。
注意除非集群管理员为用户定义的项目启用了监控,否则应用到
user-workload-monitoring-config
ConfigMap
的配置不会被激活。警告一旦将更改保存到监控配置映射,可能会重新部署相关项目中的 Pod 和其他资源。该项目中正在运行的监控进程也可能被重启。
2.9.3. 重新定义持久性存储卷的大小
OpenShift Container Platform 不支持重新定义 StatefulSet
资源使用的现有持久性存储卷的大小,即使底层 StorageClass
资源支持持久性卷大小。因此,即使为具有更大大小的现有持久性卷声明 (PVC) 更新 storage
字段,这个设置也不会传播到关联的持久性卷 (PV)。
但是,仍可使用手动过程重新定义 PV 的大小。如果要为监控组件(如 Prometheus、Thanos Ruler 或 Alertmanager)重新定义 PV 的大小,您可以更新配置该组件的相应配置映射。然后,修补 PVC 并删除 pod。Orphaning pod 立即重新创建 StatefulSet
资源,并使用新的 PVC 设置自动更新 pod 中挂载的卷大小。此过程中不会发生服务中断。
先决条件
-
已安装 OpenShift CLI(
oc
)。 如果要配置 OpenShift Container Platform 核心监控组件:
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
您已创建
cluster-monitoring-config
ConfigMap
对象。 - 至少有一个 PVC 用于 OpenShift Container Platform 核心监控组件。
-
您可以使用具有
如果您要配置用于监控用户定义的项目的组件:
-
您可以使用具有
cluster-admin
角色的用户访问集群,也可以使用在openshift-user-workload-monitoring
项目中具有user-workload-monitoring-config-edit
角色的用户访问集群。 -
您已创建了
user-workload-monitoring-config
ConfigMap
对象。 - 至少有一个 PVC 用于监控用户定义的项目的组件。
-
您可以使用具有
流程
编辑
ConfigMap
对象:为监控 OpenShift Container Platform 核心项目的组件重新定义 PVC 的大小:
编辑
openshift-monitoring
项目中的cluster-monitoring-config
ConfigMap
对象:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml
下为组件添加新存储大小:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | <component>: 1 volumeClaimTemplate: spec: storageClassName: <storage_class> 2 resources: requests: storage: <amount_of_storage> 3
以下示例配置了一个 PVC,它将监控 OpenShift Container Platform 核心组件的 Prometheus 实例的本地持久性存储设置为 100GB:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 100Gi
以下示例配置了一个 PVC,将 Alertmanager 的本地持久性存储设置为 40GB:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 40Gi
为监控用户定义的项目的组件调整 PVC 大小:
注意您可以调整监控用户定义的项目的 Thanos Ruler 和 Prometheus 实例的大小。
在
openshift-user-workload-monitoring
项目中编辑user-workload-monitoring-config
ConfigMap
对象:$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
在
data/config.yaml
下更新监控组件的 PVC 配置:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | <component>: 1 volumeClaimTemplate: spec: storageClassName: <storage_class> 2 resources: requests: storage: <amount_of_storage> 3
以下示例将监控用户定义的项目的 Prometheus 实例的 PVC 大小配置为 100GB:
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 100Gi
以下示例将 Thanos Ruler 的 PVC 大小设置为 20GB:
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | thanosRuler: volumeClaimTemplate: spec: storageClassName: local-storage resources: requests: storage: 20Gi
注意thanosRuler
组件的存储要求取决于要评估的规则数量以及每个规则生成的样本数量。
保存文件以使改变生效。受新配置重启影响的 Pod 会自动重启。
警告当您将更改保存到监控配置映射时,可能会重新部署相关项目中的 Pod 和其他资源。该项目中运行的监控进程也可能被重启。
使用更新的存储请求手动对每个 PVC 进行补丁。以下示例将
openshift-monitoring
命名空间中的 Prometheus 组件的存储大小调整为 100Gi:$ for p in $(oc -n openshift-monitoring get pvc -l app.kubernetes.io/name=prometheus -o jsonpath='{range .items[*]}{.metadata.name} {end}'); do \ oc -n openshift-monitoring patch pvc/${p} --patch '{"spec": {"resources": {"requests": {"storage":"100Gi"}}}}'; \ done
使用
--cascade=orphan
参数删除底层 StatefulSet:$ oc delete statefulset -l app.kubernetes.io/name=prometheus --cascade=orphan
2.9.4. 修改 Prometheus 指标数据的保留时间和大小
默认情况下,Prometheus 会自动保留 15 天的指标数据。您可以通过在 retention
字段中指定时间值来修改保留时间,以更改删除数据的时间。您还可以通过在 retentionSize
字段中指定大小值来配置可以用来保留指标数据的最大磁盘空间量。如果数据达到这个大小限制,Prometheus 会首先删除最旧的数据,直到使用的磁盘空间重新低于限制。
请注意这些数据保留设置的行为:
-
基于大小的保留策略适用于
/prometheus
目录中的所有数据块目录,包括持久性块、写入级日志(WAL)数据和 mmapped 块。 -
/wal
和/head_chunks
目录中的数据计入保留大小限制,但 Prometheus 永远不会根据基于大小或基于时间的保留策略从这些目录中清除数据。因此,如果您设置了保留大小限制,它小于为/wal
和/head_chunks
目录设置的最大容量,则表示您将系统配置为不保留/prometheus
数据目录中的任何数据块。 - 只有在 Prometheus 切断新的数据块时,才会应用基于大小的保留策略,即在 WAL 最多包含三小时数据后每两小时进行。
-
如果没有为
retention
或retentionSize
显式定义值,则保留时间默认为 15 天,并且不会设置保留大小。 -
如果
retention
和retentionSize
都定义了值,则会应用这两个值。如果任何数据块超过定义的保留时间或定义的大小限制,Prometheus 会清除这些数据块。 -
如果您为
retentionSize
定义了值,且没有定义retention
,则只应用retentionSize
值。 -
如果您没有为
retentionSize
定义值,且只为retention
定义了值,则只应用retention
值。
先决条件
如果要配置 OpenShift Container Platform 核心监控组件:
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
您已创建
cluster-monitoring-config
ConfigMap
对象。
-
您可以使用具有
如果您要配置用于监控用户定义的项目的组件:
- 集群管理员为用户定义的项目启用了监控。
-
您可以使用具有
cluster-admin
角色的用户访问集群,也可以使用在openshift-user-workload-monitoring
项目中具有user-workload-monitoring-config-edit
角色的用户访问集群。 -
您已创建了
user-workload-monitoring-config
ConfigMap
对象。
-
已安装 OpenShift CLI(
oc
)。
保存对监控配置映射的更改可能会重启监控进程,并在相关项目中重新部署 pod 和其他资源。该项目中正在运行的监控进程可能会重启。
流程
编辑
ConfigMap
对象:要修改用于监控 OpenShift Container Platform 核心项目的 Prometheus 实例的保留时间和大小:
编辑
openshift-monitoring
项目中的cluster-monitoring-config
ConfigMap
对象:$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
在
data/config.yaml
下添加保留时间和大小配置:apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: retention: <time_specification> 1 retentionSize: <size_specification> 2
以下示例为监控 OpenShift Container Platform 核心组件的 Prometheus 实例将保留时间设置为 24 小时,保留大小设为 10GB:
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: retention: 24h retentionSize: 10GB
要修改监控用户定义的项目的 Prometheus 实例的保留时间和大小 :
在
openshift-user-workload-monitoring
项目中编辑user-workload-monitoring-config
ConfigMap
对象:$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
在
data/config.yaml
下添加保留时间和大小配置:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: retention: <time_specification> 1 retentionSize: <size_specification> 2
以下示例为监控用户定义的项目的 Prometheus 实例将保留时间设置为 24 小时,保留大小设为 10GB:
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: retention: 24h retentionSize: 10GB
- 保存文件以使改变生效。受新配置重启影响的 Pod 会自动重启。
2.9.5. 修改 Thanos Ruler 指标数据的保留时间
默认情况下,对于用户定义的项目,Thanos Ruler 会在 24 小时内自动保留指标数据。您可以通过在 openshift-user-workload-monitoring
命名空间中指定 user-workload-monitoring-config
配置映射中的 time 值来修改这些数据的保留时间。
前提条件
-
已安装 OpenShift CLI(
oc
)。 - 集群管理员为用户定义的项目启用了监控。
-
您可以使用具有
cluster-admin
角色的用户访问集群,也可以使用在openshift-user-workload-monitoring
项目中具有user-workload-monitoring-config-edit
角色的用户访问集群。 -
您已创建了
user-workload-monitoring-config
ConfigMap
对象。
保存对监控配置映射的更改可能会重启监控进程,并在相关项目中重新部署 pod 和其他资源。该项目中正在运行的监控进程可能会重启。
流程
在
openshift-user-workload-monitoring
项目中编辑user-workload-monitoring-config
ConfigMap
对象:$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
将保留时间配置添加到
data/config.yaml
下:apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | thanosRuler: retention: <time_specification> 1
- 1
- 以以下格式指定保留时间:数字直接后跟
ms
(毫秒)、s
(秒)、m
(分钟)、h
(小时)、d
(天)、w
(周)或y
(年)。您还可以组合指定时间值,如1h30m15s
。默认值为24h
。
以下示例将 Thanos Ruler 数据的保留时间设置为 10 天:
apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | thanosRuler: retention: 10d
- 保存文件以使改变生效。受新配置影响的 Pod 会自动重启。