Sábháil ar chostais scamall Kubernetes ar AWS

Ullmhaíodh aistriúchán an ailt ar an oíche roimh thús an chúrsa "Ardán bonneagair bunaithe ar Kubernetes".

Sábháil ar chostais scamall Kubernetes ar AWS

Conas costais scamall a shábháil agus tú ag obair le Kubernetes? Níl aon réiteach ceart amháin ann, ach cuireann an t-alt seo síos ar roinnt uirlisí a chuideoidh leat do chuid acmhainní a bhainistiú ar bhealach níos éifeachtaí agus do chostais néalríomhaireachta a laghdú.

Scríobh mé an t-alt seo le Kubernetes le haghaidh AWS san áireamh, ach beidh feidhm aige (beagnach) go díreach ar an mbealach céanna le soláthraithe scamall eile. Tá mé ag glacadh leis go bhfuil uathscálú cumraithe cheana féin ag do bhraisle(s) (braisle-uathoibríoch). Má dhéantar acmhainní a bhaint agus d’imscaradh a laghdú, ní shábhálfar airgead duit ach amháin má laghdaíonn sé do chabhlach de nóid oibrithe (cásanna EC2).

Clúdóidh an t-alt seo:

  • acmhainní neamhúsáidte a ghlanadh (cube-doirseoir)
  • Laghdaigh scálú le linn uaireanta neamh-oibre (cube-downscaler)
  • ag baint úsáide as uathscálú cothrománach (HPA),
  • laghdú ar an iomarca áirithinte acmhainní (kube-acmhainn-tuarascáil, VPA)
  • ag baint úsáide as cásanna Spota

Glanadh suas acmhainní nach bhfuil in úsáid

Is iontach an rud é oibriú i dtimpeallacht luas tapa. Ba mhaith linn eagraíochtaí teicneolaíochta luathaithe. Ciallaíonn seachadadh bogearraí níos tapúla freisin níos mó imscaradh PR, timpeallachtaí réamhamhairc, fréamhshamhlacha, agus réitigh anailísíochta. Tá gach rud imscaradh ar Kubernetes. Cé a bhfuil an t-am aige imscaradh tástála a ghlanadh de láimh? Tá sé éasca dearmad a dhéanamh ar thurgnamh seachtaine a scriosadh. Beidh an bille scamall ag ardú faoi dheireadh mar gheall ar rud éigin a ndearna muid dearmad a dhúnadh:

Sábháil ar chostais scamall Kubernetes ar AWS

(Henning Jacobs:
Zhiza:
(sleachta) Corey Quinn:
Miotas: Is feidhm é do chuntas AWS den líon úsáideoirí atá agat.
Fíric: Is feidhm é do scór AWS den líon innealtóirí atá agat.

Ivan Kurnosov (mar fhreagra):
Fíorfhíric: Is feidhm é do scór AWS den líon rudaí a ndearna tú dearmad orthu a dhíchumasú / a scriosadh.)

Doirseoir Kubernetes (kube-janitor) cuidíonn sé le do bhraisle a ghlanadh. Tá cumraíocht an dorsóra solúbtha le haghaidh úsáide domhanda agus áitiúil araon:

  • Is féidir le rialacha ar fud an bhraisle an t-uasmhéid ama le maireachtáil (TTL) le haghaidh imscaradh PR/tástálacha a shainiú.
  • Is féidir acmhainní aonair a anótáil le janitor/ttl, mar shampla chun an spíc/fréamhshamhail a bhaint go huathoibríoch tar éis 7 lá.

Sainmhínítear rialacha ginearálta sa chomhad YAML. Cuirtear a cosán tríd an bparaiméadar --rules-file i gcúba-janitor. Seo sampla de riail chun gach ainmspás a bhaint le -pr- san ainm tar éis dhá lá:

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

Rialaíonn an sampla seo a leanas úsáid an lipéid feidhmchláir ar na pods Imlonnaithe agus StatefulSet do gach Imscaradh/Socraí Staitistiúla nua in 2020, ach ceadaíonn sé ag an am céanna tástálacha a dhéanamh gan an lipéad seo ar feadh seachtaine:

- 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

Rith taispeántas a bhfuil teorainn ama leis ar feadh 30 nóiméad ar bhraisle ag rith kube-janitor:

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

Foinse eile de chostais mhéadaitheacha is ea méideanna leanúnacha (AWS EBS). Má scriostar Kubernetes StatefulSet, ní scriosann sé sin a imleabhair sheasmhacha (PVC - PersistentVolumeClaim). D'fhéadfadh costais na gcéadta dollar in aghaidh na míosa a bheith mar thoradh ar mhéideanna EBS neamhúsáidte. Tá gné ag Kubernetes Janitor chun PVC neamhúsáidte a ghlanadh. Mar shampla, bainfidh an riail seo gach PVC nach bhfuil gléasta ag modúl agus nach bhfuil tagairt ag StatefulSet nó CronJob:

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

Is féidir le Kubernetes Janitor cabhrú leat do bhraisle a choinneáil glan agus costais néalríomhaireachta a chosc ó charnadh go mall. Le haghaidh treoracha imlonnaithe agus cumraíochta, lean README cube-dorsaí.

Laghdaigh scálú le linn uaireanta neamh-oibre

Go hiondúil ní bhíonn gá le córais tástála agus stáitsithe ach amháin le haghaidh oibriú le linn uaireanta gnó. Ní bhíonn ach infhaighteacht theoranta ag teastáil ó roinnt feidhmchlár táirgthe, mar uirlisí cúloifige/riaracháin, agus d’fhéadfaí iad a dhíchumasú thar oíche.

Kubernetes Downscaler (kube-downscaler) ligeann d’úsáideoirí agus d’oibreoirí scála síos a dhéanamh ar an gcóras le linn uaireanta neamh-oibre. Is féidir le Imscaradh agus StatefulSets scála go nialas macasamhla. Féadfar CronJobs a chur ar fionraí. Tá Kubernetes Downscaler cumraithe le haghaidh braisle iomlán, ainmspás amháin nó níos mó, nó acmhainní aonair. Is féidir leat “am díomhaoin” nó, os a choinne sin, “am oibre” a shocrú. Mar shampla, scálú a laghdú oiread agus is féidir le linn oícheanta agus deireadh seachtaine:

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 chun nóid oibrithe braisle a scálaiú ar an deireadh seachtaine:

Sábháil ar chostais scamall Kubernetes ar AWS

Is cinnte go ndéanfaidh scálú síos ó ~13 go 4 nód oibrí difríocht shuntasach i do bhille AWS.

Ach cad más gá dom a bheith ag obair le linn "aga neamhfhónaimh" braisle? Is féidir imscaradh áirithe a eisiamh go buan ó scálaithe ach an scálaí anuas/eisiamh a chur leis: fíornóta. Is féidir imscaradh a eisiamh go sealadach trí úsáid a bhaint as an scálaí anuas/eisiamh go dtí an nóta le stampa ama iomlán san fhormáid BBBB-MM-LL HH:MM (UTC). Más gá, is féidir an braisle iomlán a laghdú siar trí choda a bhfuil an nóta air a úsáid downscaler/force-uptime, mar shampla, trí nginx bán a sheoladh:

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

Féach README cube-downscaler, má tá suim agat i dtreoracha imlonnaithe agus roghanna breise.

Úsáid uathscálú cothrománach

Déileálann go leor feidhmchlár/seirbhísí le patrún lódála dinimiciúil: uaireanta bíonn a modúil díomhaoin, agus uaireanta oibríonn siad ag a lánacmhainneacht. Níl sé eacnamaíoch cabhlach buan pods a oibriú chun déileáil leis an uasualach buaic. Tacaíonn Kubernetes le scálú uathoibríoch cothrománach thar acmhainn Uathscálaálaí Pod Cothrománach (HPA). Is minic gur táscaire maith é úsáid LAP le haghaidh scálaithe:

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

Tá comhpháirt cruthaithe ag Zalando chun méadracht shaincheaptha a nascadh go héasca le haghaidh scálaithe: Cuibheoir Méadracht Kube (kube-metrics-adapter) oiriúntóir méadrachta cineálach do Kubernetes atá in ann méadrachtaí saincheaptha agus seachtracha a bhailiú agus a fhreastal chun pods a uathscálú go cothrománach. Tacaíonn sé le scálú bunaithe ar mhéadracht Prometheus, scuainí SQS, agus socruithe eile. Mar shampla, chun d’imscaradh a scálaáil go méadrach saincheaptha a léiríonn an feidhmchlár é féin mar JSON in úsáid / méadracht:

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

Ba cheart uathscálú cothrománach a chumrú le HPA a bheith ar cheann de na bearta réamhshocraithe chun éifeachtúlacht a fheabhsú do sheirbhísí gan stát. Tá cur i láthair ag Spotify lena dtaithí agus lena moltaí do HPA: scála do imscaradh, ní do sparán.

Laghdú ar ró-áirithintí acmhainní

Cinneann ualaí oibre Kubernetes a gcuid riachtanas LAP / cuimhne trí “iarratais acmhainne.” Déantar acmhainní LAP a thomhas i gcroíthe fíorúla nó níos coitianta i “millicéar”, mar shampla tugann 500m le tuiscint 50% vCPU. Déantar acmhainní cuimhne a thomhas i mbearta, agus is féidir iarmhíreanna coitianta a úsáid, mar shampla 500Mi, rud a chiallaíonn 500 meigeavata. Cuireann iarratais acmhainne toilleadh “glas” ar nóid oibrithe, rud a chiallaíonn nach bhfágfaidh pod le hiarratas 1000m LAP ar nód le 4 vCPU ach 3 vCPU ar fáil do phodanna eile. [1]

Slack (cúlchiste breise) an difríocht idir acmhainní iarrtha agus úsáid iarbhír. Mar shampla, tá ~2 GiB de chuimhne “barrachais” ag pod a iarrann 200 GiB ach nach n-úsáideann ach 1,8 MiB. Cosnaíonn an iomarca airgid. Is féidir a mheas go garbh go gcosnaíonn 1 GiB de chuimhne iomarcach ~$10 in aghaidh na míosa. [2]

Tuarascáil Acmhainní Kubernetes (kube-resource-report) le cúlchistí barrachais a thaispeáint agus is féidir leis cabhrú leat acmhainneacht choigiltis a chinneadh:

Sábháil ar chostais scamall Kubernetes ar AWS

Tuarascáil Acmhainní Kubernetes léiríonn sé an farasbarr arna chomhiomlánú de réir feidhme agus ordú. Ligeann sé seo duit áiteanna a aimsiú inar féidir éilimh acmhainní a laghdú. Ní sholáthraíonn an tuarascáil HTML ginte ach léargas ar úsáid acmhainní. Ba cheart duit breathnú ar úsáid LAP/cuimhne thar am chun iarratais acmhainne imleor a chinneadh. Seo cairt Grafana do sheirbhís “gnáth” LAP-trom: tá gach pod ag baint úsáide as i bhfad níos lú ná na 3 chroíleacáin CPU iarrtha:

Sábháil ar chostais scamall Kubernetes ar AWS

Má laghdaítear an t-iarratas LAP ó 3000m go ~400m scaoiltear acmhainní d'ualaí oibre eile agus ligeann sé don bhraisle a bheith níos lú.

“Is minic a aistríonn meánúsáid LAP cásanna EC2 sa raon céatadáin aon dhigit,” scríobhann Corey Quinn. Cé go EC2 d’fhéadfadh gur drochchinneadh é an méid ceart a mheasTá sé éasca roinnt ceisteanna acmhainne Kubernetes a athrú i gcomhad YAML agus is féidir coigilteas ollmhór a bhaint amach.

Ach an bhfuil muid ag iarraidh i ndáiríre daoine ag athrú luachanna i gcomhaid YAML? Ní féidir, is féidir le meaisíní é a dhéanamh i bhfad níos fearr! Cubernetes Uathscálaálaí Pod Ingearach Déanann (VPA) an méid seo a leanas: go n-oiriúnaítear iarratais agus srianta acmhainní de réir an ualaigh oibre. Seo sampla d’iarratais LAP Prometheus (líne ghorm tanaí) arna oiriúnú ag VPA le himeacht ama:

Sábháil ar chostais scamall Kubernetes ar AWS

Úsáideann Zalando VPA ina braislí go léir le haghaidh comhpháirteanna bonneagair. Is féidir le feidhmchláir neamhchriticiúil VPA a úsáid freisin.

Goldilocks Is uirlis é ó Fairwind a chruthaíonn VPA do gach imscaradh in ainmspás agus ansin a thaispeánann moladh VPA ar a dheais. Is féidir leis cabhrú le forbróirí na hiarratais LAP/chuimhne cearta a shocrú dá bhfeidhmchláir:

Sábháil ar chostais scamall Kubernetes ar AWS

Scríobh mé beag blogphost faoi VPA in 2019, agus le déanaí i Phléigh Pobal Úsáideoir Deiridh CNCF saincheist VPA.

Ag baint úsáide as Spotphointí EC2

Ar deireadh ach ní ar a laghad, is féidir costais AWS EC2 a laghdú trí úsáid a bhaint as cásanna Spot mar nóid oibrithe Kubernetes [3]. Tá cásanna spota ar fáil ar lascaine suas le 90% i gcomparáid le praghsanna Ar Éileamh. Is meascán maith é reáchtáil Kubernetes ar EC2 Spot: ní mór duit roinnt cineálacha cásanna éagsúla a shonrú le haghaidh infhaighteacht níos airde, rud a chiallaíonn gur féidir leat nód níos mó a fháil ar an bpraghas céanna nó ar an bpraghas níos ísle, agus is féidir an cumas méadaithe a úsáid le hualaí oibre coimeádán Kubernetes.

Conas Kubernetes a rith ar EC2 Spot? Tá roinnt roghanna ann: bain úsáid as seirbhís tríú páirtí cosúil le SpotInst (ar a dtugtar "Spot" anois", ná fiafraigh díom cén fáth), nó go simplí cuir Spot AutoScalingGroup (ASG) le do bhraisle. Mar shampla, seo blúire CloudFormation le haghaidh ASG Spota "uasmhéadaithe" le cineálacha éagsúla cásanna:

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"

Roinnt nótaí ar úsáid Spot le Kubernetes:

  • Ní mór duit foircinn Spota a láimhseáil, mar shampla tríd an nód a chumasc nuair a chuirtear stop leis an ásc
  • Úsáideann Zalando forc uathscálú oifigiúil braisle le tosaíochtaí maidir le comhthiomsú nód
  • nóid spota is féidir iallach glacadh le “cláruithe” na n-ualaí oibre le rith in Spot

Achoimre

Tá súil agam go bhfaighidh tú cuid de na huirlisí a chuirtear i láthair úsáideach chun do bhille néil a laghdú. Is féidir leat an chuid is mó d'ábhar an ailt a fháil freisin ag mo chaint ag DevOps Gathering 2019 ar YouTube agus sna sleamhnáin.

Cad iad na cleachtais is fearr atá agat chun costais scamall a shábháil ar Kubernetes? Cuir in iúl dom ag Twitter (@try_except_).

[1] Go deimhin, beidh níos lú ná 3 vCPU fós inúsáidte toisc go laghdaítear tréchur an nód le hacmhainní córais in áirithe. Déanann Kubernetes idirdhealú idir acmhainn nód fisiciúil agus acmhainní "soláthair" (Nód Leithdháilte).

[2] Sampla ríofa: sampla m5.large amháin le 8 GiB de chuimhne ná ~$84 ​​in aghaidh na míosa (eu-central-1, Ar Éileamh), i.e. is ionann blocáil nód 1/8 agus thart ar ~$10/mí.

[3] Tá go leor bealaí eile ann chun do bhille EC2 a laghdú, ar nós Cásanna Forchoimeádta, Plean Coigiltis, srl. - ní chlúdóidh mé na hábhair sin anseo, ach is cinnte go bhféachfá orthu!

Tuilleadh eolais faoin gcúrsa.

Foinse: will.com

Add a comment