Как выглядит процесс развертывания (deployment) на серверных узлах?

«Как выглядит процесс развертывания (deployment) на серверных узлах?» — вопрос из категории Архитектура и DevOps-практики, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Развертывание на узлах — это автоматизированный процесс доставки и активации нового кода или конфигурации. В современном DevOps он строится на принципах идемпотентности и инфраструктуры как кода (IaC).

Типичный процесс:

  1. Provisioning (Подготовка инфраструктуры): Создание виртуальных машин, контейнеров или нод в кластере с помощью инструментов вроде Terraform или облачных SDK.
  2. Configuration Management (Управление конфигурацией): Приведение узлов в нужное состояние с помощью Ansible, Chef или Puppet (установка пакетов, настройка системных сервисов).
  3. Artifact Deployment (Доставка артефакта): Копирование собранного артефакта (Docker-образа, JAR-файла) на целевые узлы через CI/CD пайплайн.
  4. Orchestration (Оркестрация): Координированное обновление сервисов с минимальным временем простоя, часто с использованием Kubernetes или Docker Swarm.

Пример сценария развертывания веб-приложения с использованием Ansible и Docker:

Playbook Ansible (deploy.yml):

- name: Deploy Web Application
  hosts: webservers
  become: yes
  vars:
    app_version: "v1.2.3"
    docker_image: "my-registry/app:{{ app_version }}"

  tasks:
    - name: Pull latest Docker image
      docker_image:
        name: "{{ docker_image }}"
        source: pull

    - name: Stop and remove old container
      docker_container:
        name: my_app
        state: absent

    - name: Run new container
      docker_container:
        name: my_app
        image: "{{ docker_image }}"
        ports:
          - "8080:80"
        env:
          NODE_ENV: "production"
        restart_policy: always

Ключевые практики: Синие-зеленые развертывания, canary-релизы, откат (rollback) через переключение на предыдущую версию артефакта или манифеста.