Статьи

Советы по обеспечению Docker от экспертов

Следуйте этим подходам, чтобы улучшить развертывание и управление вашими ресурсами данных — независимо от того, используете вы Docker или нет.

Какие? Вы еще не преобразовали все свои данные в Docker? Вы с ума сошли? Получить с контейнерной программой, сынок.

Что ж, как и во многих раскрученных технологиях, оказывается, что именно Docker (и контейнеры в целом) — не лекарство от всех ваших проблем с управлением данными. Это не означает, что технология не может быть полезна для организаций всех типов. Это просто означает, что вы должны сознательно вникать в Docker — с обоими открытыми глазами и всеми предположениями, отброшенными в сторону.

Мэтт Джейнс пишет в «  Заблуждении Docker»,  что Docker делает ваши системы более сложными, и он требует опыта для администрирования, особенно в производственных системах с несколькими хостами. Прежде всего, вам нужен инструмент оркестровки для предоставления, развертывания и управления серверами, на которых работает Docker. Джейнс рекомендует  Ansible , который работает как менеджер конфигурации.

Однако Джейнс также предлагает несколько более простых альтернативных методов оптимизации, которые конкурируют с теми, которые предлагает Docker:

  1. Облачные образы. Сервисы управления приложениями, такие как  Morpheus,  позволяют сохранять конфигурацию сервера в виде изображения, которое вы копируете для создания новых экземпляров во флэш-памяти. (Инструменты управления конфигурацией поддерживают одинаковую настройку всех серверов, поскольку впоследствии вносятся небольшие изменения).
  2. Закрепление версий: вы можете дублировать встроенную согласованность Docker, используя закрепление версий, что помогает избежать конфликтов, вызванных неправильно настроенными серверами.
  3. Контроль версий. Эмулируйте кэширование на уровне изображения Docker с помощью системы контроля версий, которая использует git или другой инструмент контроля версий для кэширования приложений на ваших серверах. Это позволяет обновлять с помощью небольших загрузок.
  4. Развертывание пакетов. Для развертываний, требующих компиляции / минимизации ресурсов CSS и Javascript или других длительных операций, вы можете предварительно скомпилировать и упаковать код с помощью файла .zip или менеджера пакетов, такого как dpkg или rpm.
Для запуска Docker в производственной среде с несколькими хостами требуется управление многими переменными, включая следующие:
  1. Защищенный закрытый репозиторий изображений (индекс).
  2. Способность организовать контейнер разворачивается без простоев.
  3. Способность организовать откат-развертывание контейнера.
  4. Возможность сетевого контейнера на нескольких хостах.
  5. Управление контейнерными бревнами.
  6. Управление контейнерными базами данных и другими данными.
  7. Создание изображений, которые могут вместить инициализацию, журналы и подобные компоненты.
Найти идеальный рецепт для обеспечения через шеф-повара

Недавнее прибытие Chef Provisioning представляет концепцию инфраструктуры как кода, как пишет Джон Кейзер в записи от  12 ноября 2014 года  в блоге Chef. Инфраструктура как код обещает вам написать конфигурацию кластера в виде кода, что облегчает понимание кластеров. Это также позволяет вашим кластерам стать «тестируемыми, воспроизводимыми, самовосстанавливающимися, [и] идемпотентными», согласно Кейзеру.

Возможности Chef Provisioning включают следующее:
  1. Кластеры приложений могут быть описаны с помощью набора машинных ресурсов.
  2. Несколько копий ваших прикладных кластеров могут быть развернуты для тестирования, интеграции, производства и других целей.
  3. Избыточность и доступность улучшены, потому что кластеры могут быть распределены по многим облакам и машинам.
  4. При организации развертываний вы уверены, что основная база данных подходит раньше любых дополнительных.
  5. machine_batch может использоваться для распараллеливания машин, что ускоряет развертывание.
  6. machine_image может использоваться для создания изображений, которые делают стандартизированные развертывания более быстрыми без потери возможности исправления.
  7. 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. У него четыре функции:

  1. Определите машины в среде: данные узла Chef и рецепт run_list.
  2. Добавляйте, запрашивайте, обновляйте и удаляйте компьютеры с помощью файла конфигурации среды.
  3. Предоставьте общий доступ к файлу конфигурации среды, чтобы другие могли запускать свои собственные копии среды.
  4. Примените контроль версий к конфигурации среды.

Процесс состоит из шести шагов:

  1. Скопируйте файл примера ~ / deploy-environment.rb на локальный компьютер.
  2. Загрузите и установите Docker:  boot2docker  для Mac и Windows или  Docker  для Linux.
  3. Скачайте и установите  ChefDK .
  4. Установите библиотеку chef-provisioning-docker для Chef.
  5. Настройте локальный компьютер, чтобы использовать Chef Zero для подачи поваренных книг.
  6. Выберите 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

Этот метод позволяет разработчикам, работающим над одним и тем же приложением, совместно использовать один файл конфигурации среды и запускать все на одном локальном компьютере. Код может быть загружен быстро и просто для развертывания в одной или нескольких сетевых средах.

Чтобы узнать больше о лучших практиках в области управления контейнерами и облаками, следите за  Morpheus  в  Twitter  или  LinkedIn.