簡體   English   中英

如何使用 postgres 在 GKE kubernetes StatefulSet 中保留數據?

[英]How to have data persist in GKE kubernetes StatefulSet with postgres?

所以我只是想通過實驗讓一個網絡應用程序在 GKE 上運行,以熟悉 Kubernetes 和 GKE。

我有一個 statefulSet (Postgres),它有一個持久卷/持久卷聲明,它按預期安裝到 Postgres pod。 我遇到的問題是讓 Postgres 數據持久。 如果我將 PV 掛載在var/lib/postgres上,則每次 pod 更新都會覆蓋數據。 如果我安裝在var/lib/postgres/data我會收到警告:

initdb: directory "/var/lib/postgresql/data" exists but is not empty It contains a lost+found directory, perhaps due to it being a mount point. Using a mount point directly as the data directory is not recommended. Create a subdirectory under the mount point.

單獨使用 Docker 在var/lib/postgresql/data處具有卷掛載點可以按預期工作並且數據持久,但我不知道現在在 GKE 中該做什么。 如何正確設置?

安裝文件:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sm-pd-volume-claim
spec:
  storageClassName: "standard"
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
---
apiVersion: "apps/v1"
kind: "StatefulSet"
metadata:
  name: "postgis-db"
  namespace: "default"
  labels:
    app: "postgis-db"
spec:
  serviceName: "postgis-db"
  replicas: 1
  selector:
    matchLabels:
      app: "postgis-db"
  template:
    metadata:
      labels:
        app: "postgis-db"
    spec:
      terminationGracePeriodSeconds: 25
      containers:
      - name: "postgis"
        image: "mdillon/postgis"
        ports:
        - containerPort: 5432
          name: postgis-port
        volumeMounts:
        - name: sm-pd-volume
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: sm-pd-volume
        persistentVolumeClaim:
          claimName: sm-pd-volume-claim

您收到此錯誤是因為 postgres pod 已嘗試在 / 文件夾上掛載數據目錄。 不建議這樣做。

您必須創建子目錄來解決 statefulset 清單 yaml 文件上的此問題。

  volumeMounts:
    - name: sm-pd-volume
      mountPath: /var/lib/postgresql/data
      subPath: data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM