Рубрики
Uncategorized

Финиры EKS: 10 советов, чтобы уменьшить счет до 90% на AWS управляемых кластеров Kubernetes

Облачные вычисления допускают рационализацию затрат на инфраструктуру. Это сказано, когда вы начнете, … помеченный с AWS, облаком, Куберанес, дежоптом.

Облачные вычисления допускают рационализацию затрат на инфраструктуру. Это говорит, когда вы начинаете, счет может быстро подняться. EKS, Управляемая служба Kubernetes от AWS, не является исключением. Вот несколько советов, которые помогут вам снизить свои расходы до 90%, без снижения уровня обслуживания.

Первый элемент, который необходимо учитывать, является человеком: избегайте модификаций ручной инфраструктуры. Итак, прежде всего, используйте инструменты автоматизации, такие как Terraform, в противном случае вы понизите свой счет AWS, но он может затратить больше в зарплате. С террафом, устанавливая всю инфраструктуру, связанную с EKS, включая VPC, занимает примерно 15 минут. Каждое обновление, открепленное в этой статье, если он касается инфраструктуры, тогда только займет всего несколько минут.

Большинство из этих общих аспектов могут быть применены, по крайней мере, в философии, другим облачным провайдерам.

Один из наиболее очевидных способов обеспечить, чтобы вы только оказали необходимые ресурсы, состоит в том, чтобы установить Кластер автоскалер Отказ

Он в основном POD в кластере, который будет контролировать запрошенные ресурсы и обеспечит или удаляет узлы (вычислитель VMS) по мере необходимости.

Конфигурация должна быть отрегулирована в соответствии с контекстом. Вот пример ниже. Обратите внимание на принудительное выселение системных стручков, имеющих локальное хранилище, для действительно эффективной сверху вниз:

extraArgs:
  # scale-down-utilization-threshold: 0.5 # default
  scan-interval: 30s # default 10s
  # scale-down-delay-after-add: 10 # default
  scale-down-unneeded-time: 20m # default 10m
  scale-down-unready-time: 5m # default 20m
  skip-nodes-with-local-storage: false
  skip-nodes-with-system-pods: false

Спочные экземпляры EC2S (AWS VMS), но менее дороги (до 90%). Это AWS продает свои неиспользованные ресурсы, но они превенствуют, пользователь заканчивает риск потери рассматриваемого EC2, если AWS не падает на ресурсы по требованию одного и того же типа. Он больше не является ценой самой высокой цене в течение нескольких лет: это цена, которая слегка меняется, в зависимости от долгосрочного спроса.

Кластер Kubernetes идеально подходит для использования такого рода преимущественного ресурса: он способен обрабатывать ошибки и саморемонтировать, обеспечивая другие виртуальные машины для его узлов. Если ваши приложения уважают облачных шаблонов, таких как 12-факторная методология приложений , вы можете безопасно использовать это.

Риск потерять свой EC2S низкий, но реальный: более 4 месяцев использования T3 на ЕС-Запад-1 (Ирландия), 2 дня недоступности этого типа наблюдались в зоне. Как смягчить эту проблему? Создавая пул EC2S в виде запуска шаблона: вы можете запросить ровно 2 типа экземпляра среди набора типов, которые AWS Orders по цене. Если недорогим типом недоступно, AWS автоматически предоставит немного более дорогой тип.

Пример зонального работника_Groups_launch_template под террафом:

worker_groups_launch_template = [
{
  name = "spot-az-a"
  subnets = [module.vpc.private_subnets[0]] # only one subnet to simplify PV usage
  on_demand_base_capacity = "0"
  # on_demand_percentage_above_base_capacity = 0 # If not set, all new nodes will be spot instances
  override_instance_types  = ["t3a.xlarge", "t3.xlarge", "t2.xlarge", "m4.xlarge", "m5.xlarge", "m5a.xlarge"]
  spot_allocation_strategy = "lowest-price"
  spot_instance_pools      = 2 # "Number of Spot pools per availability zone to allocate capacity. EC2 Auto Scaling selects the cheapest Spot pools and evenly allocates Spot capacity across the number of Spot pools that you specify."
  asg_desired_capacity     = "1"
  asg_min_size             = "0"
  asg_max_size             = "10"
  key_name                 = var.cluster_name
  kubelet_extra_args       = "--node-labels=lifecycle=spot"
}

Производственная среда, вероятно, используется 24/7, но обычно среда развития используется только в рабочее время, 1/3 времени. По умолчанию, если в течение дня в течение дня в течение дня стоит тяжелая активность, стоимость кластера будет примерно одинаковым все время, потому что ОЗУ потребляется даже без активности.

Чтобы резко уменьшить количество узлов в нерабочее время, просто установите Kube-Downscaler в кластере. Принцип прост: в то время указано, что он уменьшает развертывание и устойчивые возможности до 0 PODS, за исключением определенных настраиваемых пространств имен. Резкое сокращение количества стручек приведет к тому, что кластер автоскалера автоматически удаляет неиспользуемые узлы.

Еще одно преимущество: в качестве узлов есть срок службы нескольких часов, зарезервированное дисковое пространство обычно может быть уменьшено с 100 ГБ до 20 ГБ, что позволяет очень легкую дополнительную экономию.

Внутри AWS, сетевой трафик в зоне не содержит свободных, но взимается между зонами (между центрами обработки данных).

Существует в среднем 3 зоны в регионе. На практике это профицит высокой доступности, который не нужен. Если в то же время есть 2 недоступных района, есть хороший шанс, что проблема больше, и третий также недоступен … ​

Для структур скромных размеров можно уменьшить до 2 зон в развитии или даже в производстве, в зависимости от необходимой высокой доступности. С существенными сбережениями на сетевых трансферах.

Несколько информации о EC2S (AWS VMS):

  • T2, T3, M4, M5 и др. Числа обозначают поколения. Генерация 5 — как правило, более эффективно в тестах

  • Экземпляры TN имеют технологию AWS Nitro, которые должны обеспечивать производительность до 60% на равных характеристиках, но на практике тесты не являются убедительными

  • TN экземпляры работают с кредитами. По умолчанию потребляющий ЦП в течение длительного периода времени увеличивает стоимость. И невозможно превышать 100% выделенного процессора, это действительно продолжительное использование, которое подлежит кредиту.

Вот сравнение цен в марте 2021 г. для ЕС-Запад-3 (Парижа), в экземплярах, которые могут содержать 58 стручек, с типом, точечными экземплярами цена и скидки:

4 CPU / 32 Go RAM
r5a.xlarge    0,07$/h  (-74% on 0,27$/h)
r5ad.xlarge   0,07$/h  (-77% on 0.31$/h)
r5d.xlarge    0,07$/h  (-79% on 0.34$/h)
r5.xlarge     0,09$/h  (-70% on 0,30$/h)

8 CPU / 32 Go RAM
t3a.2xlarge   0,10$/h  (-71% on 0,34$/h)
t3.2xlarge    0,11$/h  (-71% on 0,38$/h)
m5a.2xlarge   0,13$/h  (-67% on 0,40$/h)
t2.2xlarge    0,13$/h  (-69% on 0,42$/h)
m5.2xlarge    0,13$/h  (-71% on 0,45$/h)
m5ad.2xlarge  0,13$/h  (-73% on 0,48$/h)
m5d.2xlarge   0,13$/h  (-75% on 0,53$/h)

8 CPU / 16 Go RAM
c5.2xlarge    0,12$/h  (-70% on 0,40$/h)
c5d.2xlarge   0,12$/h  (-74% on 0,46$/h)

Некоторые полученные наблюдения:

  • Все эти точечные экземпляры более или менее та же цена, кроме R5, дешевле

  • CPU — это переменная, которая значительно повышает счет

  • Если требование CPU низкое (что часто бывает в случае в этапе развития), лучше использовать R5x

Обратите внимание, что если инфраструктура предоставлена террафом, изменяя тип сервера безболезненно: применение изменений не удалит EC2S на месте, именно новые, которые будут иметь новый тип.

Если доставка вашего программного обеспечения основана на потоке, связанном с несколькими ветвями, такими как Gitflow, необходимо использовать несколько уровней окружающей среды: возможно, одна среда на филиал функции, одна среда для разрабатываемой ветви, одна среда на выпускной ветви и производственная среда представлен главной ветви.

Если доставка более зрела и организована в разработке, основанном на багажнике, по крайней мере, в производственной среде и промежуточной среде (предварительно добыча/рецепт/ISO-производство).

В любом случае можно организовать только два кластера (DEV & PROD) или три (разработка, постановка и продувка).

Группировка нескольких средов в том же кластере разделяет инструменты мониторинга при отделении приложения в пространства имен. На стороне диспетчера данных (базы данных, посланников) лучше для них отделяться между средами. Например, мы можем обеспечить каждую среду управляемой БД вне кластера для самых передовых сред (постановка/производство), а с другой стороны интегрируют его в кластер Kubernetes для эфемеральных сред длительных ветвей. Теперь для большинства DBS доступна Helm Charts, которые легко установить и быстро создавать.

Небольшое предупреждение: это очевидный источник облачной экономики, но если этот аспект вызывает ежедневную трату времени из-за централизации, в конечном итоге это ложная хорошая идея, сила человека намного дороже, чем мощность машины в настоящее время.

Горизонтальный автоскалер POD (HPA) — это стандартный объект Kubernetes, позволяющий автоматически управлять количеством стручков (идентичных) приложения в соответствии с фактической деятельностью (CPU, RAM или Custom), между n и м Стручки.

Поэтому он будет более экономичным для определения HPA от 1 до 10 стручек, зная, что максимальная активность требует 10 стручек, а не определяя количество реплик, систематически к 10. Это резко сократится забронировать оформление в средах, особенно вне добычи.

В некоторых случаях горизонтальная масштабируемость POD не является опцией. Особенно для состояния базы данных, поисковая система, посланники или кеш. Почему бы не просто оставить стручки с низким бронированием, что тогда потребует ресурсы в чрезмерно высоком ограничении? Поскольку это ставит неконтролируемую конкуренцию между стручками одного и того же узла, и особенно не подразумевает реорганизацию стручков.

Вместо того, чтобы определить требования CPU/RAM, соответствующие пиковым нагрузкам, это имеет больше смысла использовать Вертикальный стручок автоскалер Отказ Таким образом, не нужно зарезервировать важные ресурсы для каждого POD нашей базы данных, увеличение и снижение бронирования будут проведены в соответствии с деятельностью. Это резко сократит законодательство в средах, особенно вне добычи.

Читайте об этом в отличной статье Вертикальный стручок AutoScaling: окончательное руководство Отказ

При создании Сервис Куберанес Тип может быть кластериком, NodePort, LoadBalancer или ExtryName. Если он имеет тип LoadBalancer, устройство будет зарезервировано для обеспечения балансировки нагрузки.

Чтобы избежать этой дорогой (и роскошной) операции, лучше определить услуги в Clusterip, и определить вход, управляемый контроллером входа, как Трафик созданный бывшим сотрудником Zenika или на основе Nginx. . Он предоставит единый балансировщик нагрузки для всех входов, и поэтому все услуги Kubernetes.

Чем больше узлов в кластере обеспечивается более высокая доступность, но более высокие системные ресурсы потребляются (несжимаются или связаны с Daemonsets), тем больше вероятность недостаточных ресурсов, чтобы поставить следующие стручки; Доступные ресурсы, которые, взятые вместе, были бы достаточно. ЦП также будет менее общим, ЦП, который более склонен к пикам в потреблении, чем память.

Меньшее количество узлов в кластере, тем больше можно избежать предыдущих проблем. Но наличие ниже, а новый узел, если он недостаточно используемый, представляет собой большой процент потери.

Средняя площадка между высокой доступностью и эффективностью ресурсов будет, от опыта, около 5-6 узлов. Итак, с 12 узлами на XLARGE EC2, выбрать EC2 2xLarge, что позволит AutoScaLer настроить до 6 узлов, возможно, 5, если распределение ресурсов было неблагоприятным.

Мы подробны 10 способов сокращать счет AWS без ущерба для устойчивости и доступности, благодаря в основном для различных механизмов аутокалирования. Чтобы продолжить изучение аспекта устойчивости на AWS, Sebastien Stormacq дал отличную конференцию в Devoxx Belgium: Условия устойчивости и доступности для облака Отказ

Оригинал: «https://dev.to/zenika/eks-10-tips-to-reduce-the-bill-up-to-90-on-aws-managed-kubernetes-clusters-epe»