Получите ошибки из модуля:
initdb: каталог "/ var / lib / postgresql / data" существует, но не пуст Он содержит каталог lost + found, возможно, из-за того, что он является точкой монтирования. Не рекомендуется использовать точку монтирования напрямую в качестве каталога данных. Создайте подкаталог под точкой монтирования.
Почему капсула не может использовать этот путь? Такие же тесты пробовал на миникубе. Никаких проблем не встретил.
Итак, как правильно смонтировать том postgresql с помощью Aws EBS в Kubernete, что позволяет воссозданным модулям повторно использовать исходную базу данных, хранящуюся в EBS?





So what's the way to correctly mount a postgresql volume using Aws EBS
Вы на правильном пути ...
Вы получаете ошибку, потому что вы хотите использовать корневую папку смонтированного тома / в качестве каталога данных postgresql, а postgresql жалуется, что это не лучшая практика, поскольку он не пуст и уже содержит некоторые данные внутри (а именно каталог lost+found).
Намного лучше разместить каталог данных в отдельной пустой подпапке (например, /postgres) и дать postgresql «чистый лист» при создании его файловой структуры. Вы не получили того же на 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
...
Это также работает для томов на управляемых дисках Azure (не в файлах).
Я исправил это, указав 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 ...
PGDATA This optional variable can be used to define another location - like a subdirectory - for the database files. The default is /var/lib/postgresql/data, but if the data volume you're using is a filesystem mountpoint (like with GCE persistent disks), Postgres initdb recommends a subdirectory (for example /var/lib/postgresql/data/pgdata ) be created to contain the data.
Итак, создайте еще один более глубокий каталог, и он работает
Это отличный ответ. Я пробовал много решений, включая удаление потерянных + найденных после установки, но в конце концов нашел это простое рабочее решение.