Виртуализировать или не виртуализировать сервер с нуля для развертывания в Kubernetes
Я хотел бы развернуть kubernetes на большом физическом сервере (24 ядра), и я не уверен в отношении ряда вещей.
Каковы плюсы и минусы создания виртуальных машин для кластера k8s, кроме запуска на голом железе.
У меня есть следующие соображения:
- Создание vms позволит изолировать рабочую нагрузку. Новые VMS для экспериментов могут быть созданы и назначены для разработчиков.
- С другой стороны, когда k8 работают на голом железе, для каждого разработчика можно создать новое NAMESPACE для экспериментов, и они могут запускать в нем свой код. Ведь их код должен быть запущен в Docker-контейнерах.
Безопасность:
- Наличие vms ограничит объем доступа, который будет предоставлен будущим сопровождающим, ограничив количество ущерба, который может быть нанесен. С другой стороны, основной задачей для любого будущего сопровождающего будет добавление / удаление узлов, и для этого им потребуется доступ с нуля.
Аутентификация:
- В настоящий момент разработчики будут касаться сервера только тогда, когда их код проходит через конвейер CI и их развертываемые развертывания развернуты. Но как насчет просмотра журналов? Можем ли мы настроить многоуровневую аутентификацию kubectl, чтобы позволить разработчикам получать доступ только к тем пространствам имен, которые были им назначены (я считаю, что это должно быть возможно с помощью плагина авторизации пространства имен k8s).
Ряд vms уже существует на сервере. Будет ли это проблемой?
3 ответа
128 ядер и сомнений.... Это много ядер для одного сервера.
Для kubernetes, однако, это не имеет значения: Kubernetes может использовать серверы разных размеров и использовать их по максимуму. Однако, если вы объедините процессы главного сервера и процессы узла / рабочего на одном сервере, вы можете создать нежелательные проблемы с ресурсами. Вы можете управлять ими с помощью пространств имен, как вы уже упоминали.
Мы используем непрерывную интеграцию с пространствами имен в единой среде dev/qa kubernetes, в которой изменения имеют свое собственное пространство имен (поэтому мы запускаем много разных пространств имен) и запускаем развертывания полной среды в этих пространствах имен. Куча сценариев оболочки используются для управления этим. Это работает как с большим сервером, как то, что у вас есть, так и с небольшими (или виртуальными) блоками. Преимущество виртуализации для вас может заключаться, главным образом, в разделении большого блока на более мелкие, чтобы вы могли использовать его и для других целей, а не только для kubernetes (да, kubernetes работает, кроме MS Windows, без рабочих столов, без модулей ядра для целей VPN и т. Д.).).
Я бы разделил dev и prod в виде разных vms. Однажды у меня было веб-приложение внутри докера, которое использовало слишком много потоков, поэтому демон докера на хосте потерпел крах. К счастью, он был ограничен одним хозяином. Вы можете защитить это, установив лимиты, но это риск: одна ошибка в dev может также снизить производительность.
Я думаю, что ответ "это зависит!" что на самом деле не является ответом. Лично я бы разделил машину с помощью виртуальных машин и развернул ее таким образом. У вас больше гибкости в отношении того, сколько ресурсов сервера вы выделяете, и вы можете легко создавать новые среды, а затем легко разрушать.
Даже если эти vms действительно большие, я думаю, что ими все еще легче управлять, учитывая, что у вас уже есть vm на машине.
Тем не менее, нет технической причины, по которой вы не можете запустить сервер с одним узлом, но вы можете столкнуться с проблемами из-за простоя с обновлениями (если это проблема), а также если этот сервер нуждается в исправлении или перезагрузке, то весь ваш сервер кластер не работает
Я бы посмотрел на потребности вашей среды в высокой доступности и времени безотказной работы, а также на то, как вы собираетесь развертывать виртуальные машины (если вы идете по этому пути), и решу, что работает лучше для вас.