在本地Kubernetes中安装portgresql持久性卷时遇到的问题

时间:2019-10-23 13:31:40

标签: kubernetes postgresql-9.3 persistent-volumes pv

我正在尝试使用静态配置在本地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文件中的任何覆盖选项

我不想在这里用新名称创建文件夹。

enter image description here

如果我将mountPath更改为/var/lib/pgsql/9.3/data/backup,则pod开始运行,但我不希望我希望将数据写入同一目录/var/lib/pgsql/9.3/data中

2 个答案:

答案 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卷进行安装,则可以正常工作