如何在Kubernete中使用Aws EBS安装postgresql卷

X.J*_*X.J 20 postgresql docker kubernetes persistent-volumes aws-ebs

  1. 我首先创建了持久卷(EBS 10G)和相应的持久卷声明.但是当我尝试部署postgresql pods时(yaml文件):

测试postgresql.yaml

从pod接收错误:

initdb:目录"/ var/lib/postgresql/data"存在但不是空它包含一个lost + found目录,可能是因为它是一个挂载点.建议不要直接使用挂载点作为数据目录.在挂载点下创建一个子目录.

为什么pod无法使用此路径?我在minikube上尝试过相同的测试.我没有遇到任何问题.

  1. 我试图将卷安装目录路径更改为"/ var/lib/test/data",pod可以正在运行.我创建了一个新表和一些数据,然后杀了这个pod.Kubernete创造了一个新的吊舱.但是新的没有保留以前的数据和表格.

那么在Kubernete中使用Aws EBS正确安装postgresql卷的方法是什么,允许重新创建的pod可以重用存储在EBS中的初始数据库?

Con*_*nst 31

那么使用Aws EBS正确挂载postgresql卷的方法是什么呢?

你走在正确的道路上......

你得到的错误是因为你想使用挂载卷的根文件夹/作为postgresql Data dir和postgresql抱怨说这不是最佳做法,因为它不是空的并且已经包含一些数据(即lost+found目录).

最好将数据目录放在单独的空子文件夹中(/postgres例如),并在创建文件结构时给出postgresql clean slate.你没有在minicube上得到同样的东西,因为你很可能安装了没有任何内部的主机文件夹(是空的)并且没有引发这样的抱怨.

要执行此操作,您最初需要清空卷的子路径(/postgres例如,PV上的空子文件夹),将其安装到/var/lib/posgresql/datapod中的相应安装点().请注意,您可以将subPath和mount point end文件夹命名为相同的名称,它们在这里是不同的,只是作为将test-db-volume/postgres文件夹挂载到pod to /var/lib/postgresql/datafolder 的示例:

...
volumeMounts:
- mountPath: /var/lib/postgresql/data
  name: test-db-volume
  subPath: postgres
...
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案。我尝试了很多解决方案,包括安装后删除丢失+找到的解决方案,但最终找到了这个简单的工作解决方案。 (2认同)

Mar*_*ton 6

我通过告诉 postgres 我希望用 PGDATA env 创建数据库的位置来解决这个问题。它创建空目录并初始化数据库。如果你没有这个,那么它假设你想在房间安装目录中创建它对我来说有 postgres 不喜欢的 ;ost+found 目录

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
Run Code Online (Sandbox Code Playgroud)