web-dev-qa-db-ja.com

KubernetesでAws EBSを使用してpostgresqlボリュームをマウントする方法

  1. 最初に永続ボリューム(EBS 10G)と対応する永続ボリューム要求を作成しました。しかし、以下のようにpostgresqlポッドを展開しようとすると(yamlファイル):

test-postgresql.yaml

ポッドからエラーを受け取ります:

initdb:ディレクトリ "/ var/lib/postgresql/data"は存在しますが空ではありません。マウントポイントであるため、lost + foundディレクトリが含まれています。マウントポイントをデータディレクトリとして直接使用することはお勧めしません。マウントポイントの下にサブディレクトリを作成します。

ポッドがこのパスを使用できないのはなぜですか? minikubeで同じテストを試しました。問題はありませんでした。

  1. ボリュームマウントディレクトリのパスを「/ var/lib/test/data」に変更しようとしましたが、ポッドは実行できます。新しいテーブルといくつかのデータを作成し、このポッドを殺しました。 Kuberneteは新しいポッドを作成しました。しかし、新しいものは以前のデータとテーブルを保存しませんでした。

では、KuberneteのAws EBSを使用してpostgresqlボリュームを正しくマウントし、再作成されたポッドがEBSに保存された初期データベースを再利用できるようにする方法は何でしょうか?

17
X.J

Aws EBSを使用してpostgresqlボリュームを正しくマウントする方法は何ですか

あなたは正しい道にいます...

マウントされたボリュームのルートフォルダーを使用するため、エラーが発生します/ as postgresql Data dirおよびpostgresqlは、空ではなく、すでにいくつかのデータが含まれているため、ベストプラクティスではないことを訴えています(つまり、lost+foundディレクトリ)。

別の空のサブフォルダー(/postgresたとえば)ファイル構造を作成するときにpostgresqlにクリーンな状態を与えます。ほとんど何も内部にない(空だった)Hostフォルダーをマウントし、そのような苦情をトリガーしなかったので、minicubeで同じことは得られませんでした。

そのためには、最初に空の subPath が必要です(空の/postgres適切なマウントポイントにマウントされた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
...
24
Const

データベースをPGDATA envで作成したい場所をpostgresに伝えることでこれを修正しました。空のディレクトリを作成し、DBを初期化します。これがない場合、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
1
Martin Naughton

これはdockerhubの説明からです...

PGD​​ATAこのオプション変数は、データベースファイルの別の場所(サブディレクトリなど)を定義するために使用できます。デフォルトは/ var/lib/postgresql/dataですが、使用しているデータボリュームがファイルシステムマウントポイント(GCE永続ディスクなど)の場合、Postgres initdbはサブディレクトリ(たとえば/ var/lib/postgresql/data/pgdata)データを含めるために作成されます。

そのため、もう1つのより深いdicerctoryを作成します。

0