Следуйте этим подходам, чтобы улучшить развертывание и управление вашими ресурсами данных — независимо от того, используете вы Docker или нет.
Какие? Вы еще не преобразовали все свои данные в Docker? Вы с ума сошли? Получить с контейнерной программой, сынок.
Что ж, как и во многих раскрученных технологиях, оказывается, что именно Docker (и контейнеры в целом) — не лекарство от всех ваших проблем с управлением данными. Это не означает, что технология не может быть полезна для организаций всех типов. Это просто означает, что вы должны сознательно вникать в Docker — с обоими открытыми глазами и всеми предположениями, отброшенными в сторону.
Мэтт Джейнс пишет в « Заблуждении Docker», что Docker делает ваши системы более сложными, и он требует опыта для администрирования, особенно в производственных системах с несколькими хостами. Прежде всего, вам нужен инструмент оркестровки для предоставления, развертывания и управления серверами, на которых работает Docker. Джейнс рекомендует Ansible , который работает как менеджер конфигурации.
Однако Джейнс также предлагает несколько более простых альтернативных методов оптимизации, которые конкурируют с теми, которые предлагает Docker:
- Облачные образы. Сервисы управления приложениями, такие как Morpheus, позволяют сохранять конфигурацию сервера в виде изображения, которое вы копируете для создания новых экземпляров во флэш-памяти. (Инструменты управления конфигурацией поддерживают одинаковую настройку всех серверов, поскольку впоследствии вносятся небольшие изменения).
- Закрепление версий: вы можете дублировать встроенную согласованность Docker, используя закрепление версий, что помогает избежать конфликтов, вызванных неправильно настроенными серверами.
- Контроль версий. Эмулируйте кэширование на уровне изображения Docker с помощью системы контроля версий, которая использует git или другой инструмент контроля версий для кэширования приложений на ваших серверах. Это позволяет обновлять с помощью небольших загрузок.
- Развертывание пакетов. Для развертываний, требующих компиляции / минимизации ресурсов CSS и Javascript или других длительных операций, вы можете предварительно скомпилировать и упаковать код с помощью файла .zip или менеджера пакетов, такого как dpkg или rpm.
Для запуска Docker в производственной среде с несколькими хостами требуется управление многими переменными, включая следующие:
- Защищенный закрытый репозиторий изображений (индекс).
- Способность организовать контейнер разворачивается без простоев.
- Способность организовать откат-развертывание контейнера.
- Возможность сетевого контейнера на нескольких хостах.
- Управление контейнерными бревнами.
- Управление контейнерными базами данных и другими данными.
- Создание изображений, которые могут вместить инициализацию, журналы и подобные компоненты.
Найти идеальный рецепт для обеспечения через шеф-повара
Недавнее прибытие Chef Provisioning представляет концепцию инфраструктуры как кода, как пишет Джон Кейзер в записи от 12 ноября 2014 года в блоге Chef. Инфраструктура как код обещает вам написать конфигурацию кластера в виде кода, что облегчает понимание кластеров. Это также позволяет вашим кластерам стать «тестируемыми, воспроизводимыми, самовосстанавливающимися, [и] идемпотентными», согласно Кейзеру.
Возможности Chef Provisioning включают следующее:
- Кластеры приложений могут быть описаны с помощью набора машинных ресурсов.
- Несколько копий ваших прикладных кластеров могут быть развернуты для тестирования, интеграции, производства и других целей.
- Избыточность и доступность улучшены, потому что кластеры могут быть распределены по многим облакам и машинам.
- При организации развертываний вы уверены, что основная база данных подходит раньше любых дополнительных.
- machine_batch может использоваться для распараллеливания машин, что ускоряет развертывание.
- machine_image может использоваться для создания изображений, которые делают стандартизированные развертывания более быстрыми без потери возможности исправления.
- load_balancer и ресурс машины могут быть использованы для простого масштабирования сервисов.
Keizer предоставляет пример рецепта, который развертывает компьютер базы данных с MySQL на нем. Вы просто устанавливаете Chef и Provisioning, устанавливаете CHEF_DRIVER для своего облачного сервиса и запускаете рецепт:
# mycluster.rb require 'chef/provisioning' machine 'db' do recipe 'mysql' end
Например, чтобы настроить учетную запись Amazon Web Services по умолчанию в ~ / .aws / config, установите для переменной CHEF_DRIVER следующее:
export CHEF_DRIVER=aws # on Unix set CHEF_DRIVER=aws # on Windows
Тогда вы просто запускаете рецепт:
chef-client -z mycluster.rb
Добавьте machine_batch и распараллеливание, чтобы применить конфигурацию к нескольким серверам:
# mycluster.rb require 'chef/provisioning' machine_batch do machine 'db' do recipe 'mysql' end # Create 2 web machines 1.upto(2) do |i| machine "web#{i}" do recipe 'apache2' end end end
В этом примере в machine_batch есть три машины, которые распределяют машины параллельно. Цикл используется для создания нескольких машин, так что вы можете добавить больше машин, изменив 2 на желаемое число, и все они будут созданы в то же время, что и для создания одной машины.
Наконец, запустите эту команду:
chef-client -z mycluster.rb
Машина db будет отвечать «обновленной», а не указывать, что она была создана, потому что машина (как и все ресурсы Chef) является идемпотентной: она знает, что машина db уже настроена правильно, поэтому она ничего не делает.
Простой пример обеспечения Chef в Docker
В сообщении от 28 апреля 2015 года в блоге Safari Шейн Рамей приводит пример использования Docker с Chef Provisioning для создания сети узлов на локальной рабочей станции. Три типа узлов сети охватывают четыре экземпляра: балансировщик нагрузки, два сервера приложений и один или два сервера базы данных. Элементарный пример просто устанавливает пакеты и устанавливает данные узла Chef. У него четыре функции:
- Определите машины в среде: данные узла Chef и рецепт run_list.
- Добавляйте, запрашивайте, обновляйте и удаляйте компьютеры с помощью файла конфигурации среды.
- Предоставьте общий доступ к файлу конфигурации среды, чтобы другие могли запускать свои собственные копии среды.
- Примените контроль версий к конфигурации среды.
Процесс состоит из шести шагов:
- Скопируйте файл примера ~ / deploy-environment.rb на локальный компьютер.
- Загрузите и установите Docker: boot2docker для Mac и Windows или Docker для Linux.
- Скачайте и установите ChefDK .
- Установите библиотеку chef-provisioning-docker для Chef.
- Настройте локальный компьютер, чтобы использовать Chef Zero для подачи поваренных книг.
- Выберите Docker в качестве драйвера.
Теперь, когда вы запускаете образы Docker, вывод будет выглядеть так, как показано на экране ниже:
После выполнения шести шагов для Chef Provisioning в Docker, при запуске образов Docker будет отображаться информация о каждом из ваших образов Docker. Источник: блог Safari
Когда образы запускаются, они обмениваются данными с определенным сервером Chef, который может быть либо сервером Chef для разработки на локальной рабочей станции, либо рабочим сервером Chef. Для использования локального компьютера в качестве сервера Chef необходимо, чтобы он был запущен до того, как экземпляры Docker смогут зарегистрироваться. Для этого выполните следующую команду:
cd ~/chef && chef-zero -H 0.0.0.0 # Listen on all interfaces
Чтобы запустить образы Docker, выполните одну или несколько из следующих команд:
Запустите образы Docker, выполнив одну из этих команд (после инициализации сервера Chef, если вы используете локальный компьютер, как в приведенном выше примере). Источник: блог Safari
Этот метод позволяет разработчикам, работающим над одним и тем же приложением, совместно использовать один файл конфигурации среды и запускать все на одном локальном компьютере. Код может быть загружен быстро и просто для развертывания в одной или нескольких сетевых средах.