Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Kubernete中使用Aws EBS装载postgresql卷 我首先创建了持久卷(EBS 10G)和相应的持久卷声明。但当我尝试部署postgresql POD时,如下所示(yaml文件):_Postgresql_Docker_Kubernetes_Persistent Volumes_Aws Ebs - Fatal编程技术网

如何在Kubernete中使用Aws EBS装载postgresql卷 我首先创建了持久卷(EBS 10G)和相应的持久卷声明。但当我尝试部署postgresql POD时,如下所示(yaml文件):

如何在Kubernete中使用Aws EBS装载postgresql卷 我首先创建了持久卷(EBS 10G)和相应的持久卷声明。但当我尝试部署postgresql POD时,如下所示(yaml文件):,postgresql,docker,kubernetes,persistent-volumes,aws-ebs,Postgresql,Docker,Kubernetes,Persistent Volumes,Aws Ebs,从pod接收错误: initdb:directory“/var/lib/postgresql/data”存在但不为空 它包含一个丢失+找到的目录,可能是因为它是一个装入点。 不建议直接使用装入点作为数据目录。 在装载点下创建一个子目录。 为什么吊舱不能使用这条路径?我在minikube上做过同样的测试。我没有遇到任何问题 我尝试将卷装载目录路径更改为“/var/lib/test/data”,POD可以运行。我创建了一个新表和一些数据,然后杀死了这个豆荚。库伯尼特创造了一个新的吊舱。但是新的没有保

从pod接收错误:

initdb:directory“/var/lib/postgresql/data”存在但不为空 它包含一个丢失+找到的目录,可能是因为它是一个装入点。 不建议直接使用装入点作为数据目录。 在装载点下创建一个子目录。

为什么吊舱不能使用这条路径?我在minikube上做过同样的测试。我没有遇到任何问题

  • 我尝试将卷装载目录路径更改为“/var/lib/test/data”,POD可以运行。我创建了一个新表和一些数据,然后杀死了这个豆荚。库伯尼特创造了一个新的吊舱。但是新的没有保留以前的数据和表 那么,使用Kubernete中的Aws EBS正确装载postgresql卷的方法是什么,它允许重新创建的POD可以重用存储在EBS中的初始数据库

    那么,使用Aws EBS正确装载postgresql卷的方法是什么

    你走在正确的道路上

    您得到的错误是因为您想将已装入卷的根文件夹
    /
    用作postgresql数据目录,postgresql抱怨这样做不是最佳做法,因为它不是空的,并且里面已经包含一些数据(即
    丢失+找到
    目录)

    在单独的空子文件夹中定位数据目录(例如,
    /postgres
    )并在创建其文件结构时为postgresql提供一个干净的列表要好得多。你们并没有在minicube上得到同样的东西,因为你们很可能挂载的主机文件夹里面并没有任何东西(是空的),也并没有引发这样的抱怨

    为此,您首先需要清空卷(例如PV上的空
    /postgres
    子文件夹),并将其装入pod中的适当装入点(
    /var/lib/posgresql/data
    )。请注意,您可以使用相同的名称命名子路径和挂载点结束文件夹,它们在这里是不同的,正如示例所示,
    test db volume/postgres
    文件夹将挂载到pod上的
    /var/lib/postgresql/data
    文件夹:

    ...
    volumeMounts:
    - mountPath: /var/lib/postgresql/data
      name: test-db-volume
      subPath: postgres
    ...
    

    我通过告诉postgres我希望在哪里使用PGDATA env创建数据库来解决这个问题。它创建空目录并初始化数据库。如果你没有这个,那么它假设你想在房间挂载目录中创建它,我有这个目录;ost+找到了postgres不喜欢的目录

    containers:
      - name: postgres
        imagePullPolicy: Always
        image: postgres:9.6
        ports:
        - containerPort: 5432
          name: postgres
        env:
        - name: POSTGRES_DB
          value: "mydb"
        - name: PGDATA
          value: /var/lib/postgresql/data/pgdata
        volumeMounts:
          - mountPath: /var/lib/postgresql/data
            name: postgres-data
    

    这是dockerhub的描述

    PGDATA此可选变量可用于定义其他位置- 类似于子目录-用于数据库文件。默认值是 /var/lib/postgresql/data,但如果您使用的数据卷是 文件系统装入点(与GCE持久磁盘类似),Postgres initdb推荐一个子目录(例如 /可以创建var/lib/postgresql/data/pgdata)来包含数据


    因此,再创建一个更深层次的dierctory,它就会起作用

    这是一个很好的答案。我尝试了许多解决方案,包括在装载后删除lost+found,但最终找到了这个简单的工作解决方案。这也适用于Azure托管磁盘(而不是文件)上的卷。谢谢您。