ポッドからエラーを受け取ります:
initdb:ディレクトリ "/ var/lib/postgresql/data"は存在しますが空ではありません。マウントポイントであるため、lost + foundディレクトリが含まれています。マウントポイントをデータディレクトリとして直接使用することはお勧めしません。マウントポイントの下にサブディレクトリを作成します。
ポッドがこのパスを使用できないのはなぜですか? minikubeで同じテストを試しました。問題はありませんでした。
では、KuberneteのAws EBSを使用してpostgresqlボリュームを正しくマウントし、再作成されたポッドがEBSに保存された初期データベースを再利用できるようにする方法は何でしょうか?
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
...
データベースを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
これはdockerhubの説明からです...
PGDATAこのオプション変数は、データベースファイルの別の場所(サブディレクトリなど)を定義するために使用できます。デフォルトは/ var/lib/postgresql/dataですが、使用しているデータボリュームがファイルシステムマウントポイント(GCE永続ディスクなど)の場合、Postgres initdbはサブディレクトリ(たとえば/ var/lib/postgresql/data/pgdata)データを含めるために作成されます。
そのため、もう1つのより深いdicerctoryを作成します。