提问者:小点点

每次Statefulset pod被缩减或重新安排时,在K8s中运行的Infoxdb 2.0都会丢失数据


我已经部署了2.0.0作为具有EBS卷持久性的Statefulset。我注意到,如果出于某种原因,pod被重新安排到其他节点,或者即使我们缩小statefulset pod副本=0然后再扩大,对持久数据的影响也是一样的:它们将丢失。

最初,如果pod被重新安排到其他节点,我认为问题出在EBS卷上,它没有被卸载,它们安装到正在运行pod副本的另一个节点,但事实并非如此。EBS卷存在,相同的pv/pvc存在,但数据丢失了。

为了弄清楚可能存在的问题,我特意进行了infxdb设置并添加了数据,然后这样做了:

kubectl scale statefulsets influxdb --replicas=0
...
kubectl scale statefulsets influxdb --replicas=1

效果就像重新安排infxdb pod时一样。数据丢失了。

为什么会发生这样的事情的具体原因?

我的环境:我正在使用EKS k8s环境与1.15 k8s版本的控制平面/工人。


共1个答案

匿名用户

幸运的是,这个问题是由于在持续保存实际数据的位置方面,在INDOXDB1. x和2.0.0 Beta版本之间发生了很大的变化。

在1. x版本中,数据被持久化:

/var/lib/influxdb

而在2. x版本上,数据默认保存在:

/root/.influxdbv2

我的EBS卷装载在1.x版本的位置上,每次重新启动pod时(无论是缩小规模还是调度到其他节点),EBS卷都会定期附加,但位置错误。这就是为什么没有数据的原因。

另外,我看到的一个区别是无法通过配置文件为 2.x 版本提供配置参数(就像在 1.x 上一样,我将配置文件作为 configmap 挂载到容器中)。我们必须内联提供额外的配置参数。此链接说明如何: https://v2.docs.influxdata.com/v2.0/reference/config-options/

最后,这是Statefulset的工作版本:

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: influxdb
  name: influxdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: influxdb
  serviceName: influxdb
  template:
    metadata:
      labels:
        app: influxdb
    spec:
      containers:
        - image: quay.io/influxdb/influxdb:2.0.0-beta
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /ping
              port: api
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 5
          name: influxdb
          ports:
            - containerPort: 9999
              name: api
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /ping
              port: api
              scheme: HTTP
            initialDelaySeconds: 5
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
          resources:
            limits:
              cpu: "800m"
              memory: 1200Mi
            requests:
              cpu: 100m
              memory: 256Mi
          volumeMounts:
            - mountPath: /root/.influxdbv2
              name: influxdb-data
  volumeClaimTemplates:
    - metadata:
        name: influxdb-data
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 20Gi
        volumeMode: Filesystem