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

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

Тест-postgresql.yaml

Получите ошибки от pod:

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

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

  1. Я попытался изменить путь к каталогу для монтирования тома на "/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) создаваться для хранения данных.

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

Другие вопросы по тегам