Выбираем: ECS или EKS?
Команда: “Давайте K8s. Это же стандарт. Переносимость. Опыт в резюме.”
Через 3 месяца считаем, во что это обошлось.
Вы понимаете, да?
Модно, молодежно, все вот это вот…
Инфра - AWS. Микросервисы, контейнеры!
Это нормально.
Варианта в целом два:
- ECS Fargate: AWS-специфичный, managed
- EKS: Kubernetes, “стандарт индустрии” (чувствуете сарказм, да?)
Народ выбирает EKS. Аргументы:
- “K8s знают все, найти людей проще”
- “Переносимость: завтра на GCP переедем за день”
- “Гибкость: любые варианты деплоя”
Звучит разумно? Поехали, давайте посчитаем.
Что же мы получим через 3 месяца разработки
EKS control plane: $73/месяц. Это фиксированно.
Минимум 3 ноды для стабильности control plane. Даже если нагрузка - один сервис на самом маленьком инстансе.
Что у нас теперь есть:
- Ingress: NGINX Ingress Controller или ALB Ingress. Настройка, обновления, мониторинг.
- Networking: VPC CNI, security groups, pod-to-pod routing.
- Monitoring: Prometheus + Grafana или покупать Datadog.
- Logging: Fluentd/Fluent Bit → CloudWatch/S3.
- RBAC: Service accounts, IAM roles for service accounts (IRSA), namespace isolation. В ECS - IAM task role, всё.
- DNS: CoreDNS, настройка, отладка.
- Обновления: Кластер, ноды, аддоны, CNI плагины. Каждый квартал.
Время инженера: ~20-30% уходит на поддержку кластера. Не на фичи, на инфраструктуру.
В ECS это было бы:
- Ingress: ALB, всё.
- Networking: Работает по умолчанию.
- Monitoring: CloudWatch из коробки.
- Logging: Один параметр в task definition.
- RBAC: IAM task role, всё.
- DNS: Route 53 и service discovery, работает.
- Обновления: AWS делает сам.
Про “переносимость”
“Завтра переедем на GCP” - красиво звучит. В реальности:
Managed K8s отличаются:
- EKS использует AWS Load Balancer Controller (CRD под AWS ALB/NLB)
- GKE использует Google Cloud Load Balancer (другие CRD)
- Bare metal - вообще свои Ingress
Если делать “чистый K8s” для переносимости:
- Не использовать managed Load Balancers → сложнее
- Не использовать IAM integration → ещё один слой авторизации
- Не использовать провайдерские storage classes → свой Persistent Volume provisioner
Это увеличивает сложность в 1.5-2 раза.
Вопросы:
- Вы реально планируете мигрировать? Когда?
- У вас есть критерии, при которых вы переедете?
- Окупится ли самоограничение или проще допилить, когда понадобится?
Большинство компаний никогда не переезжают. Vendor lock-in страшнее в теории, чем на практике.
Аналогия
Видел историю: начальник решил работать напрямую с фабриками в Китае, чтобы избежать наценки посредника (15%).
В итоге контейнер простоял в порту одну неделю из-за забытых таможенных документов. Штрафы стоили как два месяца поставок с посредником.
С EKS похоже:
Вы “избегаете” vendor lock-in, получаете “гибкость”. Но платите временем инженеров, стабильностью, скоростью разработки.
Посредник (в данном случае AWS ECS) берёт “наценку”, но решает проблемы за вас.
Преимущества ECS
ECS Fargate:
- Деплой за <10 минут (task definition → service → URL)
- Мониторинг из коробки (CloudWatch)
- Автоскейлинг настраивается за 5 минут
- Обновления - AWS делает сам
- Networking - работает по умолчанию
Стоимость: только за контейнеры. Нет control plane, нет “минимум 3 ноды”.
Ограничения:
- Привязка к AWS
- Меньше гибкости (нет Helm, Operators, сложных patterns)
- Чистый compute - дороже за “единицу”
Но для очень многих проектов этого хватает.
Когда EKS оправдан
Честно? Не знаю.
Может быть:
- Высоконагруженный проект с десятками сервисов и сложными deployment patterns
- Команда уже знает K8s и не хочет переучиваться (серьезно? пять минут чтения-сравнения конфига?)
- Реальная мультиоблачность (не “может быть переедем”, а уже работаете в нескольких облаках)
Но даже тогда вопрос: окупается ли сложность?
Для большинства проектов EKS - это overengineering. “Правильная” архитектура, которая стоит 30% времени команды.
Еще раз:
“K8s - это стандарт” - не аргумент для выбора.
ECS проще, дешевле и быстрее в разработке. EKS гибче, но дороже в обслуживании.
Проектирование архитектуры с учётом стоимости владения (не только счет от aws, но и время команды) избавляет от таких сюрпризов. Но большинство узнают о них через некоторое время после запуска.
Почти всегда “проще и чуть дороже” лучше, чем “правильно, но сложно”.
P.S. “Гибкость” и “переносимость” звучат хорошо в презентациях. В реальности они стоят 20-30% времени команды. Это точно того стоит?