【问题标题】:How to mount PostgreSQL data directory in Kubernetes?如何在 Kubernetes 中挂载 PostgreSQL 数据目录?
【发布时间】:2019-01-31 15:15:01
【问题描述】:

我正在使用 minikube 在本地运行 kubernetes。我的本地 k8s 有两个 pod,其中一个是 PostgreSQL,另一个是我自己的应用程序。我已经安装了 PersistentVolumePersistentVolumeClaim 以便为 PostgreSQL 创建一个有状态的 pod:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/psql"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

这里是 PostgreSQL 部署 yaml 文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        name: postgres
    spec:
      containers:
      - name: postgres
        imagePullPolicy: Never
        image: postgres:9.6
        ports:
        - name: postgres
          containerPort: 5432
        volumeMounts:
        - mountPath: /var/lib/postgresql
          name: postgres-persistent-storage
      volumes:
      - name: postgres-persistent-storage
        persistentVolumeClaim:
          claimName: postgres-pv-claim

问题是PostgreSQL服务没有启动,当我运行它的pod时出现这个错误:

Error: /var/lib/postgresql/9.6/main is not accessible; please fix the directory permissions (/var/lib/postgresql/9.6/ should be world readable)
No PostgreSQL clusters exist; see "man pg_createcluster" ... (warning).

我检查了 PostgreSQL pod 内部,发现 /var/lib/postgresql 是空的,就像 minikube 主机中的 /data/psql 一样。 有人可以帮忙吗?

【问题讨论】:

  • 您是否尝试过进入 minikube 节点并检查该目录是否具有正确的权限,例如 kubernetes.io/docs/tasks/configure-pod-container/…
  • 你在 virtualbox 中运行 minikube 吗?
  • @NicolaBen 是的,我正在使用 VirtualBox 驱动程序。
  • @RyanDawson 正确的权限是什么意思?
  • 我会为所有用户完全读写 - chmod 777

标签: postgresql docker kubernetes minikube


【解决方案1】:

变化:

volumeMounts:
  - mountPath: /var/lib/postgresql

volumeMounts:
  - mountPath: /var/lib/postgresql/data

使用错误的 mountPoint,postgres 可执行文件被覆盖。

我附上一张图片,其中包含我从 pod 内部(左侧)和 minikube 空间内部(右侧,来自 virtualbox 的小外壳)看到的数据。

【讨论】:

  • 感谢您的回复,postgres 正在运行,但 /var/lib/postgresql/data 中没有任何内容。
  • 我用的是自己的 PostgreSQL 镜像,有问题吗?
  • 我使用了你的文件,我在 mountpoint 上写了唯一的更正。它对我有用。尝试使用 postgres 官方镜像。
猜你喜欢
  • 2021-04-25
  • 2018-08-25
  • 1970-01-01
  • 2018-12-12
  • 2019-12-21
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多