从pod接收错误:
initdb:目录“ / var / lib / postgresql / data”存在但不为空 它包含一个lost + found目录,可能是由于它是一个挂载点。 不建议将挂载点直接用作数据目录。 在安装点下创建一个子目录。
为什么吊舱无法使用此路径?我已经在minikube上尝试过相同的测试。我没遇到任何问题。
那么在Kubernete中使用Aws EBS正确安装postgresql卷的方法是什么,它允许重新创建的pod可以重用存储在EBS中的初始数据库?
答案 0 :(得分:17)
那么,使用Aws EBS正确安装postgresql卷的方法是什么
您在正确的道路上...
您收到的错误是因为您想将已安装卷/
的根文件夹用作postgresql数据目录,而postgresql抱怨这样做不是最佳实践,因为它不为空并且内部已经包含一些数据(即lost+found
目录)。
最好在单独的空子文件夹(例如,/postgres
)中定位数据目录,并在创建文件结构时为PostgreSQL提供干净的位置。在minicube上您没有得到相同的东西,因为您最有可能装载的主机文件夹内部没有任何内容(为空)并且没有引发此类投诉。
为此,您最初需要将已安装到吊舱中适当的安装点(/postgres
)的卷中的subPath空(例如,PV上的空/var/lib/posgresql/data
子文件夹)。请注意,您可以将subPath和安装点结束文件夹命名为相同的名称,这里它们是不同的,仅作为示例,其中test-db-volume/postgres
文件夹将被挂载到/var/lib/postgresql/data
文件夹上:
...
volumeMounts:
- mountPath: /var/lib/postgresql/data
name: test-db-volume
subPath: postgres
...
答案 1 :(得分:0)
我通过告诉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
答案 2 :(得分:0)
这来自dockerhub描述...
PGDATA此可选变量可用于定义另一个位置- 像子目录一样-用于数据库文件。默认是 / var / lib / postgresql / data,但是如果您使用的数据量是 文件系统挂载点(与GCE永久磁盘一样),Postgres initdb建议使用子目录(例如 / var / lib / postgresql / data / pgdata)以包含数据。
因此,再创建一个更深的目录即可使用