繁体   English   中英

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

[英]How to mount a postgresql volume using Aws EBS in Kubernete

  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中的初始数据库?

那么使用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描述......

PGD​​ATA此可选变量可用于为数据库文件定义另一个位置(如子目录)。 默认为/ var / lib / postgresql / data,但如果您使用的数据卷是文件系统挂载点(与GCE持久性磁盘一样),Postgres initdb建议使用子目录(例如/ var / lib / postgresql / data /创建pgdata以包含数据。

所以,创建一个更深层次的dicerctory,它的工作原理

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM