Сопоставление локального каталога с кубернетами

Я использую рабочий стол Docker для запуска приложения на платформе kubernetes, где мне нужно место для хранения файлов, как я могу использовать свой локальный каталог (c: \ app-data) для указания приложения, работающего в kubernetes.


person kumar    schedule 11.12.2020    source источник


Ответы (3)


У меня была аналогичная проблема. Содержимое Docker обычно предназначено для использования в качестве одноразовых / шлюзовых контейнеров, поэтому люди обычно не используют их для хранения файлов.

При этом у вас есть два варианта:

  1. Добавьте путь и файлы к контейнеру докеров, что приведет к увеличению размера вашего контейнера докеров (НЕ РЕКОМЕНДУЕТСЯ). Сборка Docker потребует значительного времени и памяти, так как все файлы будут скопированы. Вот пример создания локального контейнера ubuntu с помощью docker. https://thenewstack.io/docker-basics-how-to-share-data-between-a-docker-container-and-host/.

  2. Разместите свои файлы через другой сервер / api и получите эти файлы с помощью простых запросов в своем приложении. Я использовал это решение. Единственное предостережение - вам нужно иметь возможность каким-то образом размещать свои файлы. Это достаточно просто, но может потребоваться дополнительная оплата. https://www.techradar.com/best/file-hosting-and-sharing-services

person Parmandeep Chaddha    schedule 11.12.2020

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

Если вы просто пытаетесь хранить данные где-нибудь - возможно, это данные поддержки MySQL StatefulSet - вы можете создать PersistentVolumeClaim как обычно. Minikube включает минимальный инициатор тома, поэтому вы должны автоматически создать PersistentVolume; вам не нужно делать для этого никаких специальных настроек. Но PersistentVolume будет жить в контейнере / виртуальной машине minikube; если вы полностью удалите настройку minikube, она может удалить эти данные, и вы не сможете получить прямой доступ к данным с хоста.

Если у вас есть набор данных на хосте, к которому ваш контейнер должен получить доступ, есть несколько способов сделать это. Имейте в виду, что в реальном кластере Kubernetes вы вообще не сможете получить доступ к своей локальной файловой системе. Одним из подходов может быть создание PersistentVolume, как указано выше, а затем запуск модуля для копирования в него данных; как предлагает @ParmandeepChaddha в их ответе, запекание данных в изображение - еще один разумный подход (это может быть очень разумным, если данные всего пара мегабайт).

Если данные являются входными или выходными данными для вашего процесса, вы также можете рассмотреть возможность реструктуризации своего приложения, чтобы оно передавало эти данные по протоколу, например HTTP. Настройте службу NodePort перед своим приложением и используйте такой инструмент, как curl, для HTTP POST данных в службу.

Наконец, вы можете подумать о настройке, в которой все важные данные являются локальными: у вас есть некоторые командные файлы в локальной системе, цель задания - преобразовать некоторые локальные файлы в другие локальные файлы, и просто программа находится в minikube . (Или, аналогично, вы пытаетесь разработать свое приложение, а исходные файлы находятся в вашей локальной системе.) В этом случае Kubernetes, как распределенная кластерная контейнерная система, не является подходящим инструментом. Лучше всего запускать приложение прямо в вашей системе; вы можете смоделировать это с помощью docker run -v bind mount, но это неудобно и может привести к проблемам с разрешениями и средой.

(Теоретически вы также можете использовать hostPath том, и minikube имеет некоторую поддержку для монтирования host в виртуальную машину. На практике настройка, необходимая для этого, такая же сложная, как и остальная часть вашей установки Kubernetes вместе взятая, и ее нельзя переносить на любую другую установку Kubernetes. Я бы не стал пытаться это сделать. .)

person David Maze    schedule 11.12.2020

Вы можете подключить свой локальный каталог к ​​своему kubernetes Pod, используя hostPath. Ваш путь c:\app-data на вашем хосте Windows должен быть представлен как /C/app-data или /host_mnt/c/app-data, в зависимости от вашей версии Docker Desktop, как предлагается в этот комментарий.

Вы также можете взглянуть на этот ответ.

person mario    schedule 12.12.2020