Хранилище Prometheus на Kubernetes

Версия Kubernetes: 1.10

Мы запускаем Prometheus в кластере Kubernetes (работающем на Bare Metal). Kubernetes работает только с одним POD.

ПРОБЛЕМА. Показатели Prometheus не сохраняются при перезапуске POD. Мы также попытались настроить постоянный том как локальный. Теперь, если этот модуль переназначен на любой другой узел кластера, он теряет все предыдущие данные, которые сохранялись на предыдущем узле. Мы также пытались настроить удаленное хранилище Prometheus для чтения и записи, но это не сработало, потому что оно было довольно медленным. Есть ли другой способ сохранить данные о Kubernetes на Bare Metal?


person Himanshu_Rajput    schedule 04.12.2018    source источник
comment
Вы указали PersistenceVolumeClaim для prometheus? Может быть, вы можете поделиться своими ямлами PersistenceVolume и PersistenceVolumeClaim?   -  person Blokje5    schedule 04.12.2018


Ответы (1)


У меня была такая же проблема при настройке Prometheus на baremetal, и вот как я ее решил.

Вы можете использовать local-storage класс хранения для PV и PVC, которые привязывают ваш PVC к вашему узлу. Таким образом, всякий раз, когда модуль перезапуска узла будет запланирован на том же узле, где находится 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>"
                ]
              }
            ]
          }
        ]
      }
    }
  }
}

Prometheus.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"
    }
}

После применения этого пода не будет перенесено на другой узел, потому что PV, PVC привязаны к этому узлу.

person Prafull Ladha    schedule 04.12.2018
comment
Но это означает, что ваш выпускной вечер недоступен в момент перезапуска узла, что приводит к потере показателей. - person piyushGoyal; 04.12.2018
comment
Да ты прав. Для prod env вы можете использовать высокую доступность prometheus coreos.com/operators/prometheus / docs / latest / Этот HA также привносит дополнительную сложность. В случае baremetal вы храните свои данные только в хранилище узлов, и в этом случае перезапуск приводит к потере метрик. Это трудный вызов, который вам нужно сделать, чтобы пойти на выпускной бал HA. - person Prafull Ladha; 04.12.2018