如何在 Kubernetes 中挂载 PostgreSQL 数据目录?
How to mount PostgreSQL data directory in Kubernetes?
我在本地使用 minikube 运行 kubernetes。我本地的 k8s 有两个 pods 其中一个是 PostgreSQL,另一个是我自己的应用程序。我安装了 PersistentVolume
和 PersistentVolumeClaim
以便为 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
一样。
有人可以帮忙吗?
变化:
volumeMounts:
- mountPath: /var/lib/postgresql
到
volumeMounts:
- mountPath: /var/lib/postgresql/data
错误的 mountPoint postgres 可执行文件被覆盖。
我附上一张图片,其中包含我从 pod 内部(左侧)和 minikube space 内部(右侧,来自 virtualbox 的小 shell)看到的数据。
我在本地使用 minikube 运行 kubernetes。我本地的 k8s 有两个 pods 其中一个是 PostgreSQL,另一个是我自己的应用程序。我安装了 PersistentVolume
和 PersistentVolumeClaim
以便为 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
一样。
有人可以帮忙吗?
变化:
volumeMounts:
- mountPath: /var/lib/postgresql
到
volumeMounts:
- mountPath: /var/lib/postgresql/data
错误的 mountPoint postgres 可执行文件被覆盖。
我附上一张图片,其中包含我从 pod 内部(左侧)和 minikube space 内部(右侧,来自 virtualbox 的小 shell)看到的数据。