71

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

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

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

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

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

+0

Взгляните на Openshift Origin. Это следующая версия Openshift и построена на вершине Кубернетеса. Выполняется автономно в контейнере Docker. –

+0

@ MarkO'Connor Я больше искал развертывание в Google Cloud, но это больше решений для развертывания. Если у вас есть решение с OpenShift Origin, которое позволяет локальную разработку (в основном, перезагрузить последний локальный файл), пожалуйста, поделитесь им как ответом, мне было бы интересно. – Wernight

+0

Вы нашли решение? У меня есть кубернеты, работающие поверх мезо в моем локальном кластере развития. Я планирую построить микросервисы в ходу, которые будут развернуты в контейнерах на кубернетах. Я хотел бы иметь возможность сохранять свои изменения и автоматически создавать двоичные файлы и перезапускать контейнеры. На самом деле не было изменений, чтобы проверить это, но я думаю, что создание в двоичном формате на vms, а затем перезапуск модуля может быть немного медленным. – F21

ответ

47

Update (2016-07-15)

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


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

+2

Документы говорят, что это не рекомендуемый метод метода, и что «Minikube - рекомендуемый метод запуска Kubernetes на вашей локальной машине». – Jatin

+1

Вы правы, я обновил свой ответ. –

+0

Я не думаю, что мини-куб подходит для разработки самой k8s, я прав? – harryz

3

Роскошная «горячая перезагрузка» - это то, что мы планируем добавить, но не так просто, как может быть сегодня. Однако, если вы чувствуете себя авантюристом, вы можете использовать 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 
+0

Сама по себе горячая перезагрузка и должна обрабатываться веб-каркасом, который вы используете, здесь йомен обычно устанавливает это. Отсутствует, как включить его. Для этого необходимо установить локальный том. Если работает answser от Robert, это должно быть верным решением. – Wernight

4

Еще одна интересная точка это Vagrant setup, особ. если ваша ОС хоста - 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'.

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

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

  • Env переменные явно настройки среды (DEV/этап/прод)
  • количество реплик
  • devstable, сцена, прод использует DOCKER изображения
  • DEV использует DOCKER изображения, и отображает папку NFS с исходным кодом.

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

4

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

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

1

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

Kubespray configuration Вы можете настроить эти переменные, чтобы иметь желаемую версию кубернетов.