Servo in Kubernetes nube constat in AWS

Versio articuli praeparata est pervigilio initii "Substructio infrastructure in Kubernetes".

Servo in Kubernetes nube constat in AWS

Quam servare in nube gratuita operando cum Kubernetibus? Nulla una recta solutio est, sed hic articulus plura instrumenta describit quae iuvare possunt tuas facultates efficacius administrare et nubes computandi gratuita minuere.

Articulum hunc cum Kubernetes pro AWS in animo scripsi, sed eodem modo ad alias nubes aliquas (paene) prorsus applicabit. Im 'botrus posito (s) figuram iam autoscaling (botri-autoscaler). Opes removentes et instruere scalis tuis pecuniam tantum tibi servabunt si etiam classem nodis laborantis redigit (exstantiarum EC2).

Hoc articulum teget;

Purgato opes insueta

Mauris sit amet lorem magna. Volumus tech institutionum accelerato. Velocius traditio programmata etiam plura PR instruere, praevius ambitus, prototypa, solutiones analyticas significat. Omnia in Kubernetes explicant. Quis tempus habet manually emundandi experimentum instruendi? Facile est experimentum octo annorum delendo oblivisci. Nubes rogationis erit terminus sursum ob aliquid, quod nos claudere oblitus est;

Servo in Kubernetes nube constat in AWS

(Henning Jacobs;
Zhiza:
Corey Quinn:
FABULA: Tua AWS ratio est functio numerorum utentium tibi.
Re: Octoginta AWS tua functio est numeri fabrum quos habes.

Ivan Kurnosov (in responsione);
Verum hoc: Tuum AWS score munus est numerus rerum oblitus inactivandi / delere.)

Kubernetes Janitor (kube-janitor) botrum tuum mundare adiuvat. Configuratio ianitoris flexibilis est ad usum globalem et localem;

  • Regulae botrus latae maximum tempus vivere (TTL) pro PR/test instruere possunt.
  • Singulae facultates cum janitor/ttl notari possunt, exempli gratia ad clavum/prototypum post dies VII automatice removendum.

Regulae generales in tabula YAML definiuntur. Semita eius per parametri --rules-file in kube-janitor. Exemplar hic est regulae omnia nomina spatii removendi cum -pr- in nomine post biduum;

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

Hoc exemplum regulat usum pittacii applicationis in instruere et StatefulSet siliquas pro omnibus novis instruere/StatefulSets in 2020, sed simul permittit exsecutionem testium sine hoc pittacio per hebdomadam:

- 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

Currere tempus-limitatum demo pro XXX minutis in botro currens kube-janitor;

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

Alius fons augendi gratuita continua volumina est (AWS EBS). StatefulSet Kubernetes delendo non pertinacia volumina delet (PVC - PersistentVolumeClaim). Insueta EBS volumina facile efficiunt in sumptibus centenariorum dollariorum per mensem. Ianitor Kubernetes plumam habet ad insuetam PVCs emundandam. Exempli gratia, haec regula tollet omnia PVCs quae modulo non ascenduntur et quae per StatefulSet vel CronJob non referuntur:

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

Ianitor Kubernetes adiuvare potest ut botrum tuum mundum custodias et ne nubes computandi sumptus ab lente struere possit. Pro instruere et configuratione instructiones, sequere README kube-janitor.

Redigendum scalis in non-operantes horas

Systema testium et choragiorum typice requiruntur ad operandum solum in horis negotiis. Aliquae applicationes productionis, ut instrumenta posteriora/admin instrumenta, solum paratas facultates exigunt et pernoctare possunt.

Kubernetes Downscaler (kube-downscaler) permittit utentes et operatores ut systema in horis non laborantibus conscendant. Instructiones et StatefulSets ad nullas replicas scandere possunt. CronJobs suspendi potest. Kubernetes Downscaler pro botro integro, uno vel pluribus spatiis nominalibus, vel singularibus facultatibus configuratur. Potes ponere vel Β« tempus otiosum Β» vel e contrario Β« tempus laboris Β». Exempli gratia: scalas reducere quam maxime per noctes et hebdomadas:

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

Aliquam lacinia purus hic ad scalas botrus operarius nodis in weekends:

Servo in Kubernetes nube constat in AWS

Ascendentes descendentes a ~13 ad 4 nodos operariorum notabilem differentiam faciunt in libello tuo AWS.

Sed quid si opus est in botro "downtime" laborare? Instrumenta quaedam perpetuo arceri possunt ne scalas addendo descensori/excludas: veram annotationem. Instructiones ad tempus excludi possunt utentes downscaler/excludere-donec annotationem cum indicatione temporis absoluta in forma YYYY-MM-DD HH:MM (UTC). Si opus est, botrus integer rursus per folliculum explicando cum annotatione poterit downscaler/force-uptimeverbi gratia, deductis 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

Vide README kube-downscalersi interest instruere instructiones et optiones adiectis.

Utere horizontali autoscaling

Multae applicationes/officia dynamicae loading exemplaris tractant: moduli eorum interdum otiosi sunt, interdum ad plenam capacitatem operantur. Classem siliquam operantem permanentem obire maximum apicem oneris non frugi est. Kubernetes horizontalem auto- scalis trans subsidia sustinet HorizontalPodAutoscaler (HPA). CPU usus est saepe signum bonum ad scalas;

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 componentem creavit ut faciliorem consuetudinem metricae ad scalas coniungeret: Kube Metrics Adapter (kube-metrics-adaptor) genus metricae adaptans Kubernetes, qui consuetudini et metris externis ad horizontem siliquarum autoscalingum colligere et inservire potest. Sustinet scalas ex Prometheo metrice, SQS queues, et alios occasus. Exempli gratia, ad conscendendum instruere consuetudinem metricam ab ipsa applicatione ut JSON in usu metrica repraesentatam;

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

Configurans horizontalem autoscalationem cum HPA unus ex actionibus defaltis ad meliorem efficiendi officia pro state sine opera esse debet. Spotify praesentationem habet cum experientia et commendatione pro HPA: scandere opera tua, non pera.

Redigendum resource overbooking

In laboribus Kubernetes suas CPU/memoriam definiunt necessarias per "resources petitiones." Facultates CPU mensurantur in nucleis virtualibus vel communius in "millicores", exempli gratia 500m involvit 50 vCPU. Facultates memoriae in bytes mensurantur et suffixis communibus adhiberi possunt, ut 500Mi, quod est 500 megabytarum. Resource petitiones "clausae" facultatem in nodi laborantis, quod petierunt 1000m CPU vasculum in nodo cum 4 vCPUs, solum 3 vCPUs aliis leguminis praesto relinquet. [1]

Remissa (excessus subsidiis) differentia est inter opes rogatas et usum. Exempli gratia, vasculum quod petit 2 GiB memoriae, sed tantum utitur 200 MiB ~1,8 GiB memoriae "excessus". Excessus pecuniae constat. Dure aestimari potest quod 1 GiB memoriae redundantis constat ~$10 per mensem. [2]

Kubernetes Resource Report (kube-resource-fama) excessus subsidia prae se fert et auxilium te potest determinare peculi potentia:

Servo in Kubernetes nube constat in AWS

Kubernetes Resource Report ostendit excessum aggregatum per applicationem et mandatum. Hoc te permittit invenire loca ubi subsidia exigentia reduci possunt. Generatum HTML relationem tantum praebet snapshot usus resource usus. Inspicere debes CPU/memoriam consuetudinem supra tempus determinare postulationes sufficiens subsidiorum. Hic est Grafana chartula pro servitio "typico" CPU-gravis: siliquae omnes minus significanter quam 3 nuclei CPU rogatae sunt:

Servo in Kubernetes nube constat in AWS

Reducendo CPU petitionem ab 3000m ad 400m~ liberat facultates pro aliis laboribus et botrum minorem esse permittit.

"Mediocris CPU usus instantiarum EC2 saepe versatur in unius digiti percentage range" scribit Corey Quinn. Dum EC2 * magnitudinem aestimare male sit iudiciumKubernetes nonnullae ope- riae quaesitae in YAML fasciculi mutantur, facile et ingentia compendia afferre possunt.

Sed vere volumusne homines mutatos valores in YAML imagini esse? Non, machinae multo melius! Kubernetes Vertical Pod Autoscaler (VPA) hoc modo facit: subsidia petitiones et angustiae aptat secundum quod inposuit. Exemplar hic est graphi Promethei CPU petitionum (linea tenuis caerulea) ab VPA super tempus accommodata:

Servo in Kubernetes nube constat in AWS

Zalando utitur VPA in omnibus suis clusters for infrastructurae compositae. Applicationes non criticae uti etiam VPA possunt.

Goldilocks ex Fairwind instrumentum est quod VPA creat ad singulas instruere in spatio nominali ac deinde commendationem VPA ostendit in ashboardday. Potest auxilium tincidunt pone rectae CPU/memoriae petitiones ad earum applicationes:

Servo in Kubernetes nube constat in AWS

Scripsi parva blogpost de VPA in MMXIX et nuper in CNCF Finis User Community disputata VPA exitus.

Using EC2 Macula Instantiae

Postrema, sed non minima, AWS EC2 costs reduci possunt utendo loco instantiarum sicut nodi Kubernetes operarii [3]. Macula instantiae praesto sunt ad discount usque ad 90% comparata cum pretiis In-Demand. Currens Kubernetes in EC2 Macula bona coniunctio est: pluribus diversis exempli generibus ad promptitudinem altioris specificare debes, maiorem nodi pro eodem vel minore pretio acquirere potes, et capacitas aucta a continentibus in laboribus Kubernetes adhiberi potest.

Quomodo currere Kubernetes in EC2 Spot? Plures optiones sunt: ​​tertia pars servitutis utere sicut SpotInst (nunc "Macula" dicitur, noli a me quaerere quare), vel Macula AutoScalingGroup (ASG) ad botrum tuum adde. Exempli gratia, hic PRAECISIO CloudFormation pro "capacitate-optimized" Macula ASG cum multis instantia speciebus:

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"

Notae quaedam de Macula utendi cum Kubernetibus:

  • Opus est terminationes Macula tractare, verbi gratia bus nodi cum instantia sistitur
  • Zalando usus furca officialis botrum portassent autoscaling cum nodi stagnum prioritatibus
  • Nodi macula cogi potest accipere "adnotatione" of laboribus currere in Macula

summary

Spero te nonnulla instrumenta quae utiles sunt in reducendo libellum tuum nubem inventurum. Maxime potes invenire contenta articuli etiam ad meus sermo in DevOps colligens MMXIX in YouTube et in labitur.

Quae sunt optimae exercitationes ad nubem salvificam in Kubernetes impensae? Quaeso sciam at Twitter (@try_except_).

[1] Re vera, minus quam 3 vCPUs utilis remanebit sicut perputium nodi redactum est per facultates systematis reservatas. Kubernetes distinguit inter facultates nodi physicas et "provisas" facultates (Node Allocatable).

[2] Calculus exempli gratia: una m5.large exempli gratia cum 8 GiB memoriae est ~$84 ​​per mensem (eu-central-1, On-Demand), i.e. nodi interclusio 1/8 circiter ~$10/mense est.

[3] Plures modi sunt ad libellum tuum EC2 reducendum, ut Instantiae Reservationes, Savings Plan, etc. - Argumenta illa hic non obtegam, sed certo inspicias!

Plura de cursus.

Source: www.habr.com