首页 > 解决方案 > 如何在 Kubernetes 中挂载 PostgreSQL 数据目录?

问题描述

我正在使用 minikube 在本地运行 kubernetes。我的本地 k8s 有两个 pod,其中一个是 PostgreSQL,另一个是我自己的应用程序。我已经安装了一个PersistentVolumeandPersistentVolumeClaim以便为 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是空的,就像/data/psql在 minikube 主机中一样。任何人都可以帮忙吗?

标签: postgresqldockerkubernetesminikube

解决方案


改变:

volumeMounts:
  - mountPath: /var/lib/postgresql

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

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

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

在此处输入图像描述


推荐阅读