Контейнеры предназначены для того, чтобы иметь возможность регулировать использование ресурсов с помощью cgroups , и поэтому, пока мы можем прогнозировать использование, у нас не должно быть проблем (с производительностью) при его запуске вконтейнер.Однако есть и другие соображения, помимо использования ресурсов.
В такой архитектуре, как Kubernetes, становится сложнее управлять развертыванием баз данных, отчасти потому, что контейнеры теперь эфемерны.Если модуль выходит из строя на данном узле, нет никакой гарантии, что он будет восстановлен на том же узле, и поэтому необходимо учитывать особые соображения для приложений с состоянием (модуль должен быть подключен к тому же объему при повторном запуске и т. Д.),Вот где приходят такие конструкции, как StatefulSets . Итак, это работает, и решения и очень хорошо продуманы, но есть еще несколько рабочих циклов, через которые нужно прыгать.
Существуют также такие вещи, как Операторы , которые могут справляться со сложными потребностями при запуске и управлении приложением с состоянием, таким как база данных или распределенная очередь сообщений.Эти проекты могут быть довольно зелеными время от времени , но есть много поведения, которое было бы трудно организовать на голом металле, которое мы получаем прямо из коробки.
Более или менее, вконец дня, работает с сохранением состояния приложений, такими как базы данные или очереди сообщений на Kubernetes (или другого контейнер оркестраторах) является спорным вопросом.Как и все проектные решения, существуют компромиссы с отказоустойчивостью, сложностью и отладкой.Многие крупные компании делают это на производстве, поэтому это ни в коем случае не является разумным.