【问题标题】:Prometheus storage on KubernetesKubernetes 上的 Prometheus 存储
【发布时间】:2018-12-04 08:49:47
【问题描述】:

Kubernetes 版本:1.10

我们在 Kubernetes 集群上运行 Prometheus(在裸机上运行)。 Kubernetes 仅使用一个 POD 运行。

问题 - 如果 POD 重新启动,Prometheus 指标不会保留。我们还尝试将 persistence volume 配置为 local。现在,如果该 pod 被重新调度到集群的任何其他节点,那么它会丢失所有先前保存在前一个节点上的数据。我们还尝试将 Prometheus 远程存储配置为读写,但是由于速度很慢,所以没有成功。是否有任何其他选项可以将数据持久保存在裸机上的 Kubernetes 上?

【问题讨论】:

  • 您是否为 prometheus 指定了 PersistenceVolumeClaim?也许你可以分享你的 PersistenceVolume 和 PersistenceVolumeClaim yamls?

标签: kubernetes prometheus kubernetes-helm data-persistence prometheus-operator


【解决方案1】:

我在裸机上配置 prometheus 时遇到了同样的问题,我就是这样解决的。

您可以为 PV 和 PVC 使用 local-storage 存储类,将您的 PVC 绑定到您的节点。因此,每当节点重启 pod 将被安排在 PVC 所在的同一节点上。我正在分享我的 json 文件:

普罗米修斯-pv.json

{
  "kind": "PersistentVolume",
  "apiVersion": "v1",
  "metadata": {
    "name": "prometheus-vol",
    "namespace": "monitoring"
    "labels": {
      "type": "local",
      "app": "harmony-vol"
    }
  },
  "spec": {
    "capacity": {
      "storage": "10Gi"
    },
    "accessModes": [
      "ReadWriteOnce"
    ],
    "storageClassName": "local-storage",
    "local": {
      "path": "/data"
    },
    "claimRef": {
      "namespace": "default",
      "name": "data-prafull-0"
    },
    "nodeAffinity": {
      "required": {
        "nodeSelectorTerms": [
          {
            "matchExpressions": [
              {
                "key": "kubernetes.io/hostname",
                "operator": "In",
                "values": [
                  "<node_name>"
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

普罗米修斯.json

{
    "apiVersion": "monitoring.coreos.com/v1",
    "kind": "Prometheus",
    "metadata": {
        "labels": {
            "prometheus": "prafull"
        },
        "name": "prafull",
        "namespace": "monitoring"
    },
    "spec": {
        "alerting": {
            "alertmanagers": [
                {
                    "name": "alertmanager-main",
                    "namespace": "monitoring",
                    "port": "web"
                }
            ]
        },
        "baseImage": "quay.io/prometheus/prometheus",
        "replicas": 2,
        "resources": {
            "requests": {
                "memory": "400Mi"
            }
        },
        "ruleSelector": {
            "matchLabels": {
                "prometheus": "prafull",
                "role": "alert-rules"
            }
        },
        "securityContext": {
            "fsGroup": 0,
            "runAsNonRoot": false,
            "runAsUser": 0
        },
        "serviceAccountName": "prometheus",
        "serviceMonitorSelector": {
            "matchExpressions": [
                {
                    "key": "k8s-app",
                    "operator": "Exists"
                }
            ]
        },
        "storage": {
            "class": "",
            "resources": {},
            "selector": {},
            "volumeClaimTemplate": {
                "metadata": {
                     "name": "data"
                },
                "spec": {
                    "accessModes": [
                         "ReadWriteOnce"
                    ],
                    "storageClassName": "local-storage",
                    "resources": {
                        "requests": {
                            "storage": "10Gi"
                        }
                    }
                }
            }
        },
        "version": "v2.2.1"
    }
}

应用后,您的 pod 将不会被重新调度到另一个节点,因为 PV、PVC 已绑定到该节点

【讨论】:

  • 但这意味着您的舞会在节点重新启动时不可用,从而丢失了指标
  • 是的,你是对的。对于 prod env,您可以使用 prometheus 高可用性coreos.com/operators/prometheus/docs/latest/… 这种 HA 也带来了额外的复杂性。如果是裸机,您仅将数据存储在节点存储上,在这种情况下,重新启动会导致指标丢失。这是你必须做出的艰难决定才能参加毕业舞会。
猜你喜欢
  • 1970-01-01
  • 2019-11-19
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多