PrepBro
Профессии
PrepBro
Профессия:

Подготовка

  • Вопросы2176
  • Задачи15

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Профессия:

Подготовка

  • Вопросы2176
  • Задачи15

Аналитика

  • hh статистика
  • Анализ резюме

Практика

  • Тестовое собеседование
  • Mock-собеседование
  • Менторы

Поддержка / отзывы

Telegram админа
Все 24 профессии
Android DeveloperData AnalystSystem Analyst1С DeveloperiOS DeveloperBusiness AnalystJava DeveloperData ScientistQA EngineerQA AutomationPHP BackendC/C++ BackendDevOps EngineerIT Project ManagerFrontend DeveloperNode.js BackendUnity DeveloperC# BackendProduct AnalystFlutter DeveloperPython DeveloperIT Product ManagerGo DeveloperData Engineer

© 2026 PrepBro. Все права защищены.

Telegram-бот

Задачи по DevOps Engineer

Настройка мониторинга с Prometheus и Grafana
2.0 Middle🔥 25💬 1

Решение

1. Установка Prometheus Stack (Kube-Prometheus-Stack)

# Добавляем Helm репозиторий
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# Создаем namespace
kubectl create namespace monitoring

# Установка prometheus stack
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --values values.yaml

# Проверка
kubectl get all -n monitoring

2. values.yaml для Helm chart

Читать полностью ->
CI/CD pipeline для микросервиса в GitLab CI
2.0 Middle🔥 25💬 1

Решение

1. .gitlab-ci.yml - Полный pipeline

# GitLab CI/CD Pipeline для микросервиса

image: docker:latest

variables:
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: "/certs"
  REGISTRY_IMAGE: "registry.gitlab.com/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME"
  DOCKER_HOST: tcp://docker:2375
  DOCKER_TLS_VERIFY: ""

services:
  - docker:dind

stages:
  - lint
  - test
  - build
  - push
  - deploy-staging
  - deploy-production

# ============================================================================
# LINT Stage
# ============================================================================
Читать полностью ->
Zero-downtime deployment для stateful приложения
3.0 Senior🔥 23💬 1

Zero-downtime deployment для stateful приложения

Пошаговый процесс деплоя

1. Подготовка (Pre-deployment)

# Создать снапшот БД перед деплоем
pg_dump -Fc production_db > backup_$(date +%Y%m%d_%H%M%S).dump

# Проверить backward-compatible миграции
python manage.py migrate --check
  • Прогнать миграции на staging-копии production БД
  • Подготовить feature flags для новых функций (выключены)
  • Убедиться, что новая версия совместима со старой схемой БД

2. Database Migration (без блокировки)

-- ПРАВИЛЬНО: backward-compatible миграция
-- Шаг 1: Добавить колонку (не блокирует)
ALTER TABLE users ADD COLUMN email_verified boolean DEFAULT false;

-- Шаг 2: Заполнить данные (в фоне)
UPDATE users SET email_verified = true
WHERE email IS NOT NULL;

-- НЕПРАВИЛЬНО: блокирующая миграция
-- ALTER TABLE users RENAME COLUMN name TO full_name; -- ЛОМАЕТ старую версию!
Читать полностью ->
Bash скрипт для анализа access.log Nginx
2.0 Middle🔥 22💬 1

Решение

1. Bash скрипт для анализа Nginx access.log

#!/bin/bash

################################################################################
# Nginx Access Log Analyzer
# Usage: ./analyze_nginx_log.sh [log_file]
# Examples:
#   ./analyze_nginx_log.sh /var/log/nginx/access.log
#   ./analyze_nginx_log.sh access.log | less
################################################################################

set -euo pipefail

# Color codes for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# Configuration
LOG_FILE="${1:-/var/log/nginx/access.log}"
LAST_HOUR_MINUTES=60
TOP_LIMIT=10

################################################################################
# Error Handling
################################################################################

error() {
    echo -e "${RED}ERROR: $*${NC}" >&2
    exit 1
}

warning() {
    echo -e "${YELLOW}WARNING: $*${NC}" >&2
}
Читать полностью ->
AWS S3 bucket policy для ограничения доступа
2.3 Middle🔥 21💬 1

Решение: AWS S3 Bucket Policy для ограничения доступа

Bucket Policy

Читать полностью ->
Создание systemd unit для автоперезапуска сервиса
1.8 Middle🔥 21💬 1

Решение

1. Systemd Unit-файл

[Unit]
Description=My Application Service
After=network.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartMaxRetries=5
RestartSec=10s
StartLimitInterval=60
StartLimitBurst=5

StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp

User=myapp
WorkingDirectory=/opt/myapp

[Install]
WantedBy=multi-user.target

2. Назначение каждой секции

Секция [Unit]

Description — краткое описание сервиса, видимое в статусе и логах.

After=network.target — сервис запустится ПОСЛЕ инициализации сетевого стека. Это критично для сервисов, которым нужна сеть.

Wants=network-online.target — дополнительная зависимость для максимально надежной работы сети (особенно при использовании DHCP).

Секция [Service]

Type=simple — стандартный тип для большинства приложений. systemd не ожидает никаких сигналов о завершении инициализации.

Читать полностью ->
Написание Terraform модуля для AWS EC2 с EBS
2.0 Middle🔥 20💬 1

Решение

1. Структура Terraform модуля

Файловая структура

ec2-module/
├── main.tf           # Основные ресурсы
├── variables.tf      # Объявление переменных
├── outputs.tf        # Выходные значения
├── terraform.tf      # Конфигурация провайдера и backend
└── terraform.tfvars  # Значения переменных (gitignore!)

2. main.tf - Основные ресурсы

# Security Group
resource "aws_security_group" "web_sg" {
  name        = "web-security-group-${var.environment}"
  description = "Security group for web server"
  vpc_id      = var.vpc_id

tags = {
    Name = "web-sg"
  }
}

# Ingress rules
resource "aws_vpc_security_group_ingress_rule" "ssh" {
  security_group_id = aws_security_group.web_sg.id
  description       = "SSH access"

from_port   = 22
  to_port     = 22
  ip_protocol = "tcp"
  cidr_ipv4   = var.ssh_cidr  # например "0.0.0.0/0" или "10.0.0.0/8"

tags = {
    Name = "ssh-rule"
  }
}
Читать полностью ->
Blue/Green деплоймент в Kubernetes
2.0 Middle🔥 20💬 1

Решение

1. Blue/Green деплоймент в Kubernetes

Blue/Green — это стратегия развертывания, при которой две идентичные среды (Blue и Green) работают параллельно. Трафик направляется на одну среду, а вторая используется для тестирования новой версии.

2. Структура решения

Blue Deployment (текущая версия)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-blue
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
      version: blue
  template:
    metadata:
      labels:
        app: myapp
        version: blue
    spec:
      containers:
      - name: myapp
        image: myapp:v1.0.0
        ports:
        - containerPort: 8080
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30

Green Deployment (новая версия)

Читать полностью ->
Проектирование инфраструктуры для высоконагруженного сервиса
3.0 Senior🔥 19💬 1

Решение: Инфраструктура для высоконагруженного сервиса бронирования

Архитектурный обзор

Для сервиса с 1 млн активных пользователей в день и требованием 99.9% доступности необходимо спроектировать многоуровневую, отказоустойчивую инфраструктуру с распределением нагрузки и автоматизацией.

1. Вычислительные ресурсы

Kubernetes кластер

Размер кластера:

  • Мастер-ноды: 3 ноды в разных зонах доступности (HA setup)
  • Рабочие ноды: минимум 6-8 нод t3.2xlarge на AWS
  • Распределение: по 2-3 нодам в каждой zone доступности

Конфигурация нод:

  • CPU: 8-16 cores
  • Memory: 32-64 GB
  • Network: 10Gbps
  • Storage: 100GB+ SSD

Autoscaling:

  • Используем Kubernetes Cluster Autoscaler
  • Metric-based scaling через HPA (Horizontal Pod Autoscaler)
  • Скейлируем по CPU (70% target) и custom metrics

2. База данных

Выбор БД и архитектура

Читать полностью ->
Скрипт автоматического бэкапа PostgreSQL
1.7 Middle🔥 19💬 1

Решение

1. Полный bash-скрипт для бэкапа PostgreSQL

#!/bin/bash

################################################################################
# PostgreSQL Backup Script with Rotation, Compression and Remote Upload
# Usage: ./backup_postgres.sh [config_file]
# Cron: 0 3 * * * /usr/local/bin/backup_postgres.sh /etc/backup/postgres.conf
################################################################################

set -euo pipefail

# Color codes
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# Configuration file
CONFIG_FILE="${1:-/etc/backup/postgres.conf}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="${LOG_DIR:-/var/log/backups}/postgres_backup_$(date +%Y%m%d).log"
ERROR_LOG="${LOG_DIR:-/var/log/backups}/postgres_backup_errors.log"

################################################################################
# Logging Functions
################################################################################
Читать полностью ->
Ansible playbook для настройки Nginx и firewall
2.3 Middle🔥 19💬 1

Решение

1. Структура Ansible проекта

ansible-project/
├── inventory.ini                # Инвентарь хостов
├── ansible.cfg                  # Конфигурация Ansible
├── playbooks/
│   ├── site.yml                 # Главный playbook
│   └── nginx.yml                # Playbook для Nginx
├── roles/
│   ├── nginx/
│   │   ├── tasks/
│   │   │   └── main.yml
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   ├── templates/
│   │   │   └── nginx.conf.j2
│   │   ├── defaults/
│   │   │   └── main.yml
│   │   └── vars/
│   │       └── main.yml
│   └── firewall/
│       └── tasks/
│           └── main.yml
├── group_vars/
│   └── all.yml
└── host_vars/
    └── example.com.yml

2. inventory.ini - Инвентарь хостов

[webservers]
web1.example.com ansible_user=ubuntu ansible_password=secret
web2.example.com ansible_user=ubuntu ansible_password=secret
web3.example.com ansible_user=ubuntu ansible_password=secret
Читать полностью ->
Helm chart для веб-приложения
1.7 Middle🔥 18💬 1

Решение

Структура Helm Chart

Helm — это менеджер пакетов для Kubernetes, обеспечивающий шаблонизацию и версионирование развертываний. Отличие от Kustomize в том, что Helm предоставляет полноценную систему управления версиями, зависимостями и репозиториями, тогда как Kustomize — это просто инструмент для наложения патчей на YAML файлы.

Создам структуру chart:

my-web-app/
├── Chart.yaml
├── values.yaml
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   ├── configmap.yaml
│   ├── secret.yaml
│   ├── hpa.yaml
│   ├── pdb.yaml
│   ├── NOTES.txt
│   └── _helpers.tpl

Chart.yaml

apiVersion: v2
name: my-web-app
description: Web application Helm chart
type: application
version: 1.0.0
appVersion: "1.0"

values.yaml

# Replica and scaling
replicaCount: 3

image:
  repository: myapp/web
  pullPolicy: IfNotPresent
  tag: "1.0.0"
Читать полностью ->
Отладка неработающего Docker контейнера
1.8 Middle🔥 18💬 1

Решение

1. Проверка статуса контейнера

Основные команды

# Список всех контейнеров
docker ps -a

# Формат с дополнительной информацией
docker ps -a --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'

# Только ID
docker ps -aq

# С временем создания
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.CreatedAt}}\t{{.Status}}"

Интерпретация статусов

# GOOD: Контейнер работает
Up 2 hours                  # ✅ Нормально работает
Up 2 hours (healthy)        # ✅ Healthcheck OK
Up 2 hours (unhealthy)      # ⚠️ Healthcheck FAILED

# BAD: Контейнер не работает
Exited (0)                  # ✅ Завершился корректно (код 0)
Exited (1)                  # ❌ Ошибка (код 1)
Exited (137)                # ❌ Убит сигналом (OOMKilled)
Exited (139)                # ❌ Segmentation fault
Created                     # ❌ Создан но не запущен
Restarting                  # ❌ Постоянно перезапускается
Dead                        # ❌ Процесс зависший
Читать полностью ->
Оптимизация Dockerfile с multi-stage build
2.3 Middle🔥 16💬 1

Решение

1. Оптимизированный Dockerfile с multi-stage build

# Stage 1: Builder (build environment)
FROM node:18-alpine AS builder

WORKDIR /app

# Копируем только package.json и package-lock.json для лучшего кэширования
COPY package*.json ./

# Устанавливаем зависимости (обе для production и dev)
RUN npm ci --only=production && \
    npm cache clean --force

# Копируем исходный код
COPY . .

# Устанавливаем dev dependencies только для build
RUN npm ci && \
    npm run build && \
    npm cache clean --force

# Stage 2: Runtime (production environment)
FROM node:18-alpine

# Создаем non-root пользователя для безопасности
RUN addgroup -g 1001 -S nodejs && \
    adduser -S nodejs -u 1001

WORKDIR /app

# Копируем только production node_modules из builder
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
Читать полностью ->
Network Policy в Kubernetes
3.0 Senior🔥 11💬 1

Решение

1. Диаграмма сетевой архитектуры

Frontend (namespace)
    ↓
    └─→ Backend:8080 (namespace)
           ↓
           └─→ Database:5432 (namespace)
               (no outbound allowed)

Правила:
1. frontend → backend:8080 ✓
2. frontend → database ✗
3. backend → database:5432 ✓
4. backend → frontend ✗
5. database → backend ✗
6. database → frontend ✗
7. Весь остальной трафик ✗

2. NetworkPolicy для Namespace Backend

Читать полностью ->