Ответ
На последних проектах я работал со следующим стеком, ориентированным на микросервисную архитектуру и облачную инфраструктуру:
Облако и инфраструктура как код (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"]
}
}
}