Как делать местное развитие с Kubernetes?


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

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

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

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

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

7 81

7 ответов:

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

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


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

еще одна отличная отправная точка это настройки бродяги, esp. если вашей основной ОС является Windows. Очевидные преимущества являются

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

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

смешанное преимущество / недостаток-это отображение файлов через NFS. В нашей настройке мы создали два набора определений RC-один, который просто загружает образ docker наших серверов приложений; другой с 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 / stage / prod)
  • число реплик
  • devstable, stage, prod использует docker images
  • dev использует изображения docker и отображает папку NFS с исходным кодом их.

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

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

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

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

Я только начал с Skaffold

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

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

см.https://github.com/kubernetes/kubernetes/issues/12278 для того, как смонтировать том с главной машины, эквивалент:

docker run -v hostPath:ContainerPath

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

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