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

wnrlj8wa  于 2023-10-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(95)

我正在minikube中设置一个维多利亚metrics集群来监控我的服务器。
在这个集群中,我使用prometheus将数据发送到vminsert,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也没有数据。
我想实现两件事
1.每当我增加副本的数量时,新的Pod应该与其他Pod具有相同的数据。
1.如果某个pod以某种方式重新启动,则该pod也应该具有与其他pod相同的数据。
在此设置中,我需要存储至少1个月的数据。因此,对我来说非常重要的是,如果任何pod重新启动或我扩大pod的数量,那么数据应该存在。

4nkexdtk

4nkexdtk1#

根据您的vminsert文件,

"-replicationFactor=5"

到6,然后再加一个

-storageNode=vmstorage-x.vmstorage.vms.svc.cluster.local:8400

这可以解决创建新pod时没有数据的问题。

相关问题