Примечание переводчика. В «Экспресс 42» мы предоставляем DevOps-консалтинг: проводим аудит существующих в компании клиента процессов разработки и инфраструктурных практик, выявляем узкие места и недостатки, а затем помогаем их устранить. В своих аналитических отчётах мы нередко ссылаемся на модель зрелости инфраструктуры как кода, описанную Гэри Стаффордом ещё в далёком 2016 году. Она помогает определить, на каком уровне сейчас находятся инфраструктурные практики компании, и организовать их систематическое развитие.
Несмотря на то, что статья не нова, она по-прежнему полезна компаниям и инженерам, ведь ключевые концепции инфраструктуры как кода за это время не изменились. Мы перевели материал для внутренних целей, но подумали, что он может быть интересен сообществу. Если вы уже знакомы с идеями IaC, можно сразу перейти в раздел с описанием уровней зрелости. На этом передаю слово Гэри.
Команды разработчиков инфраструктуры и программного обеспечения всё чаще создают и управляют инфраструктурой с помощью автоматизированных инструментов. Этот подход также известен как «инфраструктура как код» (Киф Моррис. Инфраструктура как код).
Подход для управления и описания инфраструктуры через конфигурационные файлы, а не через ручное редактирование конфигураций на серверах или интерактивное взаимодействие (Википедия).
Конвергенция CD, облачных технологий и IaC
В 2011 году Джез Хамбл, бывший сотрудник ThoughtWorks, и Дэвид Фарли опубликовали революционную книгу «Непрерывное развёртывание ПО. Автоматизация процессов сборки, тестирования и внедрения новых версий программ». В книге ставится задача автоматизировать «болезненный, рискованный и трудоёмкий процесс сборки, развёртывания и тестирования программного обеспечения».
В течение следующих пяти лет «Непрерывное развёртывание» Хамбла и Фарли внесла значительный вклад в развитие современного феномена DevOps. Согласно Википедии, DevOps — это «культура, движение или практика, которая акцентирует внимание на сотрудничестве и коммуникации разработчиков программного обеспечения и других специалистов по информационным технологиям, автоматизируя при этом процесс доставки программного обеспечения и изменения инфраструктуры».
Параллельно с развитием DevOps продолжался взрывной рост облачных технологий. Amazon стал пионером современных облачных вычислений, запустив в 2006 году Elastic Compute Cloud. Через два года к нему присоединилась компания Microsoft с платформой Azure. В 2010 году Rackspace запустила OpenStack.
Сегодня поставщиков облачных услуг — великое множество. Их предложения делятся на три основные модели: инфраструктура как услуга (IaaS), платформа как услуга (PaaS) и программное обеспечение как услуга (SaaS). Поскольку речь пойдёт об инфраструктуре, мы сосредоточимся на IaaS и PaaS. Лидерами в этой области являются Google Cloud Platform, Red Hat, Oracle Cloud, Pivotal Cloud Foundry, CenturyLink Cloud, Apprenda, IBM SmartCloud Enterprise и Heroku, и это лишь некоторые из участников рынка.
Наконец, в июне 2016 года O’Reilly выпускает «Инфраструктура как код. Управление серверами в облаке» Кифа Морриса из ThoughtWorks. Эта важнейшая работа связывает многие концепции, впервые представленные в книге Хамбла и Фарли «Непрерывное развёртывание», с развивающимися процессами и практиками поддержки облачных вычислений.
В этой статье рассматривается применение принципов, заложенных в модели зрелости непрерывной доставки (Continuous Delivery Maturity Model) — инструмента анализа, подробно описанного в книге Хамбла и Фарли «Непрерывное развёртывание», — к лучшим практикам, изложенным в книге Морриса «Инфраструктура как код».
Инфраструктура как код
Прежде чем продолжить, стоит пару слов сказать о том, что такое инфраструктура как код. Ниже приведены четыре примера IaC-определений (как пишет Википедия, «машинообрабатываемых, декларативных файлов»). Код был написан под четыре популярных инструмента: HashiCorp Packer, Docker, AWS CloudFormation и HashiCorp Terraform. На базе этих описаний перечисленные инструменты закажут виртуализированную инфраструктуру в облаке.
HashiCorp Packer
Packer-определение для образа виртуальной машины AWS (AMI) на базе Ubuntu, который хранится в EBS:
{ "variables": { "aws_access_key": "", "aws_secret_key": "" }, "builders": [{ "type": "amazon-ebs", "access_key": "{{user `aws_access_key`}}", "secret_key": "{{user `aws_secret_key`}}", "region": "us-east-1", "source_ami": "ami-fce3c696", "instance_type": "t2.micro", "ssh_username": "ubuntu", "ami_name": "packer-example {{timestamp}}" }] }
Docker
Dockerfile для сборки Docker-образа с инстансом MongoDB:
FROM ubuntu:16.04 MAINTAINER Docker RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927 RUN echo "deb http://repo.mongodb.org/apt/ubuntu" \ $(cat /etc/lsb-release | grep DISTRIB_CODENAME | cut -d= -f2)/mongodb-org/3.2 multiverse" | \ tee /etc/apt/sources.list.d/mongodb-org-3.2.list RUN apt-get update && apt-get install -y mongodb-org RUN mkdir -p /data/db EXPOSE 27017 ENTRYPOINT ["/usr/bin/mongod"]
AWS CloudFormation
Настраиваем три сервиса в инстансе. Определение в формате AWS CloudFormation:
services: sysvinit: nginx: enabled: "true" ensureRunning: "true" files: - "/etc/nginx/nginx.conf" sources: - "/var/www/html" php-fastcgi: enabled: "true" ensureRunning: "true" packages: yum: - "php" - "spawn-fcgi" sendmail: enabled: "false" ensureRunning: "false"
HashiCorp Terraform
Terraform-определение для создания AWS-инстанса m1.small
EC2 на базе Ubuntu, в котором запущен NGINX:
resource "aws_instance" "web" { connection { user = "ubuntu" } instance_type = "m1.small" Ami = "${lookup(var.aws_amis, var.aws_region)}" Key_name = "${aws_key_pair.auth.id}" vpc_security_group_ids = ["${aws_security_group.default.id}"] Subnet_id = "${aws_subnet.default.id}" provisioner "remote-exec" { inline = [ "sudo apt-get -y update", "sudo apt-get -y install nginx", "sudo service nginx start", ] } }
Облачная инфраструктура как услуга
Предыдущие примеры дают лишь скромное представление о потенциале инфраструктуры как кода. Ведущие облачные провайдеры, такие как Amazon и Microsoft, предлагают сотни уникальных решений, большинство из которых можно определить и управлять ими через код — инфраструктуру как код.
Какую инфраструктуру можно описать кодом
Многие задаются вопросом: какие типы инфраструктуры можно описать кодом? Хотя поставщики и провайдеры облачных услуг имеют свои уникальные названия и описания, в большинстве случаев инфраструктура делится на несколько общих категорий:
-
вычислительные ресурсы;
-
базы данных, кэширование и обмен сообщениями;
-
хранение, резервное копирование и доставка контента;
-
сетевое взаимодействие;
-
безопасность и идентификация;
-
мониторинг, логирование и аналитика;
-
инструменты управления.
Модель зрелости непрерывной доставки
Нам также потребуется общее понимание модели зрелости непрерывной доставки. Согласно Хамблу и Фарли, модель зрелости непрерывной доставки (CD) «помогает понять, на каком этапе находится организация с точки зрения зрелости её процессов и практик, и определяет последовательность действий, необходимых для её роста и развития».
Сама модель представляет собой матрицу 5×6, включающую шесть практических направлений и пять уровней зрелости. Каждый из 30 элементов матрицы определяет необходимую дисциплину, которой должна следовать организация, чтобы считаться достигшей опредёленного уровня зрелости в рамках данной практической области.
Практические области
Модель зрелости непрерывной доставки рассматривает шесть широких практических направлений, характерных для большинства организаций, которые занимаются разработкой корпоративного программного обеспечения:
-
Управление сборкой и непрерывная интеграция.
-
Окружения и развёртывание.
-
Управление релизами и комплаенс.
-
Тестирование.
-
Управление данными.
-
Управление конфигурацией.
Уровни зрелости в модели непрерывной доставки
Модель зрелости непрерывной доставки определяет пять уровней зрелости по возрастанию (от −1 до 3) от регрессивного до оптимизационного:
-
Уровень 3: Оптимизированный — фокус на совершенствовании процессов.
-
Уровень 2: Количественно управляемый — процессы покрыты метриками и поставлены на мониторинг.
-
Уровень 1: Согласованный — автоматизированные процессы применяются на протяжении всего жизненного цикла приложения.
-
Уровень 0: Повторяемый — процесс документирован и частично автоматизирован.
-
Уровень −1: Регрессивный — процессы не повторяемы, слабо контролируемы и реактивны.
Используем модели зрелости для анализа
Модель зрелости непрерывной доставки — это инструмент анализа. По моему опыту, организации используют модель зрелости одним из двух способов. В первом сначала проводится беспристрастная оценка существующего уровня зрелости во всех практических областях. Затем компания фокусируется на повышении общего уровня зрелости, пытаясь достичь единого уровня во всех практических областях. Второй способ — организация концентрируется на подмножестве наиболее ценных для бизнеса практик или тех направлениях, которые из-за своей относительной незрелости наносят наибольший ущерб другим практическим областям.
Уровни модели зрелости инфраструктуры как кода
Хотя инфраструктура как код прямо не упоминается в модели зрелости непрерывной доставки, многие из её лучших практик входят в последнюю. Например, предписываются автоматический заказ окружений, управляемое развёртывание и использование метрик для постоянного совершенствования.
Вместо того чтобы пытаться вписать инфраструктуру как код в существующую модель зрелости непрерывной доставки, более эффективно, на мой взгляд, просто применить её пять уровней зрелости к инфраструктуре как коду. Для этого я выбрал лучшие практики из книги «Инфраструктура как код», а также добавил кое-что из своего опыта. Практики были распределены по пяти уровням зрелости.
В результате получился первый вариант новой модели зрелости инфраструктуры как кода. Она может применяться как вместе с более широкой моделью зрелости непрерывной доставки, так и отдельно для оценки и дальнейшего развития инфраструктурных практик организации.
IaC уровень −1: Регрессивный
Процессы не повторяемы, слабо контролируемы и реактивны:
-
часть инфраструктуры развёрнута и управляется кодом;
-
инфраструктурное развёртывание сопровождается большим количеством действий, выполняемых вручную;
-
инфраструктурный код написан без использования инструментов и подходов, которые уже устоялись в отрасли разработки программного обеспечения;
-
инфраструктурный код, процессы и процедуры плохо документированы и не доступны для всех заинтересованных сторон.
IaC уровень 0: Повторяемый
Процессы задокументированы и частично автоматизированы:
-
весь инфраструктурный код и конфигурации расположены в системе контроля версий;
-
тестирование, развёртывание и управление инфраструктурой выполняются в рамках автоматизированного пайплайна;
-
инфраструктура деплоится в виде самостоятельных компонентов;
-
физические объекты инфраструктуры представлены в виде программных интерфейсов;
-
реализованы автоматическая проверка безопасности компонент и контроль их зависимостей;
-
самообслуживание в виде консольного приложения или API-сервиса для использования внутренними потребителями;
-
весь код, процессы и процедуры задокументированы и доступны;
-
неизменяемость (immutable) инфраструктуры и процессов.
IaC уровень 1: Согласованный
Автоматизированные процессы применяются на протяжении всего жизненного цикла приложений:
-
полностью автоматизированные развёртывание и управление инфраструктурой;
-
минимальное использование неподдерживаемых или самописных инструментов для работы с инфраструктурой;
-
модульные тесты применяются в объёме, соответствующем требованиям к покрытию кода тестами;
-
код постоянно тестируется при каждой регистрации в системе контроля версий;
-
используются шаблоны конфигурационных файлов;
-
безопасное хранение секретов;
-
автомасштабирование на основе параметров работы нагрузки, задаваемых пользователями.
IaC уровень 2: Количественно управляемый
Процессы покрыты метриками и поставлены на мониторинг:
-
используются файлы описания инфраструктуры (Terraform и другие);
-
реализована возможность выполнения автоматизированного отката (rollback) изменений;
-
инфраструктура и сервисы сопровождения развёрнуты с поддержкой высокой доступности и устойчивостью к сбоям;
-
использование сервисов для хранения внешней конфигурации с понятными механизмами внесения изменений;
-
инфраструктура покрыта мониторингом с настраиваемыми алертами;
-
весь код, процессы и процедуры хорошо документированы в системе управления знаниями;
-
инфраструктурный код использует декларативную, а не императивную модель программирования.
IaC уровень 3: Оптимизированный
Фокус — на улучшении процессов:
-
самовосстанавливающаяся, самонастраиваемая, самооптимизирующаяся инфраструктура;
-
производительность тестируется и отслеживается на основании бизнес-KPI;
-
уровень загрузки инфраструктуры оптимально высокий, инфраструктура используется максимально эффективно;
-
компания придерживается подходов -as-a-service с ориентацией на облако;
-
создаваемый инфраструктурный код инвариантен относительно поставщика(-ов) облачных услуг.
P. S.
Читайте также в нашем блоге:
ссылка на оригинал статьи https://habr.com/ru/articles/860318/
Добавить комментарий