web-dev-qa-db-ja.com

k8sのDBボリュームでPrometheusオペレーターを使用する

grafanaとPrometheusオペレーターでK8Sを監視しようとしています
ほとんどのメトリックは期待どおりに機能しており、ダッシュボードを正しい値で確認できました。システムには、全体で500ポッドのノードが10個あり、Prometheusを再起動すると、すべてのデータがdeleted(2週間保存したい)私の質問は、データを2週間保持するようにPrometheusボリュームに定義するにはどうすればよいですか100GB DB。私は次を見つけました(私たちはユーザー Prometheus 演算子)

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/storage.md

これは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

これはPrometheusの構成です

    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)があり、上記のストレージ構成が機能しない場合、私の質問は次のとおりです。

  1. ここで私が見逃しているのは、volumeserverpathnfsセクションの下に構成する方法です

この「/ path/to/prom/db」はどこにありますか?どうすれば参照できますか?どういうわけかそれを作成するか、単にパスを提供する必要があります。システムにnfsが設定されています

  1. プロメテウスと組み合わせる方法

私はpvcpvについて深い知識を持っていないので、以下を作成しました(これらの値を考慮していないので、サーバーとは何か、どのパスを提供すればよいか...

server: myServer
path: "/path/to/prom/db"

そこに何を入れ、どのように作成するかプロメテウス(つまり、質問で提供した構成)を使用するには

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以外の永続ボリュームがある場合は、方法についてアドバイスしてください

18
Jhon D

以下のコードを参照してください。以下に示すように、config-mapで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オペレーターファイルでこれらの設定を調整する必要がある場合があります

1
P Ekambaram

古いデータを削除するタイミングを決定するには、このスイッチを使用します--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
...
1
matson kepson

データを永続化するには、永続ボリュームとボリュームクレーム(PVおよびPVC)を使用する必要があります。 「 https://kubernetes.io/docs/concepts/storage/persistent-volumes/ "を参照して、上記のURLでプロビジョニング、再利用ポリシー、アクセスモード、ストレージタイプを注意深く確認する必要があります。

1
hk'

最近、オペレーターチャートの操作を開始しました。

そして、pvとpvcを定義せずに永続性を追加することができました。

新しいチャート構成では、持続性の追加は、ファイル/helm/vector-chart/prometheus-operator-chart/values.yamlをprometheus.prometheusSpecの下で編集するだけで説明するよりもはるかに簡単です。

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"

これにより、自動的にpvpvcの両方が作成され、awsにebsが作成され、内部にすべてのデータが保存されます。