ТЕХНОЛОГИЧЕСКИЙ СТЕК

Стек DevOps и MLOps.
Инструменты под задачу.

36 инструментов и направлений: DevOps, мониторинг, базы данных, MLOps, очереди сообщений и Linux. Примеры и связанные проекты.

Технологический стек DevOps

Мы используем современные DevOps технологии для автоматизации процессов разработки, развертывания и мониторинга инфраструктуры. Наш опыт охватывает контейнеризацию, оркестрацию, CI/CD, облачные платформы, мониторинг, базы данных, MLOps, обработку событий и Linux.

Показано 36 из 36 инструментов и направлений

Docker

Повторяемая сборка и запуск приложений в контейнерах.

Пример конфигурации

# Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Kubernetes

Оркестрация сервисов, масштабирование и управляемые обновления.

Пример конфигурации

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: app
        image: nginx:latest
        ports:
        - containerPort: 80
      

Иллюстративный пример: версии и параметры адаптируются под окружение.

Terraform

Описание облачных ресурсов в коде.

Пример конфигурации

terraform {
  required_proficiency = "90%"
  modules_created = 12
  
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}
      

Иллюстративный пример: версии и параметры адаптируются под окружение.

Ansible

Автоматизация конфигурации серверов.

Пример конфигурации

---
- name: Configure web servers
  hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
        
    - name: Start nginx service
      service:
        name: nginx
        state: started
        enabled: yes
      

Иллюстративный пример: версии и параметры адаптируются под окружение.

AWS

Развёртывание и эксплуатация инфраструктуры под задачи продукта.

Пример конфигурации

# AWS Infrastructure
provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  
  tags = {
    Name = "DevBobs-WebServer"
  }
}
      

Иллюстративный пример: версии и параметры адаптируются под окружение.

Grafana

Дашборды для диагностики состояния сервисов.

Пример конфигурации

# Grafana Dashboard Configuration
apiVersion: grafana.integreatly.org/v1alpha1
kind: GrafanaDashboard
metadata:
  name: example-dashboard
spec:
  json: |
    {
      "title": "DevOps Metrics",
      "panels": [...]
    }
      

Иллюстративный пример: версии и параметры адаптируются под окружение.

Jenkins

Автоматизация проверки кода, сборки и выпуска изменений.

Пример конфигурации

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
        stage('Test') {
            steps {
                sh 'npm run test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'kubectl apply -f k8s/'
            }
        }
    }
}
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Prometheus

Сбор метрик и правила оповещений.

Пример конфигурации

# Prometheus configuration
global:
  scrape_interval: 15s
  
scrape_configs:
  - job_name: 'kubernetes-pods'
    kubernetes_sd_configs:
      - role: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
        action: keep
        regex: true
      - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
        action: replace
        target_label: __metrics_path__
        regex: (.+)
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

GitLab CI

Автоматизация проверки кода, сборки и выпуска изменений.

Пример конфигурации

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: "/certs"

build:
  stage: build
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

deploy:
  stage: deploy
  script:
    - kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Azure DevOps

Автоматизация проверки кода, сборки и выпуска изменений.

Пример конфигурации

# Azure Pipeline
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

variables:
  dockerRegistryServiceConnection: 'myregistry'
  imageRepository: 'myapp'
  containerRegistry: 'myregistry.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

GitHub Actions

Автоматизация проверки кода, сборки и выпуска изменений.

Пример конфигурации

name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Set up Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '16'
        
    - name: Install dependencies
      run: npm ci
      
    - name: Run tests
      run: npm test
      
    - name: Build Docker image
      run: docker build -t myapp:${{ github.sha }} .
      
    - name: Deploy to Kubernetes
      run: |
        kubectl set image deployment/myapp myapp=myapp:${{ github.sha }}
        kubectl rollout status deployment/myapp
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Google Cloud Platform

Развёртывание и эксплуатация инфраструктуры под задачи продукта.

Пример конфигурации

# Google Cloud Build
steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA', '.']
    
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA']
    
  - name: 'gcr.io/cloud-builders/gke-deploy'
    args:
    - run
    - --filename=k8s.yaml
    - --image=gcr.io/$PROJECT_ID/myapp:$COMMIT_SHA
    - --location=us-central1-a
    - --cluster=production-cluster

substitutions:
  _CLUSTER_NAME: production-cluster
  _CLUSTER_LOCATION: us-central1-a
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Nginx

Маршрутизация запросов и балансировка нагрузки.

Пример конфигурации

# nginx.conf
upstream backend {
    server app1:3000;
    server app2:3000;
    server app3:3000;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    location /health {
        access_log off;
        return 200 "healthy
";
        add_header Content-Type text/plain;
    }
}
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Redis

Кэширование, хранение сессий и быстрый доступ к данным в памяти.

Пример конфигурации

# Redis configuration for high availability
port 6379
bind 0.0.0.0
protected-mode no

# Replication
replicaof redis-master 6379
replica-read-only yes

# Persistence
save 900 1
save 300 10
save 60 10000

rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb

# Memory optimization
maxmemory 2gb
maxmemory-policy allkeys-lru

# Clustering
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 5000
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

PostgreSQL

Реляционная СУБД: репликация, резервное копирование, оптимизация запросов и HA с Patroni.

Пример конфигурации

# PostgreSQL Master-Slave setup
# postgresql.conf (Master)
wal_level = replica
max_wal_senders = 10
max_replication_slots = 10
synchronous_commit = on
synchronous_standby_names = 'standby1'

# pg_hba.conf
host replication replicator 192.168.1.0/24 md5

# Backup and monitoring
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/archive/%f'

# Performance tuning
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
maintenance_work_mem = 64MB

# Connection pooling with PgBouncer
listen_addresses = '127.0.0.1'
port = 6543
auth_type = md5
pool_mode = transaction
max_client_conn = 100
default_pool_size = 20
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Elasticsearch

Поиск и анализ журналов событий.

Пример конфигурации

# Elasticsearch cluster configuration
cluster.name: production-cluster
node.name: node-1
node.roles: [ master, data, ingest ]

network.host: 0.0.0.0
http.port: 9200
transport.port: 9300

discovery.seed_hosts: ["node-1", "node-2", "node-3"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

# Memory settings
bootstrap.memory_lock: true
indices.memory.index_buffer_size: 30%

# Index lifecycle management
PUT _template/logs_template
{
  "index_patterns": ["logs-*"],
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1,
    "index.lifecycle.name": "logs_policy"
  }
}
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

MongoDB

Работа с документными данными и эксплуатация кластеров.

Пример конфигурации

# MongoDB Replica Set configuration
# mongod.conf
replication:
  replSetName: "rs0"

net:
  port: 27017
  bindIp: 0.0.0.0

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2

# Initialize replica set
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongo1:27017" },
    { _id: 1, host: "mongo2:27017" },
    { _id: 2, host: "mongo3:27017" }
  ]
})

# Sharding configuration
sh.enableSharding("myapp")
sh.shardCollection("myapp.users", { "userId": 1 })
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Consul

Обнаружение сервисов и управление конфигурацией.

Пример конфигурации

# Consul configuration
datacenter = "dc1"
data_dir = "/opt/consul/data"
log_level = "INFO"
node_name = "consul-server-1"
bind_addr = "0.0.0.0"
client_addr = "0.0.0.0"

server = true
bootstrap_expect = 3
retry_join = ["consul-server-2", "consul-server-3"]

ui_config {
  enabled = true
}

connect {
  enabled = true
}

# Service discovery
service {
  name = "web-service"
  port = 80
  tags = ["nginx", "load-balancer"]
  
  check {
    http = "http://localhost:80/health"
    interval = "10s"
    timeout = "3s"
  }
}
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Vault

HashiCorp Vault: управление секретами, динамическими учётными данными и политиками доступа.

Пример конфигурации

# Vault configuration
storage "consul" {
  address = "127.0.0.1:8500"
  path    = "vault/"
}

listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/etc/vault/tls/vault.crt"
  tls_key_file  = "/etc/vault/tls/vault.key"
}

# Enable secret engines
vault auth enable kubernetes
vault secrets enable -path=database database
vault secrets enable -path=aws aws

# Database secrets
vault write database/config/postgres     plugin_name=postgresql-database-plugin     connection_url="postgresql://{{username}}:{{password}}@postgres:5432/myapp?sslmode=disable"     allowed_roles="readonly,readwrite"     username="vault"     password="secret"

# Kubernetes integration
vault write auth/kubernetes/config     token_reviewer_jwt="$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"     kubernetes_host="https://kubernetes.default.svc:443"     kubernetes_ca_cert="$(cat /var/run/secrets/kubernetes.io/serviceaccount/ca.crt)"
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Istio

Управление межсервисным трафиком.

Пример конфигурации

# Istio Service Mesh configuration
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: bookinfo
spec:
  http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v1

---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      connectionPool:
        tcp:
          maxConnections: 100
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

ArgoCD

Автоматизация проверки кода, сборки и выпуска изменений.

Пример конфигурации

# ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/mycompany/myapp-config
    targetRevision: main
    path: k8s
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
    retry:
      limit: 5
      backoff:
        duration: 5s
        factor: 2
        maxDuration: 3m

# Repository configuration
apiVersion: v1
kind: Secret
metadata:
  name: repo-credentials
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  url: https://github.com/mycompany/myapp-config
  password: ghp_xxxxxxxxxxxxxxxxxxxx
  username: myuser
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

Helm

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

Пример конфигурации

# Helm Chart values.yaml
replicaCount: 3

image:
  repository: myapp
  tag: "latest"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: true
  className: "nginx"
  annotations:
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
  hosts:
    - host: myapp.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: myapp-tls
      hosts:
        - myapp.example.com

resources:
  limits:
    cpu: 500m
    memory: 512Mi
  requests:
    cpu: 250m
    memory: 256Mi

autoscaling:
  enabled: true
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 80

# Helm commands
# helm create myapp
# helm install myapp ./myapp --namespace production
# helm upgrade myapp ./myapp --namespace production
# helm rollback myapp 1 --namespace production
    

Иллюстративный пример: версии и параметры адаптируются под окружение.

VictoriaMetrics

Хранение временных рядов и метрик, интеграция с Prometheus и Grafana.

Документация ↗
Пример конфигурации
# Prometheus: отправка метрик в локальную VictoriaMetrics
remote_write:
  - url: http://localhost:8428/api/v1/write

Иллюстративный пример: версии и параметры адаптируются под окружение.

Zabbix

Мониторинг серверов, сетевого оборудования и приложений: метрики, триггеры и оповещения.

Документация ↗
Пример настройки агента
# zabbix_agent2.conf: адрес сервера мониторинга
Server=192.0.2.10
ServerActive=192.0.2.10
Hostname=app-node-01

Иллюстративный пример: версии и параметры адаптируются под окружение.

OpenSearch

Полнотекстовый поиск, сбор и анализ логов, дашборды для наблюдаемости.

Документация ↗
Пример запроса
# OpenSearch Dashboards — Dev Tools
GET /_cluster/health

GET /logs-*/_search
{
  "size": 10,
  "query": { "match": { "level": "error" } }
}

Иллюстративный пример: версии и параметры адаптируются под окружение.

ClickHouse

Колоночная СУБД для аналитики событий, логов и больших объёмов данных.

Документация ↗
Пример аналитического запроса
SELECT
    toStartOfHour(event_time) AS hour,
    count() AS events
FROM analytics.events
WHERE event_time >= now() - INTERVAL 1 DAY
GROUP BY hour
ORDER BY hour;

Иллюстративный пример: версии и параметры адаптируются под окружение.

MLflow

Отслеживание ML-экспериментов, параметров и метрик, управление артефактами и реестром моделей.

Документация ↗
Пример эксперимента
import mlflow

mlflow.set_experiment("baseline")
with mlflow.start_run():
    mlflow.log_param("model", "baseline")
    # Учебное значение; реальные метрики берутся из оценки модели.
    mlflow.log_metric("accuracy", 0.91)

Иллюстративный пример: версии и параметры адаптируются под окружение.

HashiCorp

Экосистема для автоматизации инфраструктуры: Terraform, Vault, Consul, Nomad и Packer.

  • Terraform — инфраструктура как код
  • Vault — управление секретами
  • Consul — обнаружение сервисов
  • Nomad — оркестрация задач
  • Packer — сборка образов
Документация ↗
Проверка инфраструктурного кода
# Проверка Terraform и Packer без применения изменений
terraform fmt -check
terraform validate
packer fmt -check .
packer validate .

Иллюстративный пример: версии и параметры адаптируются под окружение.

Patroni

Управление отказоустойчивыми кластерами PostgreSQL: выбор лидера, репликация и автоматическое переключение.

Документация ↗
Диагностика кластера
# Просмотр состояния и истории PostgreSQL-кластера
patronictl -c /etc/patroni/patroni.yml list
patronictl -c /etc/patroni/patroni.yml history

Иллюстративный пример: версии и параметры адаптируются под окружение.

Kubeflow Pipelines

Воспроизводимые ML-пайплайны в Kubernetes: подготовка данных, обучение и оценка моделей.

Документация ↗
Пример ML-пайплайна
from kfp import compiler, dsl

@dsl.component
def prepare(message: str) -> str:
    return message.strip()

@dsl.pipeline(name="data-preparation")
def pipeline(message: str = "training data"):
    prepare(message=message)

compiler.Compiler().compile(pipeline, "pipeline.yaml")

Иллюстративный пример: версии и параметры адаптируются под окружение.

Airflow

Оркестрация пакетной обработки данных: DAG, расписания, зависимости задач и повторные запуски.

Документация ↗
Диагностика DAG
# Просмотр DAG и задач без запуска обработки данных
airflow dags list
airflow tasks list example_pipeline
airflow dags list-runs example_pipeline

Иллюстративный пример: версии и параметры адаптируются под окружение.

lakeFS

Версионирование данных в объектном хранилище: ветки, коммиты и воспроизводимые наборы данных для аналитики и ML.

Документация ↗
Просмотр версий данных
# Пример для настроенного lakectl и существующего репозитория
lakectl branch list lakefs://training-data
lakectl log lakefs://training-data/main

Иллюстративный пример: версии и параметры адаптируются под окружение.

Kafka

Потоковая передача событий, распределённые топики и обработка данных между сервисами.

Документация ↗
Диагностика топика
# Используйте свой bootstrap-server и файл настроек доступа
kafka-topics.sh --bootstrap-server localhost:9092 \
  --describe --topic app-events

kafka-consumer-groups.sh --bootstrap-server localhost:9092 \
  --describe --group analytics

Иллюстративный пример: версии и параметры адаптируются под окружение.

RabbitMQ

Очереди сообщений и маршрутизация задач: подтверждения доставки, повторная обработка и развязка сервисов.

Документация ↗
Диагностика очередей
# Локальная диагностика брокера
rabbitmq-diagnostics ping
rabbitmqctl list_queues name messages_ready messages_unacknowledged
rabbitmqctl list_consumers

Иллюстративный пример: версии и параметры адаптируются под окружение.

Troubleshooting

Диагностика инцидентов и поиск первопричин: Linux, сети, Kubernetes, базы данных и производительность.

  • Анализ логов и метрик
  • Сеть, DNS и TLS
  • CPU, память и дисковый I/O
  • Разбор причин инцидента
Команды диагностики
# Чтение состояния без изменения конфигурации
uptime
free -h
df -h
ss -s
journalctl -p err -n 50 --no-pager
kubectl get pods -A
kubectl get events -A --sort-by=.metadata.creationTimestamp

Иллюстративный пример: версии и параметры адаптируются под окружение.

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

Linux для серверов, облаков и контейнеров: установка, настройка, обновления, hardening и миграция.

  • Ubuntu
  • Debian
  • Red Hat Enterprise Linux (RHEL)
  • Rocky Linux
  • AlmaLinux
  • CentOS Stream
  • CentOS Linux — существующие системы
  • SUSE Linux Enterprise Server
  • openSUSE
  • Oracle Linux
  • Amazon Linux
  • Alpine Linux
  • Fedora
  • РЕД ОС (RedOS)
  • Astra Linux
  • ALT Linux

CentOS Linux 7/8: поддержка проекта завершена. Для существующих систем — аудит и план миграции; CentOS Stream указан отдельно.

Документация ↗
Диагностика Linux
# Базовая информация об ОС и ресурсах
cat /etc/os-release
uname -r
uptime
free -h
df -h

Иллюстративный пример: версии и параметры адаптируются под окружение.

Экспертиза в DevOps технологиях

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

Docker контейнеризация, Kubernetes кластеры, Helm чарты, микросервисная архитектура, Service Mesh с Istio

CI/CD автоматизация

Jenkins пайплайны, GitLab CI, GitHub Actions, Azure DevOps, ArgoCD для GitOps, автоматическое тестирование и развертывание

Облачные решения

AWS, Google Cloud Platform, Azure, мультиоблачные решения, оптимизация затрат, масштабирование инфраструктуры

Инфраструктура как код

Terraform модули, Ansible плейбуки, автоматизация конфигурации, версионирование инфраструктуры, воспроизводимые развертывания

Мониторинг и наблюдаемость

Prometheus и VictoriaMetrics для метрик, Zabbix для мониторинга, Grafana для дашбордов, Elasticsearch и OpenSearch для логов, алертинг, трассировка, SLI/SLO мониторинг

Безопасность DevSecOps

HashiCorp Vault, Consul service discovery, управление секретами, безопасность контейнеров, compliance автоматизация

Данные и MLOps

MLflow, Kubeflow Pipelines, Airflow и lakeFS: эксперименты, пайплайны и версии данных. PostgreSQL с Patroni и ClickHouse: отказоустойчивое хранение и аналитика.

Очереди и события

Kafka для потоков событий, RabbitMQ для очередей задач, Redis для кэша и сессий. Контроль задержек и обработки сообщений.

Linux и Troubleshooting

Администрирование серверных Linux-дистрибутивов, обновления и миграции. Диагностика сети, ресурсов и сервисов, анализ первопричин инцидентов.