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