Уштедите на трошковима Кубернетес облака на АВС-у

Превод чланка припремљен је уочи почетка курса „Инфраструктурна платформа заснована на Кубернетесу“.

Уштедите на трошковима Кубернетес облака на АВС-у

Како уштедети на трошковима у облаку када радите са Кубернетес-ом? Не постоји једно право решење, али овај чланак описује неколико алата који вам могу помоћи да ефикасније управљате својим ресурсима и смањите трошкове рачунарства у облаку.

Написао сам овај чланак имајући на уму Кубернетес за АВС, али ће се применити (скоро) на потпуно исти начин на друге добављаче облака. Претпостављам да ваши кластери већ имају конфигурисано аутоматско скалирање (кластер-аутоскалер). Уклањање ресурса и смањење ваше имплементације уштедеће вам новац само ако такође смањује вашу флоту радних чворова (ЕЦ2 инстанце).

Овај чланак ће покрити:

  • чишћење неискоришћених ресурса (кубе-добар)
  • Смањите скалирање током нерадног времена (кубе-довнсцалер)
  • користећи хоризонтално аутоматско скалирање (ХПА),
  • смањење прекомерне резервације ресурса (кубе-ресоурце-репорт, ВПА)
  • користећи Спот инстанце

Чишћење неискоришћених ресурса

Рад у брзом окружењу је сјајан. Желимо технолошке организације убрзано. Бржа испорука софтвера такође значи више имплементације ПР-а, окружења за преглед, прототипова и аналитичких решења. Све је постављено на Кубернетес. Ко има времена да ручно очисти пробне примене? Лако је заборавити брисање експеримента старог недељу дана. Рачун за облак ће на крају порасти због нечега што смо заборавили да затворимо:

Уштедите на трошковима Кубернетес облака на АВС-у

(Хеннинг Јацобс:
Зхиза:
(цитати) Цореи Куинн:
Мит: Ваш АВС налог је функција броја корисника које имате.
Чињеница: Ваш АВС резултат је функција броја инжењера које имате.

Иван Курносов (одговор):
Права чињеница: Ваш АВС резултат је функција броја ствари које сте заборавили да онемогућите/избришете.)

Кубернетес Јанитор (кубе-јанитор) помаже у чишћењу вашег кластера. Конфигурација домара је флексибилна и за глобалну и за локалну употребу:

  • Правила за цео кластер могу да дефинишу максимално време живота (ТТЛ) за ПР/тест примену.
  • Индивидуални ресурси могу бити означени са јанитор/ттл, на пример да се аутоматски уклони шиљак/прототип након 7 дана.

Општа правила су дефинисана у ИАМЛ датотеци. Његова путања се пропушта кроз параметар --rules-file у кубе-добар. Ево примера правила за уклањање свих именских простора -pr- у име после два дана:

- id: cleanup-resources-from-pull-requests
  resources:
    - namespaces
  jmespath: "contains(metadata.name, '-pr-')"
  ttl: 2d

Следећи пример регулише употребу ознаке апликације на модулима Деплоимент и СтатефулСет за све нове Деплоиментс/СтатефулСетс у 2020. години, али истовремено дозвољава извршавање тестова без ове ознаке недељу дана:

- id: require-application-label
  # удалить deployments и statefulsets без метки "application"
  resources:
    - deployments
    - statefulsets
  # см. http://jmespath.org/specification.html
  jmespath: "!(spec.template.metadata.labels.application) && metadata.creationTimestamp > '2020-01-01'"
  ttl: 7d

Покрените временски ограничену демонстрацију у трајању од 30 минута на кубе-јанитор у кластеру:

kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m

Други извор повећања трошкова су сталне количине (АВС ЕБС). Брисањем Кубернетес СтатефулСет-а не бришете његове трајне волумене (ПВЦ - ПерсистентВолумеЦлаим). Неискоришћене количине ЕБС-а могу лако довести до трошкова од стотина долара месечно. Кубернетес Јанитор има функцију за чишћење неискоришћених ПВЦ-ова. На пример, ово правило ће уклонити све ПВЦ-ове који нису монтирани од стране модула и на које не упућује СтатефулСет или ЦронЈоб:

# удалить все PVC, которые не смонтированы и на которые не ссылаются StatefulSets
- id: remove-unused-pvcs
  resources:
  - persistentvolumeclaims
  jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
  ttl: 24h

Кубернетес Јанитор вам може помоћи да одржите кластер чистим и спречите да се трошкови рачунарства у облаку полако гомилају. Пратите упутства за примену и конфигурацију РЕАДМЕ кубе-јанитор.

Смањите скалирање током нерадног времена

Системи за тестирање и постављање су обично потребни за рад само током радног времена. Неке производне апликације, као што су бацк оффице/администраторски алати, такође захтевају само ограничену доступност и могу бити онемогућене преко ноћи.

Кубернетес Довнсцалер (кубе-довнсцалер) омогућава корисницима и оператерима да смање систем током нерадног времена. Примене и СтатефулСетс могу да се скалирају на нулу реплика. ЦронЈобс може бити суспендован. Кубернетес Довнсцалер је конфигурисан за цео кластер, један или више именских простора или појединачне ресурсе. Можете подесити или „време мировања“ или, обрнуто, „време рада“. На пример, да бисте смањили скалирање што је више могуће током ноћи и викенда:

image: hjacobs/kube-downscaler:20.4.3
args:
  - --interval=30
  # не отключать компоненты инфраструктуры
  - --exclude-namespaces=kube-system,infra
  # не отключать kube-downscaler, а также оставить Postgres Operator, чтобы исключенными БД можно было управлять
  - --exclude-deployments=kube-downscaler,postgres-operator
  - --default-uptime=Mon-Fri 08:00-20:00 Europe/Berlin
  - --include-resources=deployments,statefulsets,stacks,cronjobs
  - --deployment-time-annotation=deployment-time

Ево графикона за скалирање чворова радника кластера викендом:

Уштедите на трошковима Кубернетес облака на АВС-у

Смањење са ~13 на 4 радна чвора свакако чини приметну разлику у вашем АВС рачуну.

Али шта ако треба да радим током „застоја“ кластера? Одређене примене се могу трајно искључити из скалирања додавањем напомене за смањење/искључивање: истинито. Примене се могу привремено искључити коришћењем напомене за смањење брзине/изузимање-до са апсолутном временском ознаком у формату ГГГГ-ММ-ДД ХХ:ММ (УТЦ). Ако је потребно, цео кластер се може смањити постављањем под са белешком downscaler/force-uptime, на пример, покретањем нгинк бланка:

kubectl run scale-up --image=nginx
kubectl annotate deploy scale-up janitor/ttl=1h # удалить развертывание через час
kubectl annotate pod $(kubectl get pod -l run=scale-up -o jsonpath="{.items[0].metadata.name}") downscaler/force-uptime=true

Видети РЕАДМЕ кубе-довнсцалер, ако сте заинтересовани за упутства за примену и додатне опције.

Користите хоризонтално аутоматско скалирање

Многе апликације/услуге раде са динамичким обрасцем учитавања: понекад су њихови модули неактивни, а понекад раде пуним капацитетом. Управљање сталном флотом махуна да се носи са максималним вршним оптерећењем није економично. Кубернетес подржава хоризонтално аутоматско скалирање преко ресурса ХоризонталПодАутосцалер (ХПА). Употреба ЦПУ-а је често добар показатељ за скалирање:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: my-app
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: my-app
  minReplicas: 3
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        averageUtilization: 100
        type: Utilization

Заландо је направио компоненту за једноставно повезивање прилагођених метрика за скалирање: Кубе метрички адаптер (кубе-метрицс-адаптер) је генерички адаптер метрике за Кубернетес који може да прикупља и служи прилагођене и екстерне метрике за хоризонтално аутоматско скалирање подова. Подржава скалирање засновано на Прометхеус метрикама, СКС редовима и другим подешавањима. На пример, да бисте прилагодили своју примену на прилагођену метрику коју сама апликација представља као ЈСОН у /метрицс користите:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
  annotations:
    # metric-config.<metricType>.<metricName>.<collectorName>/<configKey>
    metric-config.pods.requests-per-second.json-path/json-key: "$.http_server.rps"
    metric-config.pods.requests-per-second.json-path/path: /metrics
    metric-config.pods.requests-per-second.json-path/port: "9090"
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Pods
    pods:
      metric:
        name: requests-per-second
      target:
        averageValue: 1k
        type: AverageValue

Конфигурисање хоризонталног аутоматског скалирања помоћу ХПА треба да буде једна од подразумеваних радњи за побољшање ефикасности услуга без држављанства. Спотифи има презентацију са својим искуством и препорукама за ХПА: скалирајте своја распоређивања, а не новчаник.

Смањите пребукирање ресурса

Кубернетес радна оптерећења одређују њихове ЦПУ/меморијске потребе кроз „захтеве за ресурсе“. Ресурси ЦПУ-а се мере у виртуелним језграма или чешће у „миликорима“, на пример 500м подразумева 50% вЦПУ-а. Меморијски ресурси се мере у бајтовима, а могу се користити уобичајени суфикси, као што је 500Ми, што значи 500 мегабајта. Захтеви за ресурсе „закључавају“ капацитет на радним чворовима, што значи да ће модул са ЦПУ захтевом од 1000м на чвору са 4 вЦПУ-а оставити само 3 вЦПУ-а на располагању другим подовима. [КСНУМКС]

Слабо (вишак резерве) је разлика између тражених ресурса и стварне употребе. На пример, модул који захтева 2 ГиБ меморије, али користи само 200 МиБ има ~1,8 ГиБ „вишка“ меморије. Вишак кошта. Може се грубо проценити да 1 ГиБ редундантне меморије кошта ~10 долара месечно. [КСНУМКС]

Извештај о ресурсима Кубернетеса (кубе-ресоурце-репорт) приказује вишак резерви и може вам помоћи да одредите потенцијал уштеде:

Уштедите на трошковима Кубернетес облака на АВС-у

Извештај о ресурсима Кубернетеса приказује вишак агрегиран апликацијом и командом. Ово вам омогућава да пронађете места где се захтеви за ресурсима могу смањити. Генерисани ХТМЛ извештај даје само снимак коришћења ресурса. Требало би да погледате коришћење ЦПУ/меморије током времена да бисте одредили адекватне захтеве за ресурсима. Ево Графана графикона за „типичне“ услуге које оптерећују процесоре: сви модули користе знатно мање од 3 захтевана ЦПУ језгра:

Уштедите на трошковима Кубернетес облака на АВС-у

Смањење ЦПУ захтева са 3000м на ~400м ослобађа ресурсе за друга радна оптерећења и омогућава да кластер буде мањи.

„Просечна употреба ЦПУ-а ЕЦ2 инстанци често лебди у једноцифреном процентуалном опсегу,“ пише Кори Квин. Док за ЕЦ2 процена праве величине може бити лоша одлукаПромена неких Кубернетес упита ресурса у ИАМЛ датотеци је лака и може донети огромне уштеде.

Али да ли заиста желимо да људи мењају вредности у ИАМЛ датотекама? Не, машине то могу много боље! Кубернетес Вертицал Под Аутосцалер (ВПА) ради управо то: прилагођава захтеве за ресурсе и ограничења у складу са радним оптерећењем. Ево примера графикона Прометхеус ЦПУ захтева (танка плава линија) које је ВПА прилагодио током времена:

Уштедите на трошковима Кубернетес облака на АВС-у

Заландо користи ВПА у свим својим кластерима за компоненте инфраструктуре. Некритичне апликације такође могу да користе ВПА.

златокоса из Фаирвинд-а је алатка која креира ВПА за сваку примену у именском простору, а затим приказује ВПА препоруку на својој контролној табли. Може помоћи програмерима да поставе исправне ЦПУ/меморијске захтеве за своје апликације:

Уштедите на трошковима Кубернетес облака на АВС-у

Написао сам малу блог пост о ВПА 2019, а недавно у ЦНЦФ Заједница крајњих корисника је расправљала о питању ВПА.

Коришћење ЕЦ2 Спот инстанци

На крају, али не и најмање важно, трошкови АВС ЕЦ2 се могу смањити коришћењем Спот инстанци као Кубернетес радних чворова [КСНУМКС]. Спот инстанце су доступне уз попуст до 90% у поређењу са ценама на захтев. Покретање Кубернетес-а на ЕЦ2 Спот-у је добра комбинација: потребно је да наведете неколико различитих типова инстанци за већу доступност, што значи да можете добити већи чвор за исту или нижу цену, а повећани капацитет може да се користи за контејнерска Кубернетес радна оптерећења.

Како покренути Кубернетес на ЕЦ2 Спот-у? Постоји неколико опција: користите услугу треће стране као што је СпотИнст (сада се зове „Спот“, не питајте ме зашто) или једноставно додајте Спот АутоСцалингГроуп (АСГ) у свој кластер. На пример, ево ЦлоудФорматион исечка за „оптимизовани капацитет“ Спот АСГ са више типова инстанци:

MySpotAutoScalingGroup:
 Properties:
   HealthCheckGracePeriod: 300
   HealthCheckType: EC2
   MixedInstancesPolicy:
     InstancesDistribution:
       OnDemandPercentageAboveBaseCapacity: 0
       SpotAllocationStrategy: capacity-optimized
     LaunchTemplate:
       LaunchTemplateSpecification:
         LaunchTemplateId: !Ref LaunchTemplate
         Version: !GetAtt LaunchTemplate.LatestVersionNumber
       Overrides:
         - InstanceType: "m4.2xlarge"
         - InstanceType: "m4.4xlarge"
         - InstanceType: "m5.2xlarge"
         - InstanceType: "m5.4xlarge"
         - InstanceType: "r4.2xlarge"
         - InstanceType: "r4.4xlarge"
   LaunchTemplate:
     LaunchTemplateId: !Ref LaunchTemplate
     Version: !GetAtt LaunchTemplate.LatestVersionNumber
   MinSize: 0
   MaxSize: 100
   Tags:
   - Key: k8s.io/cluster-autoscaler/node-template/label/aws.amazon.com/spot
     PropagateAtLaunch: true
     Value: "true"

Неке напомене о коришћењу Спот-а са Кубернетес-ом:

  • Морате да обрађујете Спот терминације, на пример спајањем чвора када је инстанца заустављена
  • Заландо користи виљушка званично аутоматско скалирање кластера са приоритетима скупа чворова
  • Спот чворови може бити принуђен прихватите „регистрације“ радних оптерећења за покретање у Спот-у

Резиме

Надам се да ће вам неки од представљених алата бити корисни за смањење вашег рачуна у облаку. Већину садржаја чланка можете пронаћи и на мој говор на ДевОпс Гатхеринг 2019. на ИоуТубе-у и у слајдовима.

Које су ваше најбоље праксе за уштеду трошкова у облаку на Кубернетес-у? Обавестите ме на Твиттер (@три_екцепт_).

[КСНУМКС] У ствари, мање од 3 вЦПУ-а ће остати употребљиво пошто је пропусност чвора смањена резервисаним системским ресурсима. Кубернетес прави разлику између капацитета физичког чвора и „обезбеђених“ ресурса (Ноде Аллоцатабле).

[КСНУМКС] Пример прорачуна: једна м5.ларге инстанца са 8 ГиБ меморије је ~84$ месечно (еу-централ-1, Он-Деманд), тј. блокирање 1/8 чвора је приближно ~10 УСД месечно.

[КСНУМКС] Постоји много више начина да смањите свој ЕЦ2 рачун, као што су резервисане инстанце, штедни план, итд. - Нећу овде покривати те теме, али свакако бисте их требали погледати!

Сазнајте више о курсу.

Извор: ввв.хабр.цом

Додај коментар