it-swarm.com.ru

Как создать локальную среду разработки для Kubernetes?

Kubernetes , кажется, все о развертывании контейнеров в облаке кластеров. Кажется, что не трогает среда разработки и промежуточная среда (или такая).

Во время разработки вы хотите быть как можно ближе к производственной среде с некоторыми важными изменениями:

  • Развертывается локально (или, по крайней мере, где-то, где вы и только вы можете получить доступ)
  • Используйте последний исходный код при обновлении страницы (предположим, что это веб-сайт; в идеале - автоматическое обновление страницы при сохранении локального файла, что можно сделать, если вы смонтируете исходный код и используете такие вещи, как Yeoman ).

Точно так же можно хотеть, чтобы непубличная среда выполняла непрерывную интеграцию.

Поддерживает ли Kubernetes такую ​​среду разработки или нужно что-то создавать, надеясь, что в процессе работы она все еще будет работать?

94
Wernight

Обновление (2016-07-15)

С выпуском Kubernetes 1.3, Minikube теперь является рекомендуемым способом запуска Kubernetes на вашей локальной машине для разработки. 


Вы можете запустить Kubernetes локально через Docker . После запуска узла вы можете запустить модуль, который имеет простой веб-сервер и монтирует том с вашего хост-компьютера. Когда вы попадаете на веб-сервер, он будет читать с тома, и если вы изменили файл на локальном диске, он может служить последней версией. 

58
Robert Bailey

Мы работаем над инструментом для этого. Основная идея заключается в том, что у вас есть удаленный кластер Kubernetes, фактически промежуточная среда, а затем вы запускаете код локально, и он передается по прокси на удаленный кластер. Вы получаете прозрачный доступ к сети, копируемые переменные среды, доступ к томам ... как можно ближе к удаленной среде, но при этом ваш код работает локально и под вашим полным контролем.

Так что вы можете заниматься живым развитием, скажем. Документы на http://telepresence.io

7
Itamar

Мы планируем добавить что-то вроде «горячей перезагрузки», но это не так просто, как сегодня. Однако, если вы чувствуете себя предприимчивым, вы можете использовать rsync с docker exec, kubectl exec или osc exec (все примерно одинаково) для синхронизации локального каталога в контейнере при его изменении. Вы можете использовать rsync с kubectl или osc exec следующим образом:

# rsync using osc as netcat
$ rsync -av -e 'osc exec -ip test -- /bin/bash' mylocalfolder/ /tmp/remote/folder
5
Clayton

Я только начал с Скаффолд

Действительно полезно автоматически вносить изменения в код в локальный кластер.

Для развертывания локального кластера лучше всего использовать Minikube или просто Docker для Mac и Windows, оба из которых включают интерфейс Kubernetes.

4
Ignacio Millán

Еще одна отличная отправная точка - это Vagrant setup , esp. если ваша ОС является Windows. Очевидные преимущества

  • быстрая и безболезненная настройка
  • легко уничтожить/воссоздать машину
  • неявное ограничение на ресурсы
  • возможность тестирования горизонтального масштабирования путем создания нескольких узлов

Недостатки - вам нужно много оперативной памяти, а VirtualBox - это VirtualBox ... к лучшему или к худшему.

Смешанным преимуществом/недостатком является сопоставление файлов через NFS. В нашей настройке мы создали два набора определений RC - один, который просто загружает образ докера наших серверов приложений; другая с 7 дополнительными строками, которые устанавливают сопоставление файлов из HostOS -> Vagrant -> VirtualBox -> CoreOS -> Kubernetes pod; перезаписать исходный код из образа Docker.

Недостатком этого является файловый кеш NFS - с ним проблематично, без него проблематично медленно. Даже установка mount_options: 'nolock,vers=3,udp,noac' не избавляет полностью от проблем с кэшированием, но работает в большинстве случаев. Некоторые задачи Gulp, выполняемые в контейнере, могут занимать 5 минут, если они занимают 8 секунд в ОС хоста. Хороший компромисс, кажется, mount_options: 'nolock,vers=3,udp,ac,hard,noatime,nodiratime,acregmin=2,acdirmin=5,acregmax=15,acdirmax=15'.

Что касается автоматической перезагрузки кода, это зависит от языка, но мы довольны разработчиком Django для Python и Nodemon для Node.js. Для фронтенд-проектов вы, конечно, многое можете сделать с помощью чего-то вроде gulp + browserSync + watch, но для многих разработчиков несложно обслужить Apache и просто сделать традиционное сложное обновление.

Мы сохраняем 4 набора файлов yaml для Kubernetes. Dev, "devstable", сцена, прод. Различия между этими

  • переменные env, явно устанавливающие среду (dev/stage/prod)
  • количество реплик
  • devstable, stage, prod использует изображения докера
  • dev использует образы Docker и отображает папку NFS с исходным кодом поверх них.

Очень полезно создавать много псевдонимов bash и автозаполнения - я могу просто напечатать rec users, и он будет делать kubectl delete -f ... ; kubectl create -f .... Если я хочу, чтобы вся установка была запущена, я набираю recfo, и она воссоздает дюжину сервисов, извлекает последние образы докера, импортирует последний дамп базы данных из Staging env и очищает старые файлы Docker для экономии места.

4
analytik

См. https://github.com/kubernetes/kubernetes/issues/12278 для получения информации о том, как смонтировать том с хост-машины, эквивалент:

docker run -v hostPath:ContainerPath
2
akshayl

Хороший цикл обратной связи по местному развитию - тема быстрого развития экосистемы Кубернетес.

Разбивая этот вопрос, я полагаю, что есть несколько инструментов, которые хорошо поддерживают эту цель.

Докер для Mac Kubernetes

Docker для Mac Kubernetes ( Docker Desktop - это общее название кроссплатформенности) предоставляет отличный вариант для локальной разработки. Для виртуализации используется HyperKit , который построен на собственной платформе гипервизора в macOS вместо VirtualBox.

Функция Kubernetes была впервые выпущена в качестве бета-версии на канале Edge в январе 2018 г. и с тех пор прошла долгий путь, став сертифицированным Kubernetes в апреле 2018 г. и получив стабильный канал в июле 2018 г. .

По моему опыту, с Minikube работать намного проще, особенно в macOS, особенно когда речь идет о таких проблемах, как RBAC, Helm, гипервизор, частный реестр и т.д.

Шлем

Что касается распространения вашего кода и получения обновлений локально, Helm является одним из самых популярных вариантов. Вы можете публиковать свои приложения через CI/CD в виде диаграмм Хелма (а также базовых образов Docker, на которые они ссылаются). Затем вы можете извлечь эти диаграммы из реестра карт Helm локально и обновить их в своем локальном кластере.

Лазурный черновик

Вы также можете использовать такой инструмент, как черновик Azure , чтобы выполнять простые локальные развертывания и генерировать базовые диаграммы Helm из общеязыковых шаблонов, наподобие buildpack-пакетов, для автоматизации этого фрагмента головоломки.

Skaffold

Скаффолд похож на черновик Azure, но более зрелый, гораздо более широкий по объему и сделан Google. У него очень подключаемая архитектура. Я думаю, что в будущем все больше людей будут использовать его для разработки локальных приложений для Kubernetes.

Если вы использовали React, я думаю о Skaffold как " Создать приложение React для Kubernetes".

Композицию или Композицию на Кубернетес

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

Kompose - конвертер Docker Compose в Kubernetes. Это может быть полезным путем для тех, кто уже запускает свои приложения в виде коллекций контейнеров локально. 

Compose в Kubernetes является недавно открытым исходным кодом (декабрь 2018) предложение от Docker, которое позволяет развертывать файлы Docker Compose непосредственно в кластер Kubernetes через пользовательский контроллер.

2
Taylor Edmiston

Kubespary полезно при настройке локальных кластеров. В основном я использовал кластер на основе бродяги на локальной машине.

Конфигурация Kubespray Вы можете настроить эти переменные, чтобы получить желаемую версию kubernetes.

1
YAP

Как указывалось ранее Робертом, миникуб - это путь. 

Здесь это краткое руководство, чтобы начать работу с Minikube. Основные шаги: 

  • Установить миникуб

  • Создать кластер мини-кубов (на виртуальной машине, которая может быть VirtualBox или Docker для Mac или HyperV в случае Windows)

  • Создать Docker-образ файла вашего приложения (с помощью Dockerfile)

  • Запустите образ, создав развертывание

  • Создайте сервис, который предоставляет ваше приложение, чтобы вы могли получить к нему доступ.

0
Rafa

Вы можете использовать "portainer" для целей разработки. Это легко и не требует запоминания команды или манифеста yaml.

0
hk'

Недостатком использования minkube является то, что он порождает другую виртуальную машину поверх вашей машины. Кроме того, в последней версии minikube требуется минимум 2 ЦП и 2 ГБ RAM из вашей системы, что делает его довольно тяжелым, если у вас недостаточно ресурсов системы.

По этой причине я перешел на microk8s для разработки на kubernetes, и мне это нравится. microk8s поддерживает DNS, локальное хранилище, панель мониторинга, istio, вход и многое другое, все, что вам нужно для тестирования ваших микросервисов.

Он предназначен для быстрой и легкой установки восходящего потока Kubernetes, изолированной от вашей локальной среды. Эта изоляция достигается за счет упаковки всех двоичных файлов для Kubernetes, Docker.io, iptables и CNI в единый пакет с привязкой.

Один узел kubernetes кластера может быть установлен в течение одной минуты с помощью одной команды:

snap install microk8s --classic

Убедитесь, что в вашей системе не работает ни одна докерная или кублетная служба. Microk8s автоматически установит все необходимые сервисы.

Пожалуйста, просмотрите следующую ссылку, чтобы включить другие дополнения в microk8s.

https://github.com/ubuntu/microk8s

Вы можете проверить статус, используя:

[email protected]:~/PycharmProjects/k8sClient$ microk8s.status
microk8s is running
addons:
ingress: disabled
dns: disabled
metrics-server: disabled
istio: disabled
gpu: disabled
storage: disabled
dashboard: disabled
registry: disabled
0
Prafull Ladha

Вы можете использовать удаленный кластер kubernetes и настроить свои локальные машины для подключения к этому кластеру. Используйте команды kubectl cp для копирования кода в запущенные модули для горячей перезагрузки кода во время разработки.

0
Rajith