Технологический стек и зоны ответственности DevOps-инженера
Технологический стек и зоны ответственности DevOps-инженера

Технологический стек и зоны ответственности DevOps-инженера

Общая информация

Документ описывает текущий технологический стек инфраструктуры РГБ, используемые инструменты и ожидания от DevOps-инженера.

Основная задача DevOps-инженера — сопровождение существующей инфраструктуры, автоматизация процессов эксплуатации, развертывание новых сервисов и обеспечение стабильной работы информационных систем.


Операционные системы

Основная серверная инфраструктура работает под управлением Linux.

Используемые дистрибутивы:

  • Ubuntu Server (основная платформа);
  • CentOS;
  • РЕД ОС (аттестованные контуры).

Для отдельных legacy-проектов также используются:

  • Oracle Linux.

Необходимо уверенное владение Linux на уровне системного администратора:

  • работа с systemd;
  • управление пользователями и правами;
  • настройка сетевого взаимодействия;
  • управление файловыми системами;
  • диагностика производительности;
  • анализ журналов (journalctl, syslog);
  • поиск и устранение неисправностей.

Также требуется уверенное владение Bash для автоматизации рутинных задач и написания служебных скриптов.


Контейнеризация

Основной способ поставки сервисов — Docker.

Используемые технологии:

  • Docker;
  • Docker Compose;
  • Docker Swarm.

Docker Swarm используется ограниченно и поддерживается исключительно для legacy-проектов (например, старой инфраструктуры НЭБ).

Большинство новых сервисов поставляются в виде Docker-контейнеров.

Основной стек разработки:

  • Node.js

    • NestJS
    • Nuxt
    • Next.js
  • Python;

  • Go;

  • PHP.

Ожидается понимание:

  • написания Dockerfile;
  • multi-stage сборок;
  • оптимизации Docker-образов;
  • работы с volumes;
  • организации сетевого взаимодействия контейнеров;
  • диагностики проблем контейнеров.

Git и CI/CD

Основной системой контроля версий является Git.

Используемые инструменты:

  • GitLab;
  • GitLab CI;
  • Nexus Repository.

GitLab используется как единая платформа для:

  • хранения исходного кода;
  • Code Review;
  • Merge Request;
  • CI/CD;
  • запуска инфраструктурных пайплайнов.

GitLab CI обеспечивает:

  • сборку приложений;
  • сборку Docker-образов;
  • публикацию артефактов;
  • доставку приложений;
  • запуск Ansible Playbook;
  • автоматизацию эксплуатационных задач.

Nexus Repository используется для:

  • хранения внутренних Docker-образов;
  • проксирования внешних Docker Registry;
  • кэширования популярных Docker-образов;
  • хранения внутренних артефактов;
  • снижения зависимости от внешних репозиториев.

DevOps-инженер должен уверенно понимать:

  • Git Flow;
  • Merge Request;
  • CI/CD Pipeline;
  • GitLab Runner;
  • переменные окружения;
  • секреты;
  • версионирование релизов;
  • управление Docker Registry.

Конфигурационное управление

Основным инструментом автоматизации инфраструктуры является Ansible.

Практически вся инфраструктура описывается декларативно и хранится в Git.

Ansible используется для:

  • bootstrap новых серверов;
  • установки системного ПО;
  • развертывания сервисов;
  • обновления конфигураций;
  • управления Reverse Proxy;
  • подключения сервисов к мониторингу;
  • подключения логирования;
  • настройки резервного копирования;
  • сопровождения существующей инфраструктуры.

Все изменения инфраструктуры проходят через GitLab CI.

При вводе нового сервиса в эксплуатацию ожидается, что вся инфраструктурная конфигурация будет оформлена средствами Ansible.


Мониторинг и логирование

Используемый стек мониторинга:

  • Prometheus;
  • Grafana;
  • Alertmanager;
  • Loki;
  • Uptime Kuma.

Все компоненты мониторинга разворачиваются и сопровождаются через Ansible.

DevOps-инженер должен понимать:

  • подключение новых сервисов к мониторингу;
  • настройку Prometheus;
  • написание Alert Rule;
  • настройку Alertmanager;
  • создание Dashboard в Grafana;
  • подключение логирования в Loki;
  • настройку Health Check.

Reverse Proxy и балансировка

Основным Reverse Proxy является Nginx.

Также используются:

  • HAProxy;
  • Apache Tomcat (для отдельных legacy-сервисов).

Конфигурация Reverse Proxy хранится в репозитории Ansible и изменяется исключительно через Infrastructure as Code.

Ожидается понимание:

  • Reverse Proxy;
  • SSL/TLS;
  • внутренней PKI;
  • балансировки нагрузки;
  • WebSocket;
  • HTTP/2;
  • gzip;
  • upstream;
  • кэширования.

Kubernetes

В инфраструктуре присутствует кластер Kubernetes версии около 1.22.

Кластер находится на стадии вывода из эксплуатации.

Основные задачи:

  • сопровождение существующих Deployment;
  • поддержка работающих сервисов;
  • постепенный вывод проектов из Kubernetes;
  • перенос сервисов на новую инфраструктуру.

Развертывание сервисов осуществляется преимущественно через Kustomize.

Знание Helm приветствуется, однако в текущей инфраструктуре практически не используется.


Базы данных

Основные используемые СУБД:

  • PostgreSQL;
  • MySQL;
  • MongoDB.

PostgreSQL является основной реляционной СУБД.

Используются как одиночные экземпляры, так и кластеры в конфигурации Master/Replica, обеспечивающие отказоустойчивость и масштабирование операций чтения.

DevOps-инженер должен понимать:

  • принципы репликации PostgreSQL;
  • сопровождение Master/Replica;
  • резервное копирование и восстановление;
  • мониторинг состояния БД;
  • диагностику проблем;
  • настройку подключений приложений.

Глубокое администрирование БД (оптимизация запросов, проектирование схем и т.д.) не является основной задачей.


Инфраструктурные сервисы

В инфраструктуре используются:

  • Kafka;
  • ClickHouse;
  • OpenSearch;
  • Redis.

Используются как отдельные инстансы, так и распределенные кластеры.

Для проекта НЭБ развернут кластер OpenSearch из 9 узлов, используемый в качестве поисковой платформы.

DevOps-инженер должен понимать принципы работы данных систем, сопровождать существующие инсталляции, участвовать в обновлениях, мониторинге и устранении возникающих проблем.


Резервное копирование

Резервное копирование инфраструктуры организовано с использованием Restic.

Управление резервным копированием осуществляется средствами Ansible.

DevOps-инженер участвует в:

  • подключении новых серверов к системе резервного копирования;
  • настройке расписаний;
  • контроле успешности выполнения резервных копий;
  • периодической проверке восстановления данных;
  • сопровождении существующих политик резервного копирования.

Legacy-проекты

Часть информационных систем сопровождается подрядными организациями и использует устаревший технологический стек.

В подобных проектах встречаются:

  • Java;
  • GlassFish;
  • Oracle Linux;
  • Oracle Database.

От DevOps-инженера не требуется глубокая разработка данных систем, однако необходимо понимание принципов их эксплуатации, сопровождения и взаимодействия с подрядчиками при выполнении инфраструктурных работ.


Средства совместной работы

Для организации процессов разработки используются:

  • Jira — управление задачами, планирование и сопровождение проектов;
  • Confluence — ведение технической документации, эксплуатационных инструкций и внутренней базы знаний.

От DevOps-инженера ожидается:

  • работа с задачами в Jira;
  • ведение технической документации;
  • актуализация инструкций;
  • документирование изменений инфраструктуры;
  • описание новых сервисов и эксплуатационных процедур.

Общие ожидания

DevOps-инженер должен:

  • сопровождать существующую инфраструктуру;
  • автоматизировать рутинные операции;
  • развертывать новые сервисы;
  • поддерживать инфраструктурный код;
  • обеспечивать наблюдаемость сервисов;
  • сопровождать системы мониторинга и логирования;
  • обеспечивать резервное копирование;
  • участвовать в устранении инцидентов;
  • взаимодействовать с разработчиками и подрядчиками;
  • придерживаться подходов Infrastructure as Code и GitOps при внесении изменений в инфраструктуру.
Contact on Telegram