Какой стек технологий вы использовали на прошлых местах работы?

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

Ответ

На последних проектах я работал со следующим стеком, ориентированным на микросервисную архитектуру и облачную инфраструктуру:

Облако и инфраструктура как код (IaC):

  • AWS как основной провайдер: EC2, EKS (Kubernetes), RDS (PostgreSQL), S3, CloudFront, IAM, VPC, Route53.
  • Terraform для декларативного описания и управления всей инфраструктурой. Использовал модули, remote state в S3 с блокировкой через DynamoDB.
  • Ansible для конфигурации виртуальных машин и подготовки базовых образов (Packer).

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

  • Docker для создания образов приложений.
  • Kubernetes (EKS & kops) для оркестрации. Настраивал Ingress (nginx-ingress), ServiceAccounts, RBAC, Horizontal Pod Autoscaler.
  • Helm для управления релизами сложных приложений в Kubernetes (создавал и использовал собственные charts).

CI/CD:

  • GitLab CI с многоступенчатыми пайплайнами (build, test, security scan, deploy to staging/production).
  • Артефакты хранились в GitLab Container Registry, а позже перешли на AWS ECR.
  • Для CD использовались как Helm-релизы, так и kubectl apply с кастомными скриптами на bash/Python.

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

  • Prometheus (с операторами Prometheus-Operator и kube-prometheus-stack) для сбора метрик с Kubernetes, нод и приложений.
  • Grafana для дашбордов и визуализации.
  • Alertmanager для управления и маршрутизации алертов в Slack и PagerDuty.
  • Для логов использовали EFK-стек (Elasticsearch, Fluentd/Fluent Bit, Kibana), развёрнутый в отдельном Kubernetes-неймспейсе.

Пример фрагмента Terraform для создания EKS кластера:

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "~> 19.0"

  cluster_name    = "my-app-cluster"
  cluster_version = "1.27"

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  eks_managed_node_groups = {
    default = {
      desired_size = 2
      min_size     = 1
      max_size     = 5
      instance_types = ["t3.medium"]
    }
  }
}