0

Influxdb 2.0.0を EBS ボリュームの永続性を備えた Statefulset としてデプロイしました。何らかの理由でポッドが他のノードに再スケジュールされた場合、またはステートフル セット ポッド レプリカ = 0 をスケールダウンしてからスケールアップした場合でも、永続化されたデータに対する効果は同じであることに気付きました。それらは失われます。

最初は、ポッドが他のノードに再スケジュールされた場合、問題は EBS ボリュームにあると思いました。マウントが解除されず、ポッドのレプリカが実行されている別のノードにマウントされましたが、そうではありませんでした。EBS ボリュームが存在し、同じ pv/pvc が存在しますが、データが失われます。

何が問題なのかを突き止めるために、意図的に influxdb のセットアップを行い、データを追加してから、次のようにしました。

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

influxdb pod が再スケジュールされたときと同じ効果がありました。データが失われました。

なぜそのようなことが起こるのか、具体的な理由はありますか?

私の環境:コントロール プレーン/ワーカーの1.15 k8s バージョンで EKS k8s 環境を使用しています。

4

1 に答える 1

1

幸いなことに、この問題は、influxdb 1.x と 2.0.0 ベータ版の間で、実際のデータが永続化される場所に関して大きな変更が行われたことが原因でした。

1.x バージョンでは、データは次の場所に保持されていました。

/var/lib/influxdb

2.x バージョンでは、データはデフォルトで永続化されます。

/root/.influxdbv2

私の EBS ボリュームは 1.x バージョンの場所にマウントされ、ポッドを再起動するたびに (スケールダウンまたは他のノードへのスケジュールによって)、EBS ボリュームは定期的にアタッチされていましたが、間違った場所にありました。それが原因で、データがありませんでした。

また、1 つの違いは、構成ファイルを介して 2.x バージョンに構成パラメーターを提供できないことです (configmap としてコンテナーに構成ファイルをマウントした 1.x のように)。追加の構成パラメーターをインラインで提供する必要があります。このリンクはその方法を説明しています: 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 に答える