我正在尝试使用静态配置在本地Kubernetes中安装postgrsql权限卷。 这是我创建的pv,pvc和pod的Yaml文件
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
namespace: manhattan
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 100Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: task-pv-claim
namespace: manhattan
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 80Mi
---
apiVersion: v1
kind: Pod
metadata:
name: dbr-postgres
namespace: manhattan
spec:
volumes:
- name: task-pv-storage
persistentVolumeClaim:
claimName: task-pv-claim
containers:
- name: task-pv-container
image: postgresql:2.0.1
tty: true
volumeMounts:
- mountPath: "/var/lib/pgsql/9.3/data"
name: task-pv-storage
subPath: data
readOnly: false
nodeSelector:
kubernetes.io/hostname: k8s-master
我的卷位于/var/lib/pgsql/9.3/data中,但是我的pod失败了,我不想将mountPath的位置更改为/var/lib/pgsql/9.3/data/backup
您能建议Yaml文件中的任何覆盖选项
我不想在这里用新名称创建文件夹。
如果我将mountPath更改为/var/lib/pgsql/9.3/data/backup,则pod开始运行,但我不希望我希望将数据写入同一目录/var/lib/pgsql/9.3/data中
答案 0 :(得分:0)
根据dockerhub中postgres:9.4的官方文档:
1 。请注意:
警告:仅当您使用空的数据目录启动容器时,特定于Docker的变量才有效。容器启动时,所有现有数据库都将保持不变。
2 。 PGDATA
环境变量:
此可选变量可用于为数据库文件定义另一个位置,例如子目录。默认值为/ var / lib / postgresql / data,但是如果您使用的数据量是文件系统挂载点(例如GCE永久磁盘),则Postgres initdb建议使用一个子目录(例如/ var / lib / postgresql / data / pgdata)创建为包含数据。
有关解决方法,请参阅:
您还可以将图像更改为特定的using helm chart:
从图表版本4.0.0起,可以将此图表与Docker Official PostgreSQL映像一起使用。除了指定新的Docker存储库和标签外,修改PostgreSQL数据目录和卷安装点也很重要。基本上,PostgreSQL数据目录不能直接是挂载点,它必须是子目录。
helm install --name postgres \
--set image.repository=postgres \
--set image.tag=10.6 \
--set postgresqlDataDir=/data/pgdata \
--set persistence.mountPath=/data/ \
stable/postgresql
您可以将此头盔图表模板化并进行自定义。从另一个角度来看,主要问题是您已经初始化了数据库-正如您在/var/lib/pgsql/9.3/data/backup下提到的那样,因此请验证docker文件和docker-entrypoint.sh以弄清楚位置在哪里。问题。
请告诉我这是否有帮助。
答案 1 :(得分:0)
我弄清楚了问题的产生,因为最初我的数据目录不是空的。我需要在 ENTRYPOINT 或 CMD 期间运行 postgresql init db >在运行时
必须在kubernetes卷中具有空的mountPath,但如果您使用docker卷进行安装,则可以正常工作