Развертывание через конфигурационный файл (например, stage.yaml, live.yaml) и т. Д.
Я обнаружил, что Helm хорошо работает для этого.«Диаграмма» Helm может быть развернута с соответствующим набором «значений» в файле YAML, и их можно использовать для настройки различных частей общего развертывания.
Одна полезная часть Helm состоит в том, что существует стандартная библиотека графиков .Там, где вы говорите, что вам нужен MySQL, вы можете helm install stable/mysql
и получить предварительно упакованную установку, не беспокоясь о конкретных деталях наборов с состоянием, постоянных томов, и т. Д.
Вы бы упаковаливсе, что вы предлагаете здесь, в одной диаграмме, которая будет иметь несколько (шаблонных) YAML-файлов для разных частей Kubernetes.
Обработка типа: модуль или тип: развертывание
Развертывание создаст некоторое (настраиваемое) количество идентичных копий модуля.Спецификация модуля в спецификации развертывания содержит все необходимые детали.Развертывание YAML заменяет существующий модуль YAML.
Обычно вы не создаете модули напрямую.В частности, жизненный цикл обновления может быть немного сложнее сделать вручную, и развертывание делает всю тяжелую работу за вас.
Лучше ли иметь конфигурацию POD, например ...
Помните, что обычная задача состоит в том, что при развертывании создается некоторое количество копий модуля.Если у вас есть обновленная версия программного обеспечения, вы помещаете ее в хранилище образов Docker и изменяете тег изображения в спецификации развертывания.Kubernetes запустит дополнительные копии модуля с новой спецификацией модуля, а затем уничтожит старые.
Два основных правила здесь:
Если жизненные циклы компонентовразные, они должны быть в разных развертываниях.Например, вы не хотите уничтожать базу данных при обновлении кода, поэтому они должны находиться в отдельных развертываниях.
Если количество реплик различно, они должны бытьв разных развертываниях.Вашему основному сервису может потребоваться 3 или 5 реплик, в зависимости от нагрузки;nginx просто направляет HTTP-сообщения и может нуждаться только в 1 или 3;базы данных не могут быть реплицированы и могут использовать только 1.
В показанной вами настройке у меня будет четыре отдельных развертывания, по одному для MySQL, Redis, прокси-сервера nginx,и основное приложение.
Содержимое webroot поступает из git-репо.
Самый простой способ - встроить его в образ, возможно, в изображение nginx.
Если он «большой» (размером в гигабайты), может оказаться более полезным просто разместить этот статический контент где-то за пределами Kubernetes.Все, что имеет статический хостинг файлов, будет работать нормально.
Насколько мне известно, простой способ скопировать произвольный контент в постоянный том без написания контейнера для этого.
ВашВопрос вообще не затрагивает услуги Kubernetes.Это основные, и вы должны прочитать их.В частности, когда ваше приложение обращается к двум хранилищам данных, оно будет ссылаться на службу, а не на модуль MySQL напрямую.
В зависимости от вашей среды, также рассмотрите возможность размещения баз данных за пределами Kubernetes.Их жизненный цикл очень отличается от контейнеров вашего приложения: вы никогда не хотите останавливать базу данных и действительно не хотите, чтобы управляемое хранилище базы данных было случайно удалено.Возможно, вам будет проще и безопаснее использовать настройку базы данных с нуля или использовать размещенную настройку базы данных.(Мой личный опыт в основном связан с AWS, и вы можете использовать RDS для экземпляра MySQL, Elasticache для Redis и S3 для статического хостинга файлов, описанного выше.)