[英]How to mount a postgresql volume using Aws EBS in Kubernete
从pod接收错误:
initdb:目录“/ var / lib / postgresql / data”存在但不是空它包含一个lost + found目录,可能是因为它是一个挂载点。 建议不要直接使用挂载点作为数据目录。 在挂载点下创建一个子目录。
为什么pod无法使用此路径? 我在minikube上尝试过相同的测试。 我没有遇到任何问题。
那么在Kubernete中使用Aws EBS正确安装postgresql卷的方法是什么,允许重新创建的pod可以重用存储在EBS中的初始数据库?
那么使用Aws EBS正确挂载postgresql卷的方法是什么呢?
你走在正确的道路上......
你得到的错误是因为你想使用挂载卷的根文件夹/
作为postgresql数据目录和postgresql抱怨这不是最佳做法,因为它不是空的并且已经包含一些数据(即lost+found
目录)。
最好将数据目录放在单独的空子文件夹(例如/postgres
)中,并在创建文件结构时给出postgresql clean slate。 你没有在minicube上得到同样的东西,因为你很可能安装了没有任何内部的主机文件夹(是空的)并且没有引发这样的抱怨。
要执行此操作,您最初需要将卷的空子路径 (例如PV上的空/postgres
子文件夹)安装到您的pod中的相应安装点( /var/lib/posgresql/data
)。 请注意,您可以将subPath和mount point end文件夹命名为相同的名称,它们在这里是不同的,例如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 + found目录,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以包含数据。
所以,创建一个更深层次的dicerctory,它的工作原理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.