DevOps

DevOps и Continuous Delivery

Был бы код — DevOps найдётся!

Сопровождение проектов по методологии DevOps — приоритетное направление нашей деятельности. Что мы подразумеваем и предлагаем под DevOps?

  • Выстраивание и сопровождение всего комплекса процессов CI/CD: Continuous Integration, Continuous Delivery и Continuous Deployment.
  • Применение подхода Infrastructure as Code (IaC) для формального описания инфраструктуры, требуемой вашим приложением, и интеграции кода инфраструктуры с кодом приложения, что обеспечивает общий CI/CD для них.
  • Эффективное взаимодействие с вашей командой: поддержка постоянных коммуникаций между разработчиками, QA-специалистами, системными администраторами, менеджерами.
  • Готовность наших архитекторов поделиться опытом эксплуатации Open Source-решений, порекомендовать оптимальную архитектуру для вашего приложения.
  • Подготовка для высоких нагрузок (highload), включая оптимизацию с низкого (аппаратного и системного) уровня до конфигураций прикладных служб, проведение нагрузочного тестирования.
devops

Для кого это?

  • Компании, ведущие разработку по принципам Agile с командами любого размера, получат работающие и обслуживаемые процессы CI/CD и IaC. Если есть такая потребность, то они будут дополнены выделенной командой специалистов для постоянного взаимодействия.
  • Компании, использующие микросервисный подход к построению архитектуры, однозначно нуждаются в DevOps для удобного развёртывания и обслуживания своих приложений.

Почему мы?

  • Наш опыт эксплуатации высоких нагрузок включает в себя обслуживание ведущих информационных веб-ресурсов России. Эксплуатация — это не только оказание поддержки, но и проектирование, реализация архитектуры всей инфраструктуры, масштабирование, консультации по технологиям и т.д.
  • Не один год мы применяем Docker в нагруженном production и знаем, как его правильно «готовить» (например, см. доклад 2016 года), в том числе для больших инсталляций (Kubernetes).
  • Обслуживаем (и имеем необходимый опыт для этого) разные программные платформы включая PHP, Ruby on Rails, Python, Java.
  • У нас есть собственный отдел разработки, который ведёт свои проекты (GitHub) и вносит вклад в Open Source-продукты, такие как GitLab (см. пользователя gsmetal — например, Merge Request 6201). Есть и свой опыт Agile-разработки.
  • Мы создаём собственные решения для DevOps (dapp, buildizer) и других задач: pam_docker, superhosting, nginx-http-rdns и др.

Что мы используем?

NB: Ниже перечислены предпочтительные подходы и инструменты, по которым у нас накоплено больше всего практического опыта. Однако весь опыт ими не ограничивается (некоторые опции указаны в скобках) и мы открыты для использования других продуктов при такой необходимости.

  • Общие принципы и лучшие практики — The Twelve-Factor App, Martin Fowler.
  • Управление исходными кодами — GitLab или GitHub.
  • Автоматизация непрерывной интеграции (CI) — Gitlab CI и Travis CI (реже — Jenkins, TeamCity).
  • Контейнеры — Docker.
  • IaC (Infrastructure as Code):
    • инфраструктура приложений описывается на Chef (иногда на shell) и автоматически собирается в Docker-образы нашим сборщиком;
    • базовая инфраструктура (гипервизоры, виртуальные машины, приложения вне контейнеров) описываются в Chef, в отдельном репозитории, с учетом специфики Continuous Integration и Continuous Delivery.
  • Платформа (PaaS, «кластер Docker’ов» и Service Discovery) — Kubernetes (есть опыт с Dokku, Deis, Docker Swarm, etcd, Consul).
  • Удобные окружения для разработки и дополнительные (временные) контуры — Vagrant.
  • Взаимодействие — чаты Slack, merge/pull-запросы в GitLab/GitHub, Redmine (постановка задач).

Наконец, не стоит умалять значимость базовых продуктов, на которых функционирует вся инфраструктура. В частности, к ним относятся:

  • операционная система Ubuntu Linux (возможны другие варианты);
  • виртуализация Linux KVM под управлением libvirt (или OpenStack в случае больших инсталляций);
  • система резервного копирования Bareos (форк Bacula);
  • система мониторинга Zabbix и инструменты Grafana для визуализации.

Что я получу?

Во-первых, базовую инфраструктуру. Для этого мы:

  • рассчитаем необходимое количество серверов и виртуальных машин, требования к ним;
  • если принято решение использовать частное облако — поможем подобрать (для покупки или аренды) оборудование, посоветуем провайдеров и дата-центры. Опишем правила разворачивания гипервизоров и объединения их в облако с учётом необходимой специфики. «Задеплоим» необходимое количество гипервизоров;
  • развернём систему статистики и мониторинга, резервное копирование и другие необходимые компоненты базовой инфраструктуры.

Во-вторых, полное описание по методологии IaC (Infrastructure as Code). В Chef (в chef-repo для вашего проекта) будут созданы правила для разворачивания общей части инфраструктуры для приложений, к которой относятся:

  • сервисы, которые не контейнеризируются: MySQL, MongoDB, RabbitMQ, Cassandra и Ceph;
  • кластер Kubernetes (PaaS);
  • обычно сюда же включаются все специфичные (и необходимые для функционирования облака) настройки виртуальных машин и гипервизоров: VPN-туннели, правила iptables, маршруты…

В коде каждого вашего приложения описываются правила для:

  • сборки Docker-образов для фронтендов, бэкендов, воркеров и других слоёв с описанием таких параметров, как версия PHP/Ruby/Python/Java, перечень и версии системных зависимостей, механизм установки прикладных зависимостей (composer, bundle, npm, pip и др.), содержимое статических конфигурационных, шаблоны динамически конфигурационных файлов, дополнительные действия, выполняемые при сборке (например, генерация ассетов);
  • сборки дополнительной инфраструктуры, используемой приложением: memcached, Redis и другие контейнеризируемые сервисы;
  • развёртывания и межсервисного взаимодействия.

В-третьих, инсталляцию GitLab (или другое решение, если есть такая потребность) с импортированными данными из используемых систем (GitHub, Bitbucket и др.). Мы проработаем вместе с вами рабочие процессы Continuous Integration и Continuous Delivery, ответив на такие вопросы, как:

  • Какие коммиты собирать?
  • Как, когда и какие тесты запускать?
  • Сколько и каких окружений нужно (кроме production)?
  • Кто выкатывает, на какое окружение, в каком порядке?

Результатом станет рабочий процесс, описанный в коде ваших приложений (в .gitlab-ci.yml).

В-четвёртых, готовые к работе виртуальные машины (в вашем приватном или публичном облаке). Они будут использоваться для деплоя компонентов, полученных на предыдущих этапах, в соответствии с правилами рабочего процесса и в нужном количестве окружений.

В-пятых, умную техническую поддержку 24×7×365: постоянное сопровождение процессов разработки, оперативное внесение изменений в инфраструктуру, помощь разработчикам и тимлидам по смежным проблемам, консультации по архитектуре.

Наконец, гарантии отказоустойчивости и масштабируемости архитектуры созданной инфраструктуры.

Если вкратце, то результатом станет выстроенная система автоматизированных процессов, работающих как часы и стабильно достигающих поставленной цели. Чтобы наглядно её проиллюстрировать…

… мы обратились к легендарной компьютерной игре The Incredible Machine.

Сколько это стоит?

Стоимось сопровождения проектов по методологии DevOps рассчитывается индивидуально, поскольку зависит от множества факторов, таких как имеющиеся процессы и инфраструктура, масштабы проекта и используемые технологии, предъявляемые требования к Continuous Delivery, планы по развитию и т.п.

Минимальная стоимость услуг составляет 40 тысяч рублей в месяц за проект, а определить её точно для вашего случая мы сможем после обсуждения всех необходимых деталей.

Что ещё мне нужно знать?

  • Инфраструктура может быть как развёрнута с нуля (от помощи в выборе дата-центра до запуска конечного приложения), так и переведена (миграция) с любой действующей программно-аппаратной платформы.
  • Мы заключаем соглашение об обслуживании (SLA), в рамках которого гарантируем нужный уровень доступности (отказоустойчивости). Предоставление гарантий возможно благодаря нашему огромному опыту в обслуживании различных приложений в GNU/Linux и их мониторингу, а также наличию круглосуточной технической поддержки с налаженными процессами взаимодействия.
  • Мы предлагаем программно-аппаратную гибкость, подразумевающую широкие возможности выбора железа (своего или в аренду в любом из дата-центров), технологий (языки разработки, веб-серверы, СУБД, NoSQL…) и масштабов приложения.

Хватит букв, давайте обсудим ваш проект!