Kuturikirwa kwechinyorwa kwakagadzirirwa manheru ekutanga kwekosi
Nzira yekuchengetedza sei pamutengo wegore paunenge uchishanda neKubernetes? Iko hakuna mhinduro imwechete chaiyo, asi chinyorwa ichi chinotsanangura akati wandei maturusi anogona kukubatsira kubata zviwanikwa zvako zvakanyanya uye kuderedza mutengo wako wekombuta.
Ndakanyora chinyorwa ichi naKubernetes yeAWS mupfungwa, asi ichashanda (inenge) nenzira imwechete kune vamwe vanopa makore. Ndiri kufunga kuti masumbu ako (s) atove neautoscaling akagadziridzwa (
Ichi chinyorwa chichabata:
- kuchenesa zviwanikwa zvisina kushandiswa (
kube-janitor ) - Deredza kuyera panguva isiri yekushanda maawa (
kube-downscaler ) - uchishandisa horizontal autoscaling (HPA),
- kuderedzwa kwekunyanya kuchengetedza zviwanikwa (
kube-resource-report , VPA) - kushandisa Spot zviitiko
Kuchenesa zviwanikwa zvisina kushandiswa
Kushanda munzvimbo inomhanya-mhanya kwakanaka. Tinoda tech masangano
(Henning Jacobs:
Zhiza:
(zvinyorwa) Corey Quinn:
Nhema: Yako AWS account ibasa rehuwandu hwevashandisi vaunavo.
Chokwadi: Yako AWS mamakisi ibasa rehuwandu hwemainjiniya auinawo.
Ivan Kurnosov (mumhinduro):
Chokwadi chaicho: Yako AWS mamakisi ibasa rehuwandu hwezvinhu zvawakanganwa kudzima / kudzima.)
- Mitemo yeCluster-wide inogona kutsanangura iyo yakanyanya nguva-ye-kurarama (TTL) yePR/test deployments.
- Zviwanikwa zvega zvinogona kutsanangurwa nejanitor/ttl, semuenzaniso kubvisa otomatiki spike/prototype mushure memazuva manomwe.
Mitemo yakajairika inotsanangurwa muYAML faira. Nzira yaro inopfuudzwa neparameter --rules-file
mu kube-janitor. Heino muenzaniso mutemo wekubvisa ese mazita enzvimbo ne -pr-
muzita mushure memazuva maviri:
- id: cleanup-resources-from-pull-requests
resources:
- namespaces
jmespath: "contains(metadata.name, '-pr-')"
ttl: 2d
Uyu unotevera muenzaniso unodzora kushandiswa kwechinyorwa chekunyorera paDeployment uye StatefulSet mapodhi kune ese matsva eDeployments/StatefulSets muna 2020, asi panguva imwechete inobvumira kuitwa kwebvunzo pasina iyi label kwevhiki:
- 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
Mhanyai demo-inogumira maminetsi makumi matatu pane cluster inomhanya kube-janitor:
kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m
Imwezve sosi yekuwedzera mitengo inoramba iripo mavhoriyamu (AWS EBS). Kudzima Kubernetes StatefulSet hakubvisi mavhoriyamu ayo anoramba aripo (PVC - PersistentVolumeClaim). Mavhoriyamu eEBS asina kushandiswa anogona kukonzeresa mutengo wemazana emadhora pamwedzi. Kubernetes Janitor ine chimiro chekuchenesa maPVC asina kushandiswa. Semuenzaniso, mutemo uyu uchabvisa ese maPVC asina kuiswa nemodule uye asina kutaurwa neStatefulSet kana CronJob:
# ΡΠ΄Π°Π»ΠΈΡΡ Π²ΡΠ΅ PVC, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΈ Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΡΡΠ»Π°ΡΡΡΡ StatefulSets
- id: remove-unused-pvcs
resources:
- persistentvolumeclaims
jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
ttl: 24h
Kubernetes Janitor inogona kukubatsira kuti uchengete cluster yako yakachena uye kudzivirira mutengo wekombuta wemakore kubva pakuwedzera zvishoma nezvishoma. Nekutumirwa uye mirairo yekumisikidza, tevera
Deredza kuyera panguva isiri yekushanda maawa
Yedzo uye masisitimu masisitimu anowanzo kudiwa kuti ashande chete panguva dzebhizinesi. Mamwe maapplication ekugadzira, senge kuseri hofisi/admin maturusi, anodawo kuwanikwa kushoma uye anogona kuremara husiku.
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
Heino girafu rekuyera cluster worker node pakupera kwevhiki:
Kudzika kubva ~ 13 kusvika ku4 vashandi node zvechokwadi kunoita mutsauko unooneka mubhiri rako reAWS.
Asi zvakadini kana ndichida kushanda panguva yeboka re "downtime"? Kumwe kutumirwa kunogona kubviswa zvachose kubva pakuyera nekuwedzera iyo downscaler / kusabvisa: chokwadi chirevo. Deployments inogona kuvharirwa kwenguva pfupi uchishandisa downscaler/kusabatanidza-kusvika chirevo chine chidhindo chenguva chose mufomati YYYY-MM-DD HH:MM (UTC). Kana zvichidikanwa, sumbu rose rinogona kuderedzwa nekuisa podhi ine chirevo downscaler/force-uptime
, semuenzaniso, nekutanga nginx isina chinhu:
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
Maona
Shandisa horizontal autoscaling
Mazhinji maapplication/masevhisi anobata neane simba yekurodha pateni: dzimwe nguva mamodule avo haana chaanoita, uye dzimwe nguva anoshanda akazara. Kushandisa chigarire chikepe chepods kuti utsungirire nepamusoro peak load haisi mari. Kubernetes inotsigira yakatwasuka otomatiki kuyera pane imwe sosi
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
Zalando yakagadzira chikamu kuti ubatanidze nyore metrics etsika yekuyera:
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
Kugadzirisa yakatwasuka otomatiki neHPA inofanira kunge iri imwe yezviito zvekuvandudza mashandiro emabasa asina chirevo. Spotify ine mharidzo ine ruzivo rwavo uye kurudziro yeHPA:
Deredza zviwanikwa zvekushandisa zvakanyanya
Kubernetes mitoro yebasa inotarisisa yavo CPU / ndangariro zvinodiwa kuburikidza ne "zvikumbiro zvekushandisa." CPU zviwanikwa zvinoyerwa mu virtual cores kana zvakanyanya mu "millicores", semuenzaniso 500m inoreva 50% vCPU. Memory zviwanikwa zvinoyerwa nemabhayiti, uye zvivakwa zvakajairika zvinogona kushandiswa, senge 500Mi, zvinoreva 500 megabytes. Resource inokumbira "kiya" kugona pane yevashandi node, zvichireva kuti pod ine 1000m CPU chikumbiro pane node ine 4 vCPU inosiya matatu chete vCPU inowanikwa kune mamwe mapodhi.
Slack (yakawandisa reserve) ndiwo musiyano pakati pezviwanikwa zvakakumbirwa uye kushandiswa chaiko. Semuenzaniso, pod inokumbira 2 GiB yendangariro asi inongoshandisa 200 MiB ine ~ 1,8 GiB ye "yakawandisa" ndangariro. Kuwedzera kunoda mari. Mumwe anogona kufungidzira kuti 1 GiB yekuyeuka inodhura ~ $ 10 pamwedzi.
Kudzikisa chikumbiro cheCPU kubva pa3000m kusvika ~ 400m kunosunungura zviwanikwa kune mamwe mabasa uye kunobvumira sumbu kuti rive diki.
"Avhareji yekushandiswa kweCPU yeEC2 mamiriro anowanzo kutenderera mune imwechete-digit muzana renji,"
Asi isu tinoda chaizvo kuti vanhu vachinje hunhu mumafaira eYAML? Aiwa, michina inogona kuzviita zvirinani! Kubernetes
Ndakanyora diki
Kushandisa EC2 Spot Instances
Chekupedzisira asi chisiri chidiki, mitengo yeAWS EC2 inogona kudzikiswa nekushandisa Spot zviitiko seKubernetes mushandi node.
Maitiro ekumhanyisa Kubernetes paEC2 Spot? Pane akati wandei sarudzo: shandisa yechitatu bato sevhisi seSpotInst (yava kunzi "Spot", usandibvunza kuti sei), kana kungo wedzera Spot AutoScalingGroup (ASG) kune yako cluster. Semuenzaniso, heino CloudFormation snippet ye "capacity-optimized" Spot ASG ine akawanda mienzaniso mhando:
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"
Mamwe manotsi ekushandisa Spot neKubernetes:
- Iwe unofanirwa kubata Spot kumiswa, semuenzaniso nekubatanidza node kana muenzaniso wamiswa
- Zalando inoshandisa
fork official cluster autoscaling ine node dziva zvekutanga - Spot nodes
anogona kumanikidzwa gamuchira "kunyoresa" kwehuwandu hwebasa kuti umhanye muSpot
Summary
Ndinovimba iwe unowana zvimwe zvezvishandiso zvakaratidzwa zvinobatsira mukudzikisa yako gore bhiri. Unogona kuwana zvakawanda zvemukati zvechinyorwa zvakare pa
Ndeapi maitiro ako akanakisa ekuchengetedza mutengo wegore paKubernetes? Ndapota ndizivisei pa
Source: www.habr.com