Какие пакетные менеджеры в Linux вы используете в DevOps-практике и для каких задач?

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

Ответ

В DevOps работа с пакетными менеджерами выходит за рамки простой установки софта. Мы используем их для управления инфраструктурой, сборки образов и обеспечения идемпотентности.

Основные менеджеры и их применение:

  1. APT (Debian/Ubuntu)

    • Основное использование: Базовая установка инструментов на виртуальных машинах и в Docker-образах.
    • DevOps-практика:
      • Фиксация версий пакетов для воспроизводимости.
      • Использование в Dockerfile для минимизации слоёв и кэша.
        RUN apt-get update && apt-get install -y 
        curl 
        gnupg2 
        software-properties-common 
        && rm -rf /var/lib/apt/lists/*  # Очистка кэша для уменьшения образа
      • Автоматизация обновлений безопасности через unattended-upgrades.
  2. YUM/DNF (RHEL/CentOS/Rocky Linux/Fedora)

    • Основное использование: Аналогично APT в RHEL-семействе. DNF — современная замена YUM.
    • DevOps-практика: Работа с репозиториями для установки специфичного софта (например, PostgreSQL от официального репо). Создание локальных mirror-репозиториев для ускорения сборки образов в изолированных средах.
  3. APK (Alpine Linux)

    • Основное использование: Ключевой менеджер для создания минимальных Docker-образов.
    • DevOps-практика: Alpine-based образы часто используются для production-контейнеров из-за малого размера и повышенной безопасности.
      FROM alpine:3.17
      RUN apk add --no-cache nginx openssl  # --no-cache не оставляет кэш в образе
  4. Пакетные менеджеры языков программирования (pip, npm, gem)

    • Основное использование: Установка зависимостей приложений.
    • DevOps-практика:
      • Фиксация версий (requirements.txt, package-lock.json).
      • Использование приватных репозиториев (Artifactory, Nexus) для проксирования и кэширования.
      • Интеграция в CI/CD: npm ci для чистой установки, pip install --user в виртуальных окружениях.
  5. Системные пакетные менеджеры для управления инфраструктурой

    • Ansible: Использует модули (yum, apt) для идемпотентного управления пакетами на множестве серверов.
    • name: Ensure nginx is installed apt: name: nginx state: present update_cache: yes
    • Puppet/Chef: Имеют свои мощные ресурсы для управления пакетами.

Ключевые принципы в DevOps:

  • Идемпотентность: Операция установки пакета должна быть безопасной при многократном выполнении.
  • Воспроизводимость: Использование фиксированных версий пакетов (nginx=1.18.0-0ubuntu1).
  • Безопасность: Регулярное обновление пакетов для устранения уязвимостей, сканирование образов (Trivy, Clair).
  • Эффективность: Кэширование пакетов в CI/CD пайплайнах и локальных репозиториях для ускорения сборки.