Kubernetes - возможно ли развертывание контейнеров без сервера
При разработке приложения у меня есть два ограничения
- Я должен использовать микросервисную архитектуру
- Я должен развернуть с помощью Kubernetes
Я думал о развертывании в Serverless, потому что масштабируемость и доступность - главный двигатель для моего приложения. Насколько я знаю, когда я использую развертывание без сервера, обычно мне нужно приобретать "Функции как сервис" (FaaS) у поставщиков услуг, и нет никакого способа управлять внутренними компонентами развертывания. Интересно, смогу ли я использовать Kubernetes для управления развертыванием, даже если я развертываю без сервера.
Я новичок в этой области. Пожалуйста, позвольте мне руководствоваться, если я пропускаю какую-либо часть.
2 ответа
Они оба разные понятия, и вам нужно знать о нескольких вещах
Kubernetes
Kubernetes - это контейнерный оркестратор, который означает, что вы можете управлять своими контейнерами в больших масштабах, и это не ограничивается развертыванием, откатом, балансировкой нагрузки и т. Д. Используя Kubernetes, вы ограничены кластерными (работающие виртуальные машины / узлы) . Скажем, у вас есть 10 узлов, тогда Kubernetes будет управлять всеми вашими контейнерами в кластере. Вы можете масштабировать узлы в соответствии с вашими требованиями, и Kubenertes будет управлять этими узлами. Это самый известный и известный подход к микросервисам.
Безсерверный - Функции как сервис
Это относительно новая концепция, и создание микросервисов, основанных исключительно на этом, не рекомендуется. Есть много ограничений вокруг этого. Функция как услуга (без сервера) обычно используется для дополнения архитектуры микросервисов. Предполагается, что функции основаны на задачах, например, отправка электронной почты, файл процесса, где вам не нужны постоянно запущенные и работающие сервисы.
Безсерверный и Кубернетский
Если вы хотите создать свою собственную бессерверную функцию в своей среде, тогда другой концепцией является использование Open FaaS framework. Вы должны использовать Kubernetes в качестве среды выполнения ваших функций. Этот подход очень отличается и очень сложен, вам это может не понадобиться.
Скейлинг и Кубернетес
Там нет серебряной пули и есть компромиссы. Kubernetes - лучший выбор для микросервисов, и для управления большим трафиком или скачками необходимо поддерживать узлы кластера таким образом, чтобы справляться с вашей нагрузкой. Это также зависит от вашего поставщика облачных услуг. например, Micorosft Azure недавно взломал виртуальный кублет. Короче говоря, когда вы изначально определяете свой кластер (скажем, 5 узлов), и в любой момент ваша система получает всплеск, виртуальные узлы (экземпляр контейнера Azure) создаются для этого конкретного момента, а когда когда трафик возвращается к нормальному состоянию, то этот виртуальный узел уходит прочь, и вы вернетесь к обычным узлам кластера (в данном случае 5) .
Опять же, вам нужно получить доступ к тому, чего вы пытаетесь достичь, и разработать свое решение.
Надеюсь, это поможет!
Редактировать на основе других ответов
Существует разница между безсерверной инфраструктурой и выполнением вашего кода (FaaS) в безсерверной среде.
FAAS
Когда дело доходит до FaaS (функции как службы), вы абстрагированы от сервера и можете запускать свой код в режиме без сервера. Теперь вы можете размещать свои функции у разных облачных провайдеров, таких как AWS, Azure и т. Д. В этом случае вам не нужно беспокоиться о каком-либо сервере под ним, а выбросы управляются облачным провайдером. Однако, если вы хотите работать без серверов в Kubernetes (управляемых вами), вы будете делать это с помощью функций времени выполнения (FaaS). Вам не нужно беспокоиться о времени выполнения или фреймворке, просто упаковывайте код и запускайте его, но вы все равно привязаны к пределу узлов, поэтому для управления шипами нужно управлять узлами kubernetes.
Kubernetes Serverless как инфраструктура
Это фактически безсерверная инфраструктура Kubernetes, где ваш кластер Kubernetes расширяется путем подключения виртуальных узлов к вашему кластеру. Теперь, если у вас скачок или неожиданный трафик, вам не нужно беспокоиться о своих узлах. Ваши kubernetes достаточно интеллектуальны, чтобы расширить трафик на виртуальные узлы, пока не всплески и не сжимаются обратно. В этой инфраструктуре вы можете запускать полностью управляемые приложения или FaaS. Виртуальный проект Kublet разрабатывается Microsoft и AWS для решения такого сценария, когда вы фактически получаете безсерверные узлы, используя Kubernetes.
Таким образом, где бы вы ни были ответственны за управление узлами, это практически не безсерверно с точки зрения инфраструктуры. Но в то же время вы можете использовать эти узлы для запуска собственной среды выполнения FaaS на этих узлах для запуска нескольких экземпляров различных функций. Следующее 6-минутное видео поможет вам лучше понять разницу, которую я могу объяснить.
https://www.youtube.com/watch?v=_GOuP9Q3BqE&list=LLxfaEBq0Fa7eiKokf98ojxA&index=5&t=0s
Отказ от ответственности: я работаю над этим проектом
Вы смотрели на Knative здесь?
Безсерверность на k8s - это то, что делает Knative. Он расширяет Kubernetes через CRD и предоставляет более удобный для разработчиков приложений / сервисов интерфейс с автоматическим масштабированием, управлением конфигурацией / маршрутами и растущим списком источников событий. Взглянуть