Как смонтировать том postgresql с помощью Aws EBS в Kubernete - PullRequest
0 голосов
/ 04 июля 2018
  1. Сначала я создал постоянный том (EBS 10G) и соответствующее требование постоянного тома. Но когда я пытаюсь развернуть модули postgresql, как показано ниже (файл yaml):

тест-postgresql.yaml

Получать ошибки от модуля:

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

Почему капсула не может использовать этот путь? Я пробовал такие же тесты на миникубе. Я не встречал никаких проблем.

  1. Я попытался изменить путь к каталогу для монтирования тома на "/ var / lib / test / data", модули могут быть запущены. Я создал новую таблицу и некоторые данные о ней, а затем убил этот модуль. Kubernete создал новый стручок. Но новый не сохранил предыдущие данные и таблицу.

Так, как правильно смонтировать том postgresql с помощью Aws EBS в Kubernete, что позволяет воссозданным модулям повторно использовать исходную базу данных, хранящуюся в EBS?

Ответы [ 3 ]

0 голосов
/ 20 марта 2019

Я исправил это, сказав 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
0 голосов
/ 23 мая 2019

это из описания dockerhub ...

PGDATA Эта необязательная переменная может использоваться для определения другого местоположения - как подкаталог - для файлов базы данных. По умолчанию / var / lib / postgresql / data, но если используемый вами объем данных точка монтирования файловой системы (как с постоянными дисками GCE), Postgres initdb рекомендует подкаталог (например, / var / lib / postgresql / data / pgdata) для хранения данных.

Итак, создайте еще одну более глубокую иерархию, и она работает

0 голосов
/ 04 июля 2018

Итак, как правильно смонтировать том postgresql с помощью Aws EBS

Вы на правильном пути ...

Ошибка, которую вы получаете, заключается в том, что вы хотите использовать корневую папку подключенного тома / в качестве 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
...
...