Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Ny fandikana ny lahatsoratra dia nomanina tamin'ny fiandohan'ny fianarana "Sehatra fotodrafitrasa mifototra amin'ny Kubernetes".

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Ahoana ny fomba hitsitsiana ny vidin'ny rahona rehefa miasa amin'ny Kubernetes? Tsy misy vahaolana tokana tokana, fa ity lahatsoratra ity dia mamaritra fitaovana maromaro izay afaka manampy anao hitantana ny loharanonao amin'ny fomba mahomby kokoa sy hampihenana ny vidin'ny informatika rahona.

Nanoratra ity lahatsoratra ity aho niaraka tamin'i Kubernetes ho an'ny AWS ao an-tsaina, fa hampihatra (saika) mitovy amin'ny fomba mitovy amin'ny mpamatsy rahona hafa. Heveriko fa ny cluster (ireo) anao dia efa manana autoscaling voarindra (cluster-autoscaler). Ny fanesorana ny loharanon-karena sy ny fampihenana ny fandefasanao dia hamonjy vola anao raha toa ka mampihena ny andian-tafika mpiasanao (entin'ny EC2).

Ity lahatsoratra ity dia handrakotra:

  • manadio loharano tsy ampiasaina (kube-janitor)
  • Ampihenana ny scaling mandritra ny ora fiasana (kube-downscaler)
  • mampiasa horizontal autoscaling (HPA),
  • fampihenana ny famandrihana harena be loatra (kube-resource-report, VPA)
  • mampiasa ohatra Spot

Fanadiovana ireo loharano tsy ampiasaina

Tena tsara ny miasa amin'ny tontolo haingana. Mila fikambanana teknolojia izahay haingana. Ny fandefasana rindrankajy haingana kokoa dia midika ihany koa ny fametrahana PR bebe kokoa, ny tontolo iainana, ny prototype ary ny vahaolana analyse. Apetraka ao amin'ny Kubernetes ny zava-drehetra. Iza no manam-potoana hanadiovana amin'ny tanana ny fametrahana fitsapana? Mora ny manadino ny famafana andrana iray herinandro. Hiakatra ny volavolan-dalΓ na momba ny rahona noho ny zavatra adinonay nakatona:

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

(Henning Jacobs:
Zhiza:
Corey Quinn:
Hevi-diso: Ny kaontinao AWS dia asan'ny isan'ny mpampiasa anananao.
Zava-misy: Ny isa AWS anao dia asan'ny isan'ny injeniera anananao.

Ivan Kurnosov (ho valin'izany):
Ny tena zava-misy: Ny isa AWS anao dia asan'ny isan'ny zavatra adinonao ny nesorina/fafao.)

Kubernetes Janitor (kube-janitor) dia manampy amin'ny fanadiovana ny cluster. Ny fanamafisana ny janitor dia azo ampiasaina ho an'ny tontolo sy eo an-toerana:

  • Ny fitsipiky ny kluster dia afaka mamaritra ny fotoana farany indrindra (TTL) ho an'ny fametrahana PR/andrana.
  • Ny loharanon'ny tsirairay dia azo asiana fanamarihana miaraka amin'ny janitor/ttl, ohatra mba hanesorana ho azy ny spike/prototype rehefa afaka 7 andro.

Ny fitsipika ankapobeny dia voafaritra ao amin'ny rakitra YAML. Mandalo amin'ny paramètre ny lalany --rules-file in kube-janitor. Ity misy fitsipika ohatra iray hanesorana ny espace anarana rehetra -pr- amin'ny anarana rehefa afaka roa andro:

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

Ity ohatra manaraka ity dia manara-maso ny fampiasana ny mari-pamantarana fampiharana amin'ny pod Deployment sy StatefulSet ho an'ny Deployments/StatefulSets vaovao rehetra amin'ny 2020, fa miaraka amin'izay koa dia mamela ny fanatanterahana fitsapana tsy misy an'io marika io mandritra ny herinandro:

- 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

Manaova fihetsiketsehana voafetra mandritra ny 30 minitra amin'ny kluster mandeha kube-janitor:

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

Loharanom-baovao iray hafa amin'ny fitomboan'ny fandaniana dia ny tahan'ny maharitra (AWS EBS). Ny famafana ny Kubernetes StatefulSet dia tsy mamafa ny boky maharitra (PVC - PersistentVolumeClaim). Ny volan'ny EBS tsy ampiasaina dia mety miteraka vola an-jatony dolara isam-bolana. Kubernetes Janitor dia manana endri-javatra manadio PVC tsy ampiasaina. Ohatra, ity fitsipika ity dia hanaisotra ny PVC rehetra izay tsy apetraka amin'ny mΓ΄dely ary tsy resahin'ny StatefulSet na CronJob:

# ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ всС PVC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ смонтированы ΠΈ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ StatefulSets
- id: remove-unused-pvcs
  resources:
  - persistentvolumeclaims
  jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
  ttl: 24h

Ny Kubernetes Janitor dia afaka manampy anao hihazona ny cluster ho madio ary hisoroka ny vidin'ny informatika rahona tsy hiakatra tsikelikely. Ho an'ny torolalana momba ny fametrahana sy ny fanamafisana, araho README kube-janitor.

Ampihenana ny scaling mandritra ny ora fiasana

Amin'ny ora fiasana ihany no ilaina amin'ny fiasana matetika ny rafitra fitsapana sy fanaovana fandaharana. Ny rindranasa famokarana sasany, toy ny fitaovana back office/admin, dia tsy mitaky afa-tsy fahafahana voafetra ihany koa ary mety ho kilemaina mandritra ny alina.

Kubernetes Downscaler (kube-downscaler) dia ahafahan'ny mpampiasa sy ny mpandraharaha manamaivana ny rafitra mandritra ny ora tsy fiasana. Ny Deployments sy StatefulSets dia afaka mirefy aotra replika. Mety haato ny CronJobs. Kubernetes Downscaler dia namboarina ho an'ny kluster iray manontolo, sehatra anarana iray na maromaro, na loharano tsirairay. Azonao atao ny mametraka "fotoana idle" na, mifanohitra amin'izany, "fotoana fiasana". Ohatra, mba hampihenana ny scaling araka izay azo atao mandritra ny alina sy ny faran'ny herinandro:

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

Ity misy grafofaonina amin'ny fampitomboana ny node mpiasa cluster amin'ny faran'ny herinandro:

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Ny fampidinana avy amin'ny ~ 13 ka hatramin'ny 4 node mpiasa dia azo antoka fa mitondra fiovana miharihary amin'ny volavolanao AWS.

Ahoana anefa raha mila miasa mandritra ny cluster "downtime" aho? Ny fametrahana sasany dia azo esorina tanteraka amin'ny fanamafisam-peo amin'ny alalan'ny fampidirana ny downscaler/exclude: tena fanamarihana. Ny fametrahana dia azo esorina vetivety amin'ny fampiasana ny fanamafisam-peo ambany/exclude-mandram-pahazoana mari-pamantarana ara-potoana tanteraka amin'ny endrika YYYY-MM-DD HH:MM (UTC). Raha ilaina, dia azo averina ny cluster manontolo amin'ny alΓ lan'ny fametrahana pod miaraka amin'ny fanamarihana downscaler/force-uptime, ohatra, amin'ny fandefasana ny nginx blank:

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

jereo README kube-downscaler, raha liana amin'ny torolΓ lana fametrahana sy safidy fanampiny ianao.

MampiasΓ  autoscaling horizontal

Fampiharana/serivisy maro no mifandray amin'ny lamina mavesatra entana: indraindray tsy miasa ny maody, ary indraindray miasa amin'ny fahafaha-manao feno. Ny fampandehanana andian-tsambo maharitra mba hiatrehana ny enta-mavesatra ambony indrindra dia tsy ara-toekarena. Kubernetes dia manohana ny fanamafisam-peo mitsivalana manerana ny loharano iray HorizontalPodAutoscaler (HPA). Ny fampiasana CPU dia matetika famantarana tsara ho an'ny scaling:

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 dia namorona singa iray hampifandraisana mora amin'ny metrika manokana ho an'ny fanisana: Kube Metrics Adapter (kube-metrics-adapter) dia adaptatera metrika gΓ©nΓ©rique ho an'ny Kubernetes izay afaka manangona sy manolotra metrika mahazatra sy ivelany ho an'ny fanokafana marindrano ny pods. Izy io dia manohana ny fanamafisam-peo mifototra amin'ny metrika Prometheus, filaharana SQS ary toe-javatra hafa. Ohatra, mba hametahana ny fametrahanao amin'ny metrika mahazatra asehon'ny fampiharana azy amin'ny fampiasana JSON amin'ny /metrics:

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

Ny fanamafisana ny fanamafisam-peo marindrano miaraka amin'ny HPA dia tokony ho iray amin'ireo hetsika mahazatra hanatsarana ny fahombiazan'ny serivisy tsy misy fanjakana. Spotify dia manana famelabelarana miaraka amin'ny traikefany sy ny soso-kevitr'izy ireo momba ny HPA: ampitomboy ny fametrahanao fa tsy ny kitaponao.

Ahena ny famandrihana be loatra amin'ny loharanon-karena

Ny enta-mavesatry ny Kubernetes dia mamaritra ny filan'izy ireo CPU/fahatsiarovana amin'ny alΓ lan'ny "fangatahana loharano." Ny loharanon-karena CPU dia refesina amin'ny core virtoaly na matetika kokoa amin'ny "millicore", ohatra 500m dia midika hoe 50% vCPU. Refesina amin'ny bytes ny loharanom-pahatsiarovana, ary azo ampiasaina ny tovana mahazatra, toy ny 500Mi, izay midika hoe 500 megabytes. Ny fangatahan'ny loharanon-karena dia ny fahafahan'ny "hidy" amin'ny node mpiasa, izany hoe ny pod misy fangatahana CPU 1000m amin'ny node misy vCPU 4 dia tsy hamela afa-tsy vCPU 3 ho an'ny pod hafa. [1]

Slack (fahirizana tafahoatra) dia ny fahasamihafan'ny loharano nangatahana sy ny fampiasana tena izy. Ohatra, ny pod iray izay mangataka fitadidiana 2 GiB nefa mampiasa 200 MiB fotsiny dia manana ~1,8 GiB fahatsiarovana "mihoatra". Mandany vola ny tafahoatra. Ny iray dia afaka manombatombana fa ny 1 GiB amin'ny fitadidiana tafahoatra dia mitentina ~ $10 isam-bolana. [2]

Kubernetes Resource Report (kube-resource-report) dia mampiseho tahiry be loatra ary afaka manampy anao hamaritra ny mety ho tahiry:

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Kubernetes Resource Report mampiseho ny tafahoatra natambatra amin'ny fampiharana sy ny baiko. Izany dia ahafahanao mahita toerana mety hampihenana ny fitakiana loharanon-karena. Ny tatitra HTML novokarina dia manome sarin'ny fampiasana loharano fotsiny. Tokony hijery ny fampiasana CPU/fahatsiarovana ianao rehefa mandeha ny fotoana mba hamaritana ny fangatahana loharanon-karena. Ity misy tabilao Grafana ho an'ny serivisy mavesatra CPU "mahazatra": ny pods rehetra dia mampiasa ambany kokoa noho ireo cores CPU 3 nangatahana:

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Ny fampihenana ny fangatahana CPU avy amin'ny 3000m mankany ~ 400m dia manafaka loharano ho an'ny enta-mavesatra hafa ary mamela ny cluster ho kely kokoa.

"Ny fampiasana CPU antonony amin'ny tranga EC2 dia matetika mihodinkodina amin'ny isan-jato isan-jato," hoy i Corey Quinn. Raha ny EC2 mety ho fanapahan-kevitra ratsy ny manombana ny habenyMora ny manova fanontaniana momba ny loharanon-karena Kubernetes amin'ny rakitra YAML ary afaka mitahiry vola be.

Saingy tena tiantsika ve ny hanova ny soatoavin'ny olona amin'ny rakitra YAML? Tsia, mahavita tsara kokoa ny milina! Kubernetes Vertical Pod Autoscaler (VPA) dia manao izany: mampifanaraka ny fangatahana loharanon-karena sy ny teritery mifanaraka amin'ny vesatry ny asa. Ity misy tabilao ohatra momba ny fangatahana Prometheus CPU (tsipika manga manify) namboarin'ny VPA rehefa mandeha ny fotoana:

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Zalando dia mampiasa VPA amin'ny salony rehetra ho an'ny singa fotodrafitrasa. Ny fampiharana tsy mitsikera dia afaka mampiasa VPA ihany koa.

Goldilocks avy amin'ny Fairwind dia fitaovana iray mamorona VPA ho an'ny fametrahana tsirairay ao amin'ny namespace ary avy eo dia mampiseho tolo-kevitra VPA eo amin'ny solaitrabeny. Afaka manampy ny mpamorona hametraka ny fangatahana CPU/fahatsiarovana marina ho an'ny fampiharana azy ireo:

Tehirizo amin'ny vidin'ny rahona Kubernetes amin'ny AWS

Nanoratra kely aho lahatsoratra bilaogy momba ny VPA tamin'ny 2019, ary vao haingana Ny CNCF End User Community dia niresaka momba ny VPA.

Mampiasa EC2 Spot Instances

Farany fa tsy ny kely indrindra, ny vidin'ny AWS EC2 dia azo ahena amin'ny alΓ lan'ny fampiasana ny tranga Spot amin'ny maha-nodes mpiasa Kubernetes. [3]. Misy fihenam-bidy hatramin'ny 90% raha oharina amin'ny vidin'ny On-Demand. Ny fampandehanana ny Kubernetes amin'ny EC2 Spot dia fampifangaroana tsara: mila mamaritra karazana ohatra maromaro ianao raha te-hahazo avo kokoa, midika izany fa afaka mahazo node lehibe kokoa ianao amin'ny vidiny mitovy na ambany, ary ny fahafaha-mitombo dia azo ampiasaina amin'ny enta-mavesatry ny Kubernetes.

Ahoana ny fampandehanana Kubernetes amin'ny EC2 Spot? Misy safidy maromaro: mampiasa serivisy antoko fahatelo toa an'i SpotInst (antsoina hoe "Spot" ankehitriny, aza manontany ahy hoe nahoana), na ampio fotsiny Spot AutoScalingGroup (ASG) ao amin'ny cluster-nao. Ohatra, ity misy sombintsombiny CloudFormation ho an'ny Spot ASG "mampitombo ny fahafaha-manao" misy karazana ohatra maro:

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"

Fanamarihana sasany momba ny fampiasana Spot miaraka amin'ny Kubernetes:

  • Mila mitantana ny famaranana Spot ianao, ohatra amin'ny fampifangaroana ny node rehefa mijanona ny ohatra
  • Zalando mampiasa fork autoscaling cluster ofisialy miaraka amin'ny laharam-pahamehana node pool
  • Spot nodes azo terena manaiky "fisoratana anarana" amin'ny enta-mavesatry ny asa atao ao amin'ny Spot

famintinana

Manantena aho fa hahita ny sasany amin'ireo fitaovana atolotra mahasoa amin'ny fampihenana ny volavolan-drahonao ianao. Azonao atao ny mahita ny ankamaroan'ny votoatin'ny lahatsoratra ao amin'ny ny lahateniko tao amin'ny DevOps Gathering 2019 ao amin'ny YouTube sy amin'ny slides.

Inona ny fomba fanao tsara indrindra ataonao amin'ny fitsitsiana ny vidin'ny rahona amin'ny Kubernetes? Mba ampahafantaro ahy amin'ny Twitter (@try_except_).

[1] Raha ny marina, latsaky ny 3 vCPUs no hijanona ho azo ampiasaina satria mihena ny fahafahan'ny node amin'ny alΓ lan'ny loharanon'ny rafitra voatokana. Kubernetes dia manavaka ny fahafahan'ny node ara-batana sy ny loharanon-karena "nomena" (Node Allocatable).

[2] Ohatra kajy: ohatra iray m5.lehibe misy fitadidiana 8 GiB dia ~$84 ​​​​isam-bolana (eu-central-1, On-Demand), i.e. ny fanakanana 1/8 node dia eo amin'ny ~ $10/volana.

[3] Misy fomba maro hafa hampihenana ny faktiora EC2-nao, toy ny Instance voatokana, Drafitry ny tahiry, sns. - Tsy horesahiko eto ireo lohahevitra ireo, fa tokony hojerenao tokoa!

Mianara bebe kokoa momba ny fianarana.

Source: www.habr.com

Add a comment