我正在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的数量,那么数据应该存在。
1条答案
按热度按时间4nkexdtk1#
根据您的vminsert文件,
到6,然后再加一个
这可以解决创建新pod时没有数据的问题。