Как установить том postgresql с помощью Aws EBS в Кубернете - программирование
Подтвердить что ты не робот

Как установить том postgresql с помощью Aws EBS в Кубернете

  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?

4b9b3361

Ответ 1

Итак, каков способ правильного монтирования тома postgresql с использованием Aws EBS

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

Ошибка, возникающая из-за того, что вы хотите использовать корневую папку смонтированного тома / поскольку postgresql Data dir и postgresql жалуются на то, что это не самая лучшая практика, потому что она не пуста и содержит уже некоторые данные внутри (а именно, каталог lost+found).

Намного лучше найти dir данных в отдельной пустой подпапке (например, /postgres) и дать postgresql чистый сланец при создании его файловой структуры. Вы не получили то же самое на minicube, так как вы, скорее всего, установили папку хоста, которая ничего не имела внутри (была пуста) и не вызывала такую жалобу.

Для этого вам понадобится сначала пустой подпакет вашего тома (например, вложенная папка empty /postgres на вашем PV), смонтированный в соответствующей точке монтирования (/var/lib/posgresql/data) в вашем контейнере. Обратите внимание, что вы можете назвать subpath и точку конца конечной папки тем же именем, они здесь разные, как пример, где будет установлена папка test-db-volume/postgres на pod в папку /var/lib/postgresql/data:

...
volumeMounts:
- mountPath: /var/lib/postgresql/data
  name: test-db-volume
  subPath: postgres
...

Ответ 2

Я исправил это, сообщив 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

Ответ 3

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

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

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