Папки подключения Kubernetes в WSL2

Я пытаюсь окунуться в Kubernetes и в качестве упражнения хочу .igrate мою настройку docker-compose, состоящую из nginx, php-fpm и mysql, в кластер k8s. Хотя я знаком с Docker и docker-compose, я просто не понимаю, как смонтировать локальную папку в модуль Kunernetes.

Чего я хочу добиться, так это чего-то простого, например, -v /home/user/www:/var/www/html в Docker для каждого модуля.

Но как бы я не настраивал PersistantVolume, папки, смонтированные в подах, пустые. Я попробовал Docker Desktop с WSL2, microk8s (snap, установленный с помощью systemd hack) под WSL2 и minikube под WSL2.

Связан ли этот класс хранилища? Возможно ли это вообще в WSL2?


person ad_on_is    schedule 04.06.2020    source источник


Ответы (1)


Модель привязки Docker нельзя использовать в Kubernetes так, как вы описываете.

Модель Kubernetes основана на кластере взаимозаменяемых машин. Скажем, у вас есть 10 систем. Какой из них имеет этот HTML-контент? Как он туда попадает? Что произойдет, если вам нужно добавить еще один узел или этот узел будет уничтожен? То, что вы используете тестовую установку только с одним узлом, не меняет эту точку проектирования.

Если вы используете Kubernetes, вам в основном требуется собрать этот контент в образ и поместить его в какой-то реестр. Есть несколько альтернатив (один файл index.html может быть помещен в ConfigMap; вы можете использовать внешнее хранилище, такое как AWS S3), но в основном вам придется написать файл Dockerfile, COPY его в образ и сослаться на этот image: в своем спецификация развертывания.

Для конкретного стека, который вы упомянули, я также видел пару настроек, которые используют именованный том для копирования данных из контейнера PHP на сервер nginx. Это плохо работает в Kubernetes: более простые в настройке типы томов не могут быть разделены между контейнерами, и Kubernetes не будет автоматически копировать содержимое в том, как это делает Docker. Я бы посоветовал избегать любого совместного использования файловой системы в Kubernetes; также рекомендуется избегать этого в обычном Docker (настройка образа на основе COPY будет нормально работать в настройке Compose с одним хостом).

person David Maze    schedule 04.06.2020
comment
Ааааааа, окей. так это все работает. Хорошо... теперь я понял, большое спасибо за разъяснение. Таким образом, модули действительно должны быть взаимозаменяемыми, другими словами, не иметь состояния. Но как насчет данных базы данных? Давайте возьмем приложение в качестве примера, но полностью без сервисов google/aws и т. д. Таким образом, масштабируемым способом без сохранения состояния будет... несколько виртуальных машин в качестве кластера k8s только для самого приложения (скажем, NodeJs) другая виртуальная машина (не в кластере) для БД. Но как насчет постоянных данных? Нравятся изображения, которые пользователи могут загружать через приложение? Где они хранились? - person ad_on_is; 04.06.2020
comment
Такой контент хорошо вписывается в облачную систему, такую ​​​​как AWS S3 или Google Cloud Storage, или вы можете выделить том внутри кластера для его хранения. В отличие от монтирования привязки Docker, в только что установленном кластере он будет пустым, и вы не сможете получить прямой доступ к его содержимому. Это мало чем отличается от именованного тома Docker, за исключением отсутствия функции заполнения при первой настройке. - person David Maze; 04.06.2020