0

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

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

为了弄清楚可能是什么问题,我特意进行了 influxdb 设置并添加了数据,然后这样做:

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

效果与重新安排 influxdb pod 时的效果相同。数据丢失。

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

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

4

1 回答 1

1

幸运的是,问题是由于 influxdb 1.x 和 2.0.0 测试版之间在实际数据的持久化方面发生了巨大变化。

在 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
于 2020-05-21T09:35:36.853 回答