Конфигурация тома Kubernetes (в Docker для Windows) для Postgres

У меня есть приложение tomcat + postgres, которое я тестирую с помощью docker-compose. Я пытаюсь упаковать приложение в файл конфигурации kubernetes.

На данный момент я запускаю kubernetes (и kubectl), используя установку Docker Desktop для Windows. В конце концов, я хочу развернуть в других средах.

В настоящее время я пытаюсь воспроизвести некоторые функции тома в docker-compose в следующем файле конфигурации.

apiVersion: v1
kind: Pod
metadata:
  name: pg-pod
spec:
  volumes:
  - name: "pgdata-vol"
    #emptyDir: {}
    hostPath:
      path: /c/temp/vols/pgdata
  containers:
  - image: postgres
    name: db
    ports:
    - containerPort: 5432
      name: http
      protocol: TCP
    volumeMounts:
    - mountPath: "/pgdata"
      name: "pgdata-vol"
    env:
    - name: PGDATA
      value: /pgdata

При запуске postgres я получаю следующую ошибку.

fixing permissions on existing directory /pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 20
selecting default shared_buffers ... 400kB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
2019-07-26 20:43:41.844 UTC [78] FATAL:  data directory "/pgdata" has wrong ownership
2019-07-26 20:43:41.844 UTC [78] HINT:  The server must be started by the user that owns the data directory.
child process exited with exit code 1
initdb: removing contents of data directory "/pgdata"
running bootstrap script ...

Я предполагаю, что мне нужно либо указать некоторые дополнительные параметры для определения моего тома, либо мне нужно попробовать другой тип конфигурации тома (local против hostPath).


person terrywb    schedule 26.07.2019    source источник


Ответы (3)


Я нашел частичное решение этой проблемы.

Интересно, что если я назначу путь в стиле Linux в качестве пути к хосту (в Windows), то мой pgdata-vol сохраняется до перезапуска Docker Desktop.

Вместо установки в реальном месте окна

  volumes:
  - name: "pgdata-vol"
    hostPath:
      path: /c/temp/vols/pgdata

Я использую папку "linux" в качестве пути хоста Windows.

  volumes:
  - name: "pgdata-vol"
    hostPath:
      path: /tmp/vols/pgdata

Любопытно, что я не могу найти этот путь в Windows. Я предполагаю, что этот / tmp является локальным для моего экземпляра Docker Desktop.

Это решение не обеспечивает настоящей настойчивости, но оно помогло мне обойти препятствие, которое мешало тестированию.

person terrywb    schedule 08.08.2019

Это известная проблема с образом Docker в Windows. Сейчас невозможно правильно смонтировать каталоги Windows как тома. Однако вы можете попытаться обойти это, используя постоянный том Docker. Например:

  db:
    image: postgres
    environment:
      - POSTGRES_USER=<user>
      - POSTGRES_PASSWORD=<pass>
      - POSTGRES_DB=<db_name>
    ports:
      - <ports>
    volumes:
      - pgdata:<path>
    networks:
    - <network>

volumes:
  pgdata:

Дополнительная информация:

Пожалуйста, дайте мне знать, помогло ли это.

person Wytrzymały Wiktor    schedule 30.07.2019
comment
Спасибо. Когда я запускаю свою систему с помощью docker-compose, я создаю том, как вы описали выше. Хотел бы я знать, как смонтировать том, созданный, как вы описываете, в кубернетах. - person terrywb; 30.07.2019
comment
Вы знакомы с постоянными томами? - person Wytrzymały Wiktor; 31.07.2019
comment
Я нашел эту страницу, но не понимаю, как реализовать параметры в моем примере. В идеале я просто хотел бы воспроизвести тип тома, который docker-compose создает (и сохраняется). - person terrywb; 31.07.2019
comment
Я понимаю вашу точку зрения. Думаю, будет лучше, если вы зададите это отдельным вопросом. Было бы проще и прозрачнее для всех заинтересованных людей. - person Wytrzymały Wiktor; 06.08.2019
comment
Я создал новый вопрос. Спасибо за предложение. stackoverflow.com/questions/57378980 / - person terrywb; 06.08.2019

Вы пробовали использовать WSL? Моя установка для Windows - это WSL + Ubuntu + Docker для Windows, и я могу нормально монтировать тома.

Я следовал этому руководству, чтобы настроить всю свою среду:

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

person wolmi    schedule 30.07.2019