Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Chaidh an eadar-theangachadh den artaigil ullachadh air an oidhche ro thoiseach a’ chùrsa "Àrd-ùrlar bun-structair stèidhichte air Kubernetes".

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Mar a shàbhaileas tu air cosgaisean sgòthan nuair a bhios tu ag obair le Kubernetes? Chan eil aon fhuasgladh ceart ann, ach tha an artaigil seo a’ toirt cunntas air grunn innealan a chuidicheas tu gus do ghoireasan a riaghladh nas èifeachdaiche agus na cosgaisean coimpiutaireachd sgòthan agad a lughdachadh.

Sgrìobh mi an artaigil seo le Kubernetes airson AWS san amharc, ach bidh e a’ buntainn (cha mhòr) san aon dòigh ri solaraichean sgòthan eile. Tha mi a’ gabhail ris gu bheil fèin-sgèileadh air a rèiteachadh aig a’ bhuidheann(an) agad mu thràth (brabhsair-fèin-ghluasadach). Le bhith a’ toirt air falbh ghoireasan agus a’ lughdachadh do chleachdadh cha shàbhail sin airgead dhut ach ma lùghdaicheas e cuideachd do chabhlach de nodan luchd-obrach (suidheachaidhean EC2).

Còmhdaichidh an artaigil seo:

  • a’ glanadh ghoireasan nach eilear a’ cleachdadh (cube-dorsair)
  • Lùghdaich sgèileadh rè uairean neo-obrach (inneal-slaodaidh sìos)
  • cleachdadh fèin-sgèile còmhnard (HPA),
  • lùghdachadh cus stòrasan glèidhte (kube-goireas-aithisg, VPA)
  • a’ cleachdadh eisimpleirean Spot

A’ glanadh ghoireasan nach eilear a’ cleachdadh

Tha e math a bhith ag obair ann an àrainneachd aig astar luath. Tha sinn ag iarraidh buidhnean teignigeach luathaich. Tha lìbhrigeadh bathar-bog nas luaithe cuideachd a’ ciallachadh barrachd cleachdadh PR, àrainneachdan ro-shealladh, prototypes, agus fuasglaidhean anailis. Tha a h-uile càil air a chleachdadh air Kubernetes. Cò aig a bheil an ùine airson cleachdadh deuchainn a ghlanadh le làimh? Tha e furasta dìochuimhneachadh mu bhith a’ cuir às do dheuchainn seachdaineach. Bidh bile na sgòthan ag èirigh mar thoradh air rudeigin a dhìochuimhnich sinn a dhùnadh:

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

(Henning Jacobs:
Zhiza:
(a’ luaidh) Corey Quinn:
Myth: Tha an cunntas AWS agad mar dhleastanas air an àireamh de luchd-cleachdaidh a tha agad.
Fact: Tha an sgòr AWS agad mar dhleastanas air an àireamh de innleadairean a tha agad.

Ivan Kurnosov (mar fhreagairt):
Fìor fhìrinn: Tha an sgòr AWS agad mar dhleastanas air an àireamh de rudan a dhìochuimhnich thu a chuir à comas / cuir às.)

Neach-gleidhidh Kubernetes (kube-dorsair) a’ cuideachadh le bhith a’ glanadh do bhuidheann. Tha rèiteachadh an dorsair sùbailte airson cleachdadh cruinneil agus ionadail:

  • Faodaidh riaghailtean air feadh na buidhne an ùine-beatha as àirde (TTL) a mhìneachadh airson cleachdadh PR/deuchainn.
  • Faodar goireasan fa leth a chomharrachadh le dorsair/ttl, mar eisimpleir gus an spìc/prototype a thoirt air falbh gu fèin-ghluasadach às deidh 7 latha.

Tha riaghailtean coitcheann air am mìneachadh ann am faidhle YAML. Tha an t-slighe aige a 'dol tron ​​​​pharamadair --rules-file ann an cube-dorsair. Seo eisimpleir de riaghailt airson a h-uile àite ainm a thoirt air falbh le -pr- ann an ainm an dèidh dà latha:

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

Tha an eisimpleir a leanas a’ riaghladh cleachdadh leubail an tagraidh air na pods Deployment and StatefulSet airson a h-uile cleachdadh ùr / StatefulSets ann an 2020, ach aig an aon àm a’ ceadachadh deuchainnean a dhèanamh às aonais an leubail seo airson seachdain:

- 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

Ruith demo le ùine cuibhrichte airson 30 mionaid air buidheann a tha a’ ruith kube-dorsair:

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

Is e stòr eile de chosgaisean àrdachadh meudan leantainneach (AWS EBS). Cha bhith cuir às do Kubernetes StatefulSet a’ cuir às do na h-àireamhan leantainneach aige (PVC - PersistentVolumeClaim). Faodaidh meudan EBS nach deach a chleachdadh cosgaisean ceudan dolar gach mìos adhbhrachadh gu furasta. Tha feart aig Kubernetes Janitor airson PVCan nach deach a chleachdadh a ghlanadh. Mar eisimpleir, bheir an riaghailt seo air falbh a h-uile PVC nach eil air an cur suas le modal agus nach eil air an ainmeachadh le StatefulSet no CronJob:

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

Faodaidh Kubernetes Janitor do chuideachadh gus do bhuidheann a chumail glan agus casg a chuir air cosgaisean coimpiutaireachd sgòthan bho bhith a’ càrnadh gu slaodach. Airson cleachdadh agus stiùireadh rèiteachaidh, lean README cube-dorsair.

Lùghdaich sgèileadh rè uairean neo-obrach

Mar as trice chan fheum siostaman deuchainn is stèidse obrachadh ach rè uairean obrach. Chan fheum cuid de thagraidhean cinneasachaidh, leithid innealan cùl-oifis / rianachd, ach ruigsinneachd cuibhrichte agus dh’ fhaodadh iad a bhith ciorramach thar oidhche.

Kubernetes Downscaler (kube-downscaler) a’ leigeil le luchd-cleachdaidh agus gnìomhaichean an siostam a lughdachadh rè uairean neo-obrach. Faodaidh cleachdadh agus StatefulSets sgèile gu mac-samhail neoni. Faodar CronJobs a chuir dheth. Tha Kubernetes Downscaler air a rèiteachadh airson cruinneachadh iomlan, aon àite ainm no barrachd, no goireasan fa leth. Faodaidh tu an dàrna cuid “ùine leisg” no, air an làimh eile, “ùine obrach” a shuidheachadh. Mar eisimpleir, gus sgèileadh a lughdachadh cho mòr ‘s as urrainn air oidhcheannan agus deireadh-sheachdainean:

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

Seo graf airson nodan luchd-obrach brabhsair a sgèileadh air deireadh-sheachdainean:

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Le bhith a’ lughdachadh bho ~ 13 gu 4 nodan luchd-obrach gu cinnteach a’ dèanamh eadar-dhealachadh follaiseach anns a’ bhile AWS agad.

Ach dè ma dh’ fheumas mi a bhith ag obair aig àm “downtime” brabhsair? Faodar cuid de chleachdadh a bhith air an dùnadh a-mach gu maireannach bho sgèileadh le bhith a’ cur an downscaler / às-dùnadh: fìor mhothachadh. Faodar cleachdadh a chuir a-mach airson ùine le bhith a’ cleachdadh an downscaler/exclude-gus an nota le stampa-ama iomlan san cruth BBBB-MM-DD HH:MM (UTC). Ma tha feum air, faodar an cruinneachadh gu lèir a thoirt air ais le bhith a’ cleachdadh pod leis an nota downscaler/force-uptime, mar eisimpleir, le bhith a’ cur air bhog nginx bàn:

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

Faic README kube-downscaler, ma tha ùidh agad ann an stiùireadh cleachdadh agus roghainnean a bharrachd.

Cleachd fèin-sgèileadh còmhnard

Bidh mòran thagraidhean/seirbheisean a’ dèiligeadh ri pàtran luchdachadh fiùghantach: uaireannan bidh na modalan aca leisg, agus uaireannan bidh iad ag obair aig làn chomas. Chan eil e eaconamach a bhith ag obrachadh cabhlach maireannach de pods gus dèiligeadh ris an luchd as àirde. Bidh Kubernetes a’ toirt taic do sgèileadh fèin-ghluasadach thairis air goireas Sgèilear fèin-ghluasadach Pod còmhnard (HPA). Tha cleachdadh CPU gu tric na dheagh chomharra airson sgèileadh:

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

Tha Zalando air pàirt a chruthachadh gus meatrach àbhaisteach a cheangal airson sgèileadh: Adaptor Kube Metrics (kube-metrics-adapter) na inneal-atharrachaidh metrics coitcheann airson Kubernetes as urrainn metrics àbhaisteach agus taobh a-muigh a chruinneachadh agus a fhrithealadh airson fèin-sgèileadh còmhnard de pods. Bidh e a’ toirt taic do sgèileadh stèidhichte air metrics Prometheus, ciudhaichean SQS, agus suidheachaidhean eile. Mar eisimpleir, gus do chleachdadh a sgèileadh gu meatrach àbhaisteach air a riochdachadh leis an tagradh fhèin mar JSON ann an / metrics cleachdadh:

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

Bu chòir rèiteachadh fèin-sgèile còmhnard le HPA a bhith mar aon de na gnìomhan bunaiteach gus èifeachdas a leasachadh airson seirbheisean gun stàit. Tha taisbeanadh aig Spotify leis an eòlas agus na molaidhean aca airson HPA: meud do chleachdadh, chan e do sporan.

Lùghdaich cus glèidhidh stòrais

Bidh eallach obrach Kubernetes a’ dearbhadh na feumalachdan CPU / cuimhne aca tro “iarrtasan stòrais.” Tha goireasan CPU air an tomhas ann an coraichean brìgheil no mar as trice ann am “millicores”, mar eisimpleir tha 500m a’ ciallachadh 50% vCPU. Tha goireasan cuimhne air an tomhas ann am bytes, agus faodar iar-leasachan cumanta a chleachdadh, leithid 500Mi, a tha a’ ciallachadh 500 megabytes. Bidh iarrtasan stòrais ag iarraidh comas “glasadh” air nodan luchd-obrach, a’ ciallachadh nach fàg pod le iarrtas CPU 1000m air nód le 4 vCPUn ach 3 vCPUn ri fhaighinn airson pods eile. [1]

Slack (barrachd stòras) Is e an diofar eadar goireasan a chaidh iarraidh agus fìor chleachdadh. Mar eisimpleir, tha ~ 2 GiB de chuimhne “cus” aig pod a dh’ iarras 200 GiB de chuimhne ach nach cleachd ach 1,8 MiB. Tha cus a’ cosg airgead. Faodaidh aon tuairmse a dhèanamh gu bheil 1 GiB de chuimhne gun fheum a’ cosg ~ $ 10 gach mìos. [2]

Aithisg Ghoireasan Kubernetes (kube-resource-report) a’ taisbeanadh cus stòrasan agus cuidichidh e thu le bhith a’ dearbhadh comas sàbhalaidh:

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Aithisg Ghoireasan Kubernetes a’ sealltainn an còrr air a chruinneachadh le tagradh agus àithne. Leigidh seo leat àiteachan a lorg far am faodar iarrtasan ghoireasan a lùghdachadh. Chan eil an aithisg HTML a chaidh a chruthachadh a’ toirt seachad ach dealbh de chleachdadh ghoireasan. Bu chòir dhut sùil a thoirt air cleachdadh CPU/cuimhne thar ùine gus iarrtasan ghoireasan iomchaidh a dhearbhadh. Seo cairt Grafana airson seirbheis “àbhaisteach” CPU-trom: tha a h-uile pod a ’cleachdadh mòran nas lugha na na coraichean CPU 3 a chaidh iarraidh:

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Le bhith a’ lughdachadh iarrtas CPU bho 3000m gu ~ 400m bidh sin a’ saoradh ghoireasan airson eallach obrach eile agus a’ leigeil leis a’ bhuidheann a bhith nas lugha.

“Gu tric bidh cleachdadh cuibheasach CPU de shuidheachaidhean EC2 a’ dol suas anns an raon ceudad aon-fhigearach, ” a’ sgrìobhadh Corey Quinn. Aig an aon àm airson EC2 dh’ fhaodadh gur e droch cho-dhùnadh a th’ ann a bhith a’ tomhas a’ mheud cheartTha e furasta cuid de cheistean goireas Kubernetes atharrachadh ann am faidhle YAML agus bheir e sàbhalaidhean mòra.

Ach a bheil sinn dha-rìribh ag iarraidh air daoine luachan atharrachadh ann am faidhlichean YAML? Chan e, faodaidh innealan a dhèanamh tòrr nas fheàrr! Cubernetes Inghearach Pod Autoscaler (VPA) dìreach sin: ag atharrachadh iarrtasan stòrais agus cuingeadan a rèir an eallach obrach. Seo eisimpleir de ghraf de iarrtasan Prometheus CPU (loidhne tana gorm) air atharrachadh le VPA thar ùine:

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Bidh Zalando a’ cleachdadh VPA anns a h-uile buidheann airson co-phàirtean bun-structair. Faodaidh tagraidhean neo-èiginneach VPA a chleachdadh cuideachd.

Òrain bho Fairwind na inneal a chruthaicheas VPA airson gach cleachdadh ann an ainm-àite agus an uairsin a’ taisbeanadh moladh VPA air an deas-bhòrd aige. Faodaidh e luchd-leasachaidh a chuideachadh gus na h-iarrtasan CPU / cuimhne ceart a shuidheachadh airson na tagraidhean aca:

Sàbhail air cosgaisean sgòthan Kubernetes air AWS

Sgrìobh mi pìos beag post blog mu VPA ann an 2019, agus o chionn ghoirid ann an Bheachdaich Coimhearsnachd Cleachdaiche Deireannach CNCF air cùis VPA.

A’ cleachdadh EC2 Spot Instances

Mu dheireadh ach chan e as ìsle, faodar cosgaisean AWS EC2 a lughdachadh le bhith a ’cleachdadh suidheachaidhean Spot mar nodan neach-obrach Kubernetes [3]. Tha eisimpleirean spot rim faighinn aig lasachadh suas ri 90% an taca ri prìsean On-Demand. Tha ruith Kubernetes air EC2 Spot na mheasgachadh math: feumaidh tu grunn sheòrsaichean eisimpleirean a shònrachadh airson ruigsinneachd nas àirde, a’ ciallachadh gum faigh thu nód nas motha airson an aon phrìs no prìs nas ìsle, agus faodar an comas nas motha a chleachdadh le eallach obrach Kubernetes container.

Mar a ruitheas tu Kubernetes air EC2 Spot? Tha grunn roghainnean ann: cleachd seirbheis treas-phàrtaidh mar SpotInst (ris an canar a-nis “Spot”, na faighnich dhomh carson), no dìreach cuir Spot AutoScalingGroup (ASG) ris a’ bhuidheann agad. Mar eisimpleir, seo criomag CloudFormation airson Spot ASG “optimized-comas” le iomadh seòrsa eisimpleir:

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"

Nòtaichean mu bhith a’ cleachdadh Spot le Kubernetes:

  • Feumaidh tu crìoch a chuir air Spot, mar eisimpleir le bhith a’ ceangal an nód nuair a thèid stad a chuir air an eisimpleir
  • Bidh Zalando a’ cleachdadh forc fèin-sgèileadh brabhsair oifigeil le prìomhachasan amar nód
  • Nithean spot faodar a sparradh gabhail ri “clàraidhean” de dh’ eallach obrach ri ruith ann an Spot

Geàrr-chunntas

Tha mi an dòchas gum bi cuid de na h-innealan a tha air an taisbeanadh feumail dhut gus do bhile sgòthan a lughdachadh. Gheibh thu a’ mhòr-chuid de shusbaint an artaigil cuideachd aig an òraid agam aig DevOps Gathering 2019 air YouTube agus ann an sleamhnagan.

Dè na cleachdaidhean as fheàrr a th ’agad airson cosgaisean sgòthan a shàbhaladh air Kubernetes? Feuch an cuir thu fios thugam aig Twitter (@try_except_).

[1] Gu dearbh, bidh nas lugha na 3 vCPUn fhathast comasach a chleachdadh leis gu bheil toradh an nód air a lughdachadh le goireasan siostam glèidhte. Tha Kubernetes a’ dèanamh eadar-dhealachadh eadar comas nód fiosaigeach agus goireasan “solaraichte” (Node ri riarachadh).

[2] Eisimpleir àireamhachaidh: tha aon eisimpleir m5.large le 8 GiB de chuimhne ~$84 ​​sa mhìos (eu-central-1, On-Demand), i.e. tha bacadh nód 1/8 timcheall air ~ $ 10 / mìos.

[3] Tha tòrr a bharrachd dhòighean ann air do bhile EC2 a lughdachadh, leithid Cùisean Glèidhte, Plana Caomhnaidh, msaa. - cha bhith mi a’ còmhdach na cuspairean sin an seo, ach bu chòir dhut gu cinnteach coimhead a-steach orra!

Ionnsaich tuilleadh mun chùrsa.

Source: www.habr.com

Cuir beachd ann