Как смонтировать том postgresql с помощью Aws EBS в Kubernete
- Сначала я создал постоянный том (EBS 10G) и соответствующее требование постоянного тома. Но когда я пытаюсь развернуть модули postgresql, как показано ниже (файл yaml):
Получите ошибки от pod:
initdb: каталог "/var/lib/postgresql/data" существует, но не является пустым. Он содержит каталог lost+found, возможно, из-за того, что он является точкой монтирования. Использование точки монтирования напрямую в качестве каталога данных не рекомендуется. Создайте подкаталог под точкой монтирования.
Почему стручок не может использовать этот путь? Я пробовал такие же тесты на миникубе. Я не встречал никаких проблем.
- Я попытался изменить путь к каталогу для монтирования тома на "/var/lib/test/data", модули могут быть запущены. Я создал новую таблицу и некоторые данные о ней, а затем убил этот модуль. Kubernete создал новый стручок. Но новый не сохранил предыдущие данные и таблицу.
Итак, как правильно смонтировать том postgresql с помощью Aws EBS в Kubernete, который позволяет воссозданным модулям повторно использовать исходную базу данных, хранящуюся в EBS?
4 ответа
Итак, как правильно смонтировать том postgresql с помощью Aws EBS?
Вы на правильном пути...
Ошибка, которую вы получаете, потому что вы хотите использовать корневую папку подключенного тома /
as postgresql Data dir и postgresql жалуются на то, что делать это не рекомендуется, поскольку он не пустой и уже содержит некоторые данные (а именно: lost+found
каталог).
Гораздо лучше найти каталог данных в отдельной пустой подпапке (/postgres
например) и дать postgresql чистый лист при создании своей файловой структуры. Вы не получили то же самое на мини-кубе, так как вы, скорее всего, смонтировали папку хоста, в которой ничего не было (было пусто) и не вызывали такую жалобу.
Для этого вам понадобится изначально пустой 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
...
Я исправил это, сообщив 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
Используйте подпуть, как описано ниже
- name: postgredb
mountPath: /var/lib/postgresql/data
#setting subPath - it can be any arbitrary name
subPath: postgres
Это из описания dockerhub...
PGDATA Эта необязательная переменная может использоваться для определения другого местоположения - например, подкаталога - для файлов базы данных. По умолчанию это / var / lib / postgresql / data, но если используемый вами том данных является точкой монтирования файловой системы (как с постоянными дисками GCE), Postgres initdb рекомендует использовать подкаталог (например, / var / lib / postgresql / data /). pgdata) создаваться для хранения данных.
Итак, создайте еще одну более глубокую дирекцию, и она работает