Прим. перев.: Американский DevOps-инженер Sid Palas, пользуясь недавним анонсом Google Cloud как инфоповодом, провёл сравнение стоимости услуги Managed Kubernetes (в разных конфигурациях) от ведущих мировых облачных провайдеров. Дополнительным плюсом его работы стала публикация соответствующего Jupyter Notebook, позволяющего (при наличии минимальных знаний Python) подкорректировать производимые расчёты под свои нужды.
TL;DR: Azure и Digital Ocean не взимают плату за вычислительные ресурсы, используемые для управляющего слоя (control plane), что делает их подходящим выбором для развертывания множества небольших кластеров. Для запуска малого количества крупных кластеров лучше всего подходит GKE. Кроме того, можно серьезно сократить затраты, используя спотовые/вытесняемые/низкоприоритетные узлы или «подписавшись» на длительное использование одних и тех же узлов (это касается всех платформ).
Размер кластера (количество worker'ов)
Общие сведения
Недавнее объявление Google Cloud о начале взимания 10 центов за час работы каждого кластера в GKE побудило меня заняться анализом цен на основные предложения в области управляемого (managed) Kubernetes.
Это объявление сильно расстроило некоторых…
Главными героями статьи выступают:
- Google Kubernetes Engine (GCP) – калькулятор цен;
- Elastic Kubernetes Service (AWS) – калькулятор цен;
- Azure Kubernetes Service (Azure) – калькулятор цен;
- Kubernetes on Digital Ocean – страница с ценами.
Разбивка расходов
Общие затраты на использование Kubernetes в каждой из этих платформ складываются из следующих компонентов:
- Сбор за управление кластером;
- Балансировка нагрузки (для Ingress);
- Вычислительные ресурсы (vCPU и память) worker'ов;
- Egress-трафик;
- Постоянное хранилище;
- Обработка данных балансировщиком нагрузки.
Кроме того, облачные провайдеры предлагают значительные скидки, если клиент хочет/может использовать вытесняемые (preemptible), спотовые или низкоприоритетные (low-priority) узлы ИЛИ обязуется использовать одни и те же узлы на протяжении 1-3 лет.
Стоит подчеркнуть, что, хотя стоимость является хорошим базисом для сравнения и оценки поставщиков услуги, следует учитывать и другие факторы:
- Аптайм (Service Level Agreement);
- Окружающую облачную экосистему;
- Доступные версии K8s;
- Качество документации/инструментария.
Однако эти факторы выходят за рамки данной статьи/исследования. В февральской заметке в блоге StackRox подробно рассматриваются неценовые факторы для EKS, AKS и GKE.
Блокнот Jupyter
Чтобы упростить поиск самого выгодного решения, я разработал блокнот Jupyter, задействовав в нем plotly + ipywidgets. Он позволяет сравнивать предложения провайдеров для различных размеров кластера и наборов услуг.
Поупражняться с живой версией блокнота можно в Binder:
managed-kubernetes-price-exploration.ipynb на mybinder.org
Дайте мне знать, если расчеты или исходные расценки неверны (это можно сделать с помощью issue или pull request'а в GitHub — вот репозиторий).
Выводы
Увы, нюансов слишком много, чтобы привести более конкретные рекомендации, нежели те, что включены в абзац TL;DR в самом начале. Впрочем, некоторые выводы все же можно сделать:
- В отличие от GKE и EKS, AKS и Digital Ocean не взимают плату за ресурсы управляющего слоя. AKS и DO выгоднее, если архитектура включает множество мелких кластеров (например, по кластеру на каждого разработчика или каждого клиента).
- Чуть менее дорогие вычислительные ресурсы GKE делают его более выгодным с увеличением размера кластеров*.
- Использование вытесняемых узлов или долгосрочная привязка к узлам позволяют снизить расходы более, чем на 50%. Примечание: у Digital Ocean таких скидок нет.
- Плата за исходящий трафик в Google выше, однако определяющим фактором при расчете выступает стоимость вычислительных ресурсов (если только ваш кластер не является источником значительного объема исходящих данных).
- Выбор типов машин с учетом потребностей рабочих нагрузок по CPU и памяти позволит избежать лишней платы за невостребованные ресурсы.
- Digital Ocean просит меньше за vCPU и больше за память по сравнению с другими платформами — это может стать решающим фактором для некоторых типов вычислительных нагрузок.
* Примечание: в анализе используются данные для вычислительных узлов общего назначения (general-purpose). Это экземпляры n1 GCP Compute Engine, m5 AWS ec2, виртуальные машины D2v3 Azure и droplet'ы DO с выделенными CPU. В свою очередь, можно провести и исследования среди других типов виртуальных машин (burstable, entry-level). На первый взгляд, стоимость виртуальных машин линейно зависит от числа vCPU и объема памяти, однако я не уверен, что это предположение останется справедливым для сильно нестандартных соотношений память/CPU.
В статье The Ultimate Kubernetes Cost Guide: AWS vs GCP vs Azure vs Digital Ocean, опубликованной в 2018 году, использовался эталонный кластер со 100 ядрами vCPU и 400 Гб памяти. Для сравнения, по моим расчетам, подобный кластер на каждой из этих платформ (для on-demand-экземпляров) обойдется в следующую сумму:
- AKS: 51465 USD/год
- EKS: 43138 USD/год
- GKE: 30870 USD/год
- DO: 36131 USD/год
Надеюсь, статья вместе с блокнотом помогут вам оценить основные предложения managed Kubernetes и/или сэкономить на облачной инфраструктуре, воспользовавшись скидками и другими возможностями.
P.S. от переводчика
Читайте также в нашем блоге:
- «Обзор Kubecost для экономии средств на Kubernetes в облаках»;
- «Представляем Kubernetes CCM (Cloud Controller Manager) для Яндекс.Облака»;
- «Готовить Kubernetes-кластер просто и удобно? Анонсируем addon-operator»;
- «Инфраструктура с Kubernetes как доступная услуга».
Автор: Александр Баталов