如何在Kubernete中使用Aws EBS装载PostgreSQL卷

ecr0jaav  于 2022-10-06  发布在  PostgreSQL
关注(0)|答案(4)|浏览(120)

1.我首先创建了持久卷(EBS 10G)和对应的持久卷声明。但当我尝试部署PostgreSQL Pod时,如下所示(YAML文件):

test-postgresql.yaml

从Pod接收错误:

initdb:目录“/var/lib/postgresql/data”存在,但不为空,它包含一个Lost+Found目录,可能是因为它是一个挂载点。不建议将装载点直接用作数据目录。在挂载点下创建一个子目录。

为什么吊舱不能走这条路?我在迷你立方上也做过同样的测试。我没有遇到任何问题。

1.我尝试将卷挂载目录路径更改为/var/lib/test/data,Pod可以运行。我创建了一个新的表和其中的一些数据,然后终止了这个Pod。库伯内特创造了一个新的吊舱。但新版本没有保留以前的数据和表格。

那么,在Kubernete中使用Aws EBS正确挂载PostgreSQL卷的方法是什么,从而允许重新创建的Pod可以重用存储在EBS中的初始数据库?

ia2d9nvy

ia2d9nvy1#

那么,使用Aws EBS正确装载PostgreSQL卷的方法是什么呢

你走在一条正确的道路上。

您收到的错误是因为您希望使用已装载卷/的根文件夹作为PostgreSQL数据目录,并且PostgreSQL抱怨这样做不是最佳实践,因为它不是空的,并且其中已经包含一些数据(即lost+found目录)。

最好将数据目录放在单独空子文件夹中(例如/postgres),并在创建其文件结构时让PostgreSQL从头开始。你在微型立方体上没有得到同样的东西,因为你很可能装载的主机文件夹里面没有任何东西(是空的),也没有触发这样的投诉。

为此,最初需要将卷的空的子路径(例如,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
...
yrdbyhpb

yrdbyhpb2#

我修复了这个问题,告诉Postgres我希望使用PGDATA环境在哪里创建数据库。它创建空目录并初始化数据库。如果您没有这个目录,那么它就假定您想要在房间挂载目录中创建它,在我看来,该目录包含Postgres不喜欢的;ost+find目录

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
cs7cruho

cs7cruho3#

这是从码头中心描述..。
PGDATA这个可选变量可用于为数据库文件定义另一个位置,如子目录。缺省值为/var/lib/postgresql/data,但如果您使用的数据卷是文件系统挂载点(如GCE永久磁盘),postgres initdb建议创建子目录(例如/var/lib/postgreSQL/data/pgdata)来包含数据。

因此,再创建一个更深层次的词典,它就会奏效

jdgnovmf

jdgnovmf4#

使用子路径,如下所述

- name: postgredb
      mountPath: /var/lib/postgresql/data
     #setting subPath - it can be any arbitrary name
      subPath: postgres

相关问题