Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Контейнеризация веб-приложений

Контейнеризация веб-приложений

Alexander Kirillov

April 18, 2017
Tweet

More Decks by Alexander Kirillov

Other Decks in Technology

Transcript

  1. /evrone. ОСНОВНЫЕ РАЗЛИЧИЯ МЕЖДУ ТЕХНОЛОГИЯМИ Virtual Machines Docker/rkt containers Изоляция

    процесса на уровне HW Изоляция процесса на уровне OS Полная изоляция ресурсов от Host OS Общие ресурсы с Host OS - - - Возможность наследования образов Больше время на старт (OS + app) Очень быстрый старт приложения Сложно собрать свой образ OS Простая сборка образа Большие размеры образов Небольшие размеры образов Сложная кластеризация Простая изоляция компонентов кластера 2
  2. /evrone. УПАКОВЫВАЕМ НАШЕ ПРИЛОЖЕНИЕ В КОНТЕЙНЕР FROM ubuntu
 AUTHOR Kirillov

    A <[email protected]>
 ENV RAILS_ENV=production
 
 COPY Gemfile Gemfile.lock /app
 RUN bundle install
 
 CMD ["rails", "s"] 5
  3. /evrone. ВЕБ-ПРИЛОЖЕНИЕ ‣ Один или несколько контейнеров ‣ Контейнеры изолированы

    ‣ Связь по сети или через volumes ‣ Запуск нескольких копий одновременно ‣ Роутинг 7
  4. /evrone. БАЗА ДАННЫХ ИЛИ KV-ХРАНИЛИЩЕ ‣ Не храните данные в

    том же контейнере ‣ Различные виды persistent volumes ‣ Репликация, если возможно ‣ HA-практики ‣ Используйте готовые сервисы 8
  5. /evrone. ЛОГИ ПРИЛОЖЕНИЙ http://www.tomstockton.us/jokes/picture_pages/pictures_file_062.htm ‣ Не храните логи в контейнере

    ‣ STDOUT ‣ Агрегация в одном месте ‣ Сервисные контейнеры ‣ Внешние сервисы 9
  6. /evrone. КАКИЕ ЕСТЬ РЕШЕНИЯ? LOGSTASH ‣ ElasticSearch - индексация и

    хранение логов ‣ Logstash - агрегация и процессинг логов ‣ Logspout - передача логов контейнеров в logstash ‣ Kibana - визуализация и поиск логов 10
  7. /evrone. КАКИЕ ЕСТЬ РЕШЕНИЯ? FLUENTD ‣ ElasticSearch - индексация и

    хранение логов ‣ --log-driver=fluentd ‣ Автоматическое тэгирование
 fluentd-tag=docker.{{.Name}} ‣ Kibana - визуализация и поиск логов 11
  8. /evrone. МОНИТОРИНГ ‣ Prometheus ‣ Sysdig ‣ Datadog ‣ NewRelic

    ‣ Heapster + cAdvisor ‣ Kubernetes Dashboard 12
  9. /evrone. УПАКУЕМ RUBY ON RAILS ПРИЛОЖЕНИЕ ‣ Выберем версию Ruby

    
 FROM ruby:2.4-alpine ‣ Установим все production переменные окружения 
 ENV RAILS_ENV=production 14
  10. /evrone. УПАКУЕМ RUBY ON RAILS ПРИЛОЖЕНИЕ ‣ Выберем версию Ruby

    
 FROM ruby:2.4-alpine ‣ Установим все production переменные окружения 
 ENV RAILS_ENV=production ‣ Закэшируем зависимые пакеты
 COPY Gemfile Gemfile.lock /app/
 RUN bundle install --retry=4 --jobs=2 --without development test 15
  11. /evrone. УПАКУЕМ RUBY ON RAILS ПРИЛОЖЕНИЕ ‣ Выберем версию Ruby

    
 FROM ruby:2.4-alpine ‣ Установим все production переменные окружения 
 ENV RAILS_ENV=production ‣ Закэшируем зависимые пакеты
 COPY Gemfile Gemfile.lock /app/
 RUN bundle install --retry=4 --jobs=2 --without development test ‣ Добавим приложение и сбилдим ассеты
 ADD . /app
 RUN bundle exec rake assets:precompile 16
  12. /evrone. НОВЫЕ ИНСТРУМЕНТЫ KUBERNETES ‣ Управление сервисами как пакетами ‣

    Можно подключить свой репозиторий ‣ Возможности настроек пакетов через переменные и шаблоны ‣ Управление релизами пакетов 23
  13. /evrone. ЧТО БЫЛО? ‣ Несколько машин на Azure ‣ Вручную

    настроенный VPC, виртуальная сеть flannel ‣ Настройка инфраструктуры через Ansible ‣ Ручное добавление нод ‣ Ручное расширение пула агентов https://vexor.io 24
  14. /evrone. ПОЛГОДА В БОЮ. ЧТО ИМЕЕМ СЕЙЧАС. ‣ Кластер на

    AWS EC2 инстансах ‣ Kubernetes для управления кластером ‣ Автозакупка нод для запуска задач ‣ Динамический пул агентов ‣ Практически ежедневные релизы без остановки сервиса ‣ Более 1000 запусков приложений в сутки https://vexor.io 25
  15. /evrone. DOCKER-SYNC Проблемы при локальной разработке в контейнерах: ‣ Разные

    OS - разный Docker ‣ Синхронизация файловых систем ‣ Скорость IO внутри контейнера ‣ IO events ‣ Права доступа и владелец файлов http://docker-sync.io/ 27
  16. /evrone. DOCKER-SYNC Docker-Sync ‣ Поддерживает все docker-machine и docker-for-mac ‣

    2 стратегии синхронизации rsync и unison ‣ Односторонняя синхронизация rsync и двусторонняя unison ‣ Поддержка user-remapping при проблемах с правами доступа ‣ Поддержка docker-compose и перекрываемых docker-compose.yml ‣ Теоретически можно запускать на удаленных машинах где есть docker http://docker-sync.io/ 28