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

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

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

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

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

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

Ответ 1

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

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


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

Ответ 2

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

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

Ответ 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

Ответ 4

Еще одна отличная отправная точка - это настройка бродяг, особенно. если ваша ОС хоста - 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 devserver для Python и Nodemon для Node.js. Для проектов с интерфейсом вы можете, конечно, многое сделать с чем-то вроде gulp + browserSync + watch, но для многих разработчиков это не сложно обслуживать из Apache и просто делать традиционное жесткое обновление.

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

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

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

Ответ 5

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

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

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

Ответ 7

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

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

Докер для Mac Kubernetes

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

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

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

Шлем

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

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

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

Skaffold

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

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

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

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

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

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

Ответ 8

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

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

Ответ 9

Посмотрите на https://github.com/okteto/okteto и облако Okteto. Ценность предложения состоит в том, чтобы иметь опыт классической разработки, чем работать локально, до докера, где у вас могут быть горячие перезагрузки, инкрементные сборки, отладчики... но все ваши локальные изменения немедленно синхронизируются с удаленным контейнером. Удаленные контейнеры предоставляют вам доступ к скорости облака, обеспечивают новый уровень совместной работы и интегрируют разработку в производственную среду. Кроме того, это устраняет бремя локальных установок.

Ответ 10

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

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

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

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

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

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

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

Ответ 11

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

Ответ 12

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

По этой причине я перешел на 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

Ответ 13

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