postgresql.conf не найден при использовании монтирования тома

avatar
zendevil.eth
9 августа 2021 в 05:51
183
1
0

У меня есть следующее развертывание:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      component: postgres
  template:
    metadata:
      labels:
        component: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-persistent-volume-claim
      containers:
        - name: postgres
          image: prikshet/postgres
          ports:
            - containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
              subPath: postgres

И когда я включаю строки 23-26 и делаю kubectl apply, модуль выдает ошибку и не запускается, но когда я удаляю строки 23-36, модуль запускается. Я хочу создать объемное монтирование со строками 23-26. Ошибка при проверке журналов этого модуля:

postgres: could not access the server configuration file "/var/lib/postgresql/data/postgresql.conf": No such file or directory

заявка на постоянный том postgres:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-persistent-volume-claim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi

Как это исправить?

Источник
meaningqo
9 августа 2021 в 06:00
0

если я не ошибаюсь, вы используете неправильный подпуть. попробуйте изменить его с postgres на данные

zendevil.eth
9 августа 2021 в 07:13
0

subpath не имеет к этому никакого отношения

Ответы (1)

avatar
Mikołaj Głodziak
9 августа 2021 в 11:12
1

Есть две возможности возникновения этой ошибки:

  1. Ваш файл /var/lib/postgresql/data/postgresql.conf на самом деле не существует. В этом случае его необходимо создать перед монтированием.

  2. Как указано в комментарии, вы используете неправильный subPath. Ваш файл /var/lib/postgresql/data/postgresql.conf существует, но вы пытаетесь смонтировать неправильный файл на основе subPath. Посмотрите на объяснение разницу между mountPath и subPath:

mountPath показывает, где в контейнере должен быть смонтирован том, на который указывает ссылка. Например, если вы подключите том к mountPath: /a/b/c, том будет доступен для контейнера в каталоге /a/b/c. При монтировании тома весь том будет доступен под mountPath. Если вам нужно смонтировать только часть тома, например, один файл в томе, используйте subPath, чтобы указать часть, которая должна быть смонтирована. Например, mountPath: /a/b/c, subPath: d сделают все, что d находится в смонтированном томе в каталоге /a/b/c Обратите внимание, что если subPath является папкой, содержимое папки будет смонтировано в папку mountPath

.
zendevil.eth
9 августа 2021 в 12:16
0

1. если /var/lib/postgresql/data/postgresql.conf не существует, он не будет работать даже без требования постоянного тома, но работает. 2. Не работает даже после удаления subPath

Mikołaj Głodziak
9 августа 2021 в 12:45
0

Также возможно, что у вас неправильные права доступа к этому файлу. Пожалуйста, проверьте его, прикрепив результаты к вопросу.

Mikołaj Głodziak
9 августа 2021 в 13:11
0

Что вы имеете в виду, «если /var/lib/postgresql/data/postgresql.conf не существует, он не будет работать даже без постоянного требования объема, но работает»? Это выглядит довольно странно.

zendevil.eth
9 августа 2021 в 14:02
0

Я удалил часть VolumeMounts, и тогда я не вижу ошибки. Это работает, если postgres использует не постоянное требование тома, а хранилище контейнера. Он по-прежнему обращается к тому же каталогу для файла postgresql.conf.