Модуль 12 — Configuration Management & Платформы
После того как инфра поднята (Terraform), её надо настраивать на серверах. И — следующая эволюция DevOps — Platform Engineering и Internal Developer Platforms.
Ansible ⭐ (стандарт CM)
Зачем: agentless (по SSH/WinRM), декларативный, огромная экосистема. Идеален для bare metal, VM, network devices.
Концепции
- Inventory — список хостов (INI или YAML)
- Playbook — что делать (YAML)
- Tasks — отдельные действия
- Modules — реализация (apt, copy, file, service, и тысячи других)
- Roles — структурированный playbook
- Handlers — реакция на изменения (restart service после изменения config)
- Variables — vars, host_vars, group_vars, --extra-vars
- Templates — Jinja2 рендер конфигов
- Vault — шифрование секретов в Git
Пример playbook
# site.yml
- name: Configure web servers
hosts: web
become: true
vars:
nginx_port: 443
roles:
- common
- nginx
- certbot
tasks:
- name: Install fail2ban
apt:
name: fail2ban
state: present
tags: security
- name: Render nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
validate: 'nginx -t -c %s'
notify: reload nginx
handlers:
- name: reload nginx
service:
name: nginx
state: reloaded
Best practices
- Идемпотентность — повтори дважды, результат тот же. Главная фишка Ansible.
- --check и --diff — dry run и просмотр изменений
- tags — выборочное выполнение
- Roles для всего, не один большой playbook
- Vault для секретов или интеграция с HashiCorp Vault
- ansible-lint обязательно
- Molecule — стандарт для тестирования ролей
- Dynamic inventory для cloud (AWS EC2, GCP)
Когда Ansible vs Terraform vs Kubernetes
- Terraform — provisioning (создать VM)
- Ansible — configuration (настроить ОС внутри)
- Kubernetes — оркестрация (запуск приложений)
Часто связка: Terraform создал VM → Ansible настроил → потом приложение в K8s.
Альтернатива конфигу через Ansible: cloud-init / user-data — для простых случаев. Образы через Packer — золотое правило immutable infrastructure.
Packer — golden images
Создание immutable AMI / qcow / Docker / VMware. Builders + provisioners (часто Ansible изнутри).
# nginx.pkr.hcl
source "amazon-ebs" "ubuntu" {
ami_name = "nginx-{{timestamp}}"
instance_type = "t3.micro"
region = "eu-west-1"
source_ami_filter {
filters = {
name = "ubuntu/images/hvm-ssd/ubuntu-noble-24.04-amd64-server-*"
virtualization-type = "hvm"
}
most_recent = true
owners = ["099720109477"]
}
ssh_username = "ubuntu"
}
build {
sources = ["source.amazon-ebs.ubuntu"]
provisioner "ansible" {
playbook_file = "./site.yml"
}
}
Альтернативы CM
- Chef — Ruby DSL, требует агентов. В упадке.
- Puppet — DSL, агенты. Энтерпрайз.
- SaltStack — Python-based, master-minion.
- NixOS / Nix — декларативная ОС. Революционный, нишевый.
Platform Engineering ⭐⭐ (тренд 2024+)
Концепт
Platform Engineering — эволюция DevOps. Платформенная команда строит «продукт для разработчиков» — Internal Developer Platform (IDP), который абстрагирует сложность инфры.
Цель: разработчик нажимает кнопку «Создать сервис» → получает репо + CI + K8s namespace + database + monitoring + alerts. Без знания Kubernetes.
Backstage ⭐ (от Spotify)
- Service Catalog — все сервисы компании
- Software Templates (scaffolder) — создание сервиса по шаблону
- TechDocs — docs as code (Markdown в репо → красивая документация)
- Plugins — Kubernetes, Argo, AWS, GitHub, и сотни других
- Open source, Node/TypeScript
Crossplane
Kubernetes-native IaC. CRDs для ресурсов AWS/GCP/Azure. Compositions — собирать сложные компоненты из примитивов. Альтернатива Terraform для GitOps подхода.
Score / Humanitec / KubeVela
Higher-level abstractions: «Я хочу веб-сервис с Postgres» → платформа разворачивает.
ArgoCD ApplicationSets
Простой self-service: каждый namespace получает стандартный стек.
Принципы Platform Engineering
- Internal Platform as Product — backlog, roadmap, метрики, NPS у разработчиков
- Golden Path — предписанный путь, который «просто работает»
- Cognitive load — снизить нагрузку на разработчиков
- Self-service — без тикетов в DevOps
- Paved roads, not gates — рекомендуй, не блокируй
- DORA metrics: Deployment frequency, Lead time, MTTR, Change failure rate
- Team Topologies — Stream-aligned, Platform, Enabling, Complicated subsystem teams
Чек-лист
- ☐ Ansible playbook с rolling update сервисов
- ☐ Vault для секретов в playbook
- ☐ Packer AMI собирается в CI
- ☐ Понимаю когда Terraform vs Ansible
- ☐ Знаю концепт Platform Engineering
- ☐ Поднял Backstage хотя бы локально
- ☐ Понимаю DORA метрики
Источники
- Книга: «Ansible for DevOps» — Jeff Geerling (обновляется)
- Книга: «Team Topologies» — Skelton, Pais
- Книга: «Platform Engineering on Kubernetes» — Mauricio Salatino
- Документация: docs.ansible.com
- Backstage: backstage.io
- Сайт: platformengineering.org
Время для главного — DevSecOps.