我正在努力在 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 也没有数据。
我想实现两件事
"-replicationFactor=5"
到 6,然后添加另一个
-storageNode=vmstorage-x.vmstorage.vms.svc.cluster.local:8400
这可能会解决创建没有数据的新 Pod 时的问题。