在minikube/k8s中创建新的pod/重启pod时如何进行数据复制?

问题描述 投票:0回答:1

我正在努力在 minikube 中设置维多利亚指标集群来监控我的服务器。

在这个集群中,我使用 prometheus 将数据发送到 vminsert,后者进一步将其发送到 vmstorage,我使用 vmselect 来获取数据并将其显示在 grafana 上。

数据流就像=>>> prometheus---> vminsert ---> vmstorage <--- vmselect <--- grafana

Vminsert 和 vmselect 是无状态的,而 vmstorage 是有状态的。 最初我有 5 个 vmstorage 副本。 当我应用所有文件时,一切正常,我可以在 grafana 上看到数据。

我为此目的创建了一个存储类。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: vmstorage-sc
provisioner: k8s.io/minikube-hostpath
reclaimPolicy: Retain

之后我还为此创建了一个 PVC。该 PVC 使用上述存储类。我在 vmstorage 部署中使用了这个 pvc。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-vms
  namespace: vms
spec:
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 50Mi
  storageClassName: vmstorage-sc

这是我的vmstorage部署文件

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: vmstorage
  namespace: vms
spec:
  serviceName: vmstorage
  replicas: 5
  selector:
    matchLabels:
      app: vmstorage
  template:
    metadata:
      labels:
        app: vmstorage
    spec:
      containers:
      - name: vmstorage
        image: victoriametrics/vmstorage
        imagePullPolicy: "IfNotPresent"
        args:
        - -retentionPeriod=1 
        ports:
        - containerPort: 8400
          name: vminsert
        - containerPort: 8401
          name: vmselect
        volumeMounts:
        - name: mypvc
          mountPath: /victoria-metrics-data
      volumes:
        - name: mypvc
          persistentVolumeClaim:
            claimName: pvc-vms
---
apiVersion: v1
kind: Service
metadata:
  name: vmstorage
  namespace: vms
spec:
  ports:
  - name: vminsert
    port: 8400
    targetPort: 8400
  - name: vmselect
    port: 8401
    targetPort: 8401
  selector:
    app: vmstorage

我还要添加其他文件 这是我的 vminsert 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vminsert
  namespace: vms
spec:
  replicas: 4
  selector:
    matchLabels:
      app: vminsert
  template:
    metadata:
      labels:
        app: vminsert
    spec:
      containers:
      - name: vminsert
        image: victoriametrics/vminsert
        args:
        - "-maxConcurrentInserts=64"
        - "-insert.maxQueueDuration=5m"
        - "-replicationFactor=5"
#       - "-dedup.minScrapeInterval=1ms"
        - -storageNode=vmstorage-0.vmstorage.vms.svc.cluster.local:8400
        - -storageNode=vmstorage-1.vmstorage.vms.svc.cluster.local:8400
        - -storageNode=vmstorage-2.vmstorage.vms.svc.cluster.local:8400
        - -storageNode=vmstorage-3.vmstorage.vms.svc.cluster.local:8400
        - -storageNode=vmstorage-4.vmstorage.vms.svc.cluster.local:8400
        ports:
        - containerPort: 8480
          name: http-insert
---
apiVersion: v1
kind: Service
metadata:
  name: vminsert
  namespace: vms
spec:
  ports:
  - name: http
    port: 8480
    targetPort: 8480
  selector:
    app: vminsert

这是我的 vmselect 文件

apiVersion : apps/v1
kind : Deployment
metadata :
   name : vmselect
   namespace : vms
spec :
   replicas : 2
   selector :
     matchLabels :
       app : vmselect
   template :
     metadata :
       labels :
         app : vmselect
     spec :
       containers :
       - name : vmselect
         image : victoriametrics/vmselect
         args :
         - -search.maxUniqueTimeseries=1000000
         - -storageNode=vmstorage-2.vmstorage.vms.svc.cluster.local:8401
         - -storageNode=vmstorage-1.vmstorage.vms.svc.cluster.local:8401
#         - -storageNode=vmstorage-3.vmstorage.vms.svc.cluster.local:8401
         ports :
         - containerPort : 8481
           name : http-select
---
apiVersion: v1
kind: Service
metadata:
  name: vmselect
  namespace: vms
spec:
  ports:
  - name: http
    port: 8481
    targetPort: 8481
  selector:
    app: vmselect   

所有 Pod 都具有相同的数据。 因为我在 vminsert 文件中提到的复制因子。

但是当我增加 vmstorage 的副本数量时,问题就出现了。当我将其设置为 6 时,会创建一个新的 pod,但它没有数据,它只是一个没有任何数据的新 pod。 或者 如果我删除一个 pod,则会自动创建一个新的 pod,但该 pod 也没有数据。

我想实现两件事

    每当我增加副本数量时,新的 pod 应该具有与其他 pod 相同的数据。
  1. 如果某个 pod 以某种方式重新启动,那么该 pod 也应该具有与其他 pod 相同的数据。
在此设置中我需要存储至少 1 个月的数据。因此,对我来说非常重要的是,如果任何 pod 重新启动或我扩大 pod 数量,那么数据应该存在。

kubernetes monitoring persistent-volumes kubernetes-pvc victoriametrics
1个回答
0
投票
根据您的 vminsert 文件,建议增加您的

"-replicationFactor=5"
到 6,然后添加另一个

-storageNode=vmstorage-x.vmstorage.vms.svc.cluster.local:8400
这可能会解决创建没有数据的新 Pod 时的问题。

© www.soinside.com 2019 - 2024. All rights reserved.