Модуль 12 — Configuration Management & Платформы

После того как инфра поднята (Terraform), её надо настраивать на серверах. И — следующая эволюция DevOps — Platform Engineering и Internal Developer Platforms.

Ansible ⭐ (стандарт CM)

Зачем: agentless (по SSH/WinRM), декларативный, огромная экосистема. Идеален для bare metal, VM, network devices.

Концепции

Пример 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

  1. Идемпотентность — повтори дважды, результат тот же. Главная фишка Ansible.
  2. --check и --diff — dry run и просмотр изменений
  3. tags — выборочное выполнение
  4. Roles для всего, не один большой playbook
  5. Vault для секретов или интеграция с HashiCorp Vault
  6. ansible-lint обязательно
  7. Molecule — стандарт для тестирования ролей
  8. Dynamic inventory для cloud (AWS EC2, GCP)

Когда Ansible vs Terraform vs 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

Platform Engineering ⭐⭐ (тренд 2024+)

Концепт

Platform Engineering — эволюция DevOps. Платформенная команда строит «продукт для разработчиков» — Internal Developer Platform (IDP), который абстрагирует сложность инфры.

Цель: разработчик нажимает кнопку «Создать сервис» → получает репо + CI + K8s namespace + database + monitoring + alerts. Без знания Kubernetes.

Backstage ⭐ (от Spotify)

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

  1. Internal Platform as Product — backlog, roadmap, метрики, NPS у разработчиков
  2. Golden Path — предписанный путь, который «просто работает»
  3. Cognitive load — снизить нагрузку на разработчиков
  4. Self-service — без тикетов в DevOps
  5. Paved roads, not gates — рекомендуй, не блокируй
  6. DORA metrics: Deployment frequency, Lead time, MTTR, Change failure rate
  7. Team Topologies — Stream-aligned, Platform, Enabling, Complicated subsystem teams

Чек-лист

Источники

Время для главного — DevSecOps.

Модуль 13 → DevSecOps