Me pehea te penapena i nga utu kapua ina mahi tahi me Kubernetes? Karekau he otinga tika kotahi, engari e whakaahua ana tenei tuhinga i nga taputapu maha hei awhina i a koe ki te whakahaere tika i o rauemi me te whakaiti i to utu rorohiko kapua.
I tuhituhi ahau i tenei tuhinga me nga Kubernetes mo AWS i roto i te hinengaro, engari ka pa (tata) rite tonu te huarahi ki etahi atu kaiwhakarato kapua. Kei te whakaaro ahau kua whirihorahia te tauine-aunoa o to tautau (cluster-autoscaler). Ko te tango i nga rauemi me te whakaiti i to tukunga ka penapena moni koe mena ka whakaitihia e koe to roopu o nga pona kaimahi (he tauira EC2).
Ka hipokina e tenei tuhinga:
te horoi i nga rauemi kaore i whakamahia (kube-janitor)
Whakaitihia te whakatauine i nga haora kore mahi (kube-downscaler)
He pai te mahi i roto i te taiao tere. Kei te hiahia matou ki nga whakahaere hangarau whakatere. Ko te tukunga rorohiko tere ake ano hoki te maha atu o nga tuku PR, nga taiao arokite, nga tauira, me nga otinga tātari. Ka tukuna nga mea katoa ki nga Kubernetes. Ko wai te wa ki te horoi a-ringa i nga whakatakotoranga whakamatautau? He ngawari ki te wareware ki te whakakore i tetahi whakamatautau wiki. Ka piki te pire kapua na te mea i wareware matou ki te kati:
(Henning Jacobs:
Zhiza:
(kōrero) Corey Quinn:
He korero paki: Ko to putea AWS he mahi na te maha o nga kaiwhakamahi kei a koe.
Meka: Ko to tohu AWS he mahi na te maha o nga miihini kei a koe.
Ivan Kurnosov (hei whakautu):
He pono: Ko to tohu AWS he mahi mo te maha o nga mea i wareware koe ki te whakakore/whakakore.)
Kubernetes Janitor Ka awhina a (kube-janitor) ki te horoi i to tautau. He ngawari te whirihoranga o te kaihoroi mo te ao me te rohe:
Ka taea e nga ture roopu-whanui te tautuhi i te waa-ki-ora (TTL) mo nga mahi PR/whakamatautau.
Ka taea te tuhi i nga rauemi takitahi me te janitor/ttl, hei tauira ki te tango aunoa i te koikoi/prototype i muri i te 7 ra.
Kua tautuhia nga ture whanui i te konae YAML. Ka whakawhitia tona ara i roto i te tawhā --rules-file i te kube-janitor. Anei he tauira ture hei tango mokowāingoa katoa -pr- i roto i te ingoa i muri i nga ra e rua:
Ko te tauira e whai ake nei ka whakatau i te whakamahinga o te tapanga tono i runga i nga Pods Deployment and StatefulSet mo nga Whakamahinga/StatefulSets hou katoa i te tau 2020, engari i taua wa ka taea te whakahaere i nga whakamatautau me te kore tenei tapanga mo te wiki:
- 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
Whakahaerehia he demo whai-wa mo te 30 meneti i runga i te tautau e whakahaere ana i te kube-janitor:
kubectl run nginx-demo --image=nginx
kubectl annotate deploy nginx-demo janitor/ttl=30m
Ko tetahi atu puna o te piki haere o nga utu ko nga pukapuka tohe (AWS EBS). Ko te whakakore i te Kubernetes StatefulSet e kore e muku i ona pukapuka tohe (PVC - PersistentVolumeClaim). Ko nga pukapuka EBS kaore i whakamahia ka ngawari te utu mo nga rau taara ia marama. Kei a Kubernetes Janitor tetahi waahanga ki te horoi i nga PVC kaore i whakamahia. Hei tauira, ka tangohia e tenei ture nga PVC katoa kaore i whakauruhia e tetahi kōwae me te kore e tohuhia e te StatefulSet, CronJob ranei:
# удалить все PVC, которые не смонтированы и на которые не ссылаются StatefulSets
- id: remove-unused-pvcs
resources:
- persistentvolumeclaims
jmespath: "_context.pvc_is_not_mounted && _context.pvc_is_not_referenced"
ttl: 24h
Ka taea e Kubernetes Janitor te awhina i a koe ki te pupuri i to kahui kia ma me te aukati i nga utu rorohiko kapua kia kore e piki haere. Mo te whakatakotoranga me nga tohutohu whirihoranga, whai README kube-janitor.
Whakaitihia te whakatauine i nga haora kore mahi
Ko nga punaha whakamatautau me nga waahi ka hiahiatia kia mahi noa i nga haora pakihi. Ko etahi tono whakangao, penei i nga taputapu tari tuara/kaiwhakahaere, me iti noa te waatea, ka monohia pea mo te po.
Kubernetes Downscaler (kube-downscaler) ka taea e nga kaiwhakamahi me nga kaiwhakahaere te whakaiti i te punaha i nga haora kore mahi. Ka taea e nga Whakamahinga me nga StatefulSets te tauine ki nga tauira kore. Ka whakatarewahia pea a CronJobs. Kua whirihorahia a Kubernetes Downscaler mo te huinga katoa, kotahi, neke atu ranei nga mokowā ingoa, rauemi takitahi ranei. Ka taea e koe te tautuhi i te "waa mangere" ranei, i te rereke, "wa mahi". Hei tauira, ki te whakaiti i te tauine i nga po me nga wiki:
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
Anei he kauwhata mo te whakaineine i nga kohinga kaimahi kahui i nga wiki:
Ko te whakaheke mai i te ~13 ki te 4 nga pona kaimahi ka tino kitea he rereketanga o to pire AWS.
Engari me aha ahau ki te mahi i roto i te roopu "waahi"? Ko etahi tukunga ka taea te whakakore i nga wa katoa mai i te tauine ma te taapiri i te whakaheke / whakakore: te tuhipoka pono. Ka taea te whakakore i nga tukunga mo te wa poto ma te whakamahi i te whakaraerae/whakakore-tae noa ki te tuhipoka me te tohu waahi i te whakatakotoranga YYYY-MM-DD HH:MM (UTC). Mena e tika ana, ka taea te whakaheke i te kohinga katoa ma te tuku i tetahi putunga me te tuhipoka downscaler/force-uptime, hei tauira, ma te whakarewa i te 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
Tirohia README kube-downscaler, mena kei te pirangi koe ki nga tohutohu tuku me etahi atu whiringa.
Whakamahia te tauine-aunoa whakapae
He maha nga tono/ratonga e pa ana ki te tauira uta hihiko: i etahi wa ka mangere o ratou kowae, i etahi wa ka mahi i runga i te kaha. Ko te whakahaere i te waaawa putunga putunga ki te whakatutuki i nga taumahatanga teitei kaore he ohanga. Ka tautoko a Kubernetes i te whakatauine-aunoa whakapae puta noa i tetahi rauemi HorizontalPodAutoscaler (HPA). Ko te whakamahinga CPU he tohu pai mo te tauine:
Kua hangaia e Zalando tetahi waahanga hei hono ngawari i nga inenga ritenga mo te tauine: Whāurutau Ine Kube Ko te (kube-metrics-adapter) he urutau inenga whanui mo nga Kubernetes ka taea te kohikohi me te mahi inenga ritenga me waho hoki mo te whakatauira aunoa o nga pene. Ka tautokohia te tauine i runga i nga inenga Prometheus, nga rarangi SQS, me etahi atu tautuhinga. Hei tauira, ki te tauine i to tukunga ki tetahi inenga ritenga e tohuhia ana e te tono ano ko JSON i roto i te whakamahi ine / ine:
Ko te whirihora i te whakatauira aunoa me te HPA tetahi o nga mahi taunoa hei whakapai ake i te pai mo nga ratonga kore whenua. He whakaaturanga a Spotify me o raatau wheako me o raatau taunakitanga mo HPA: tauine i o tohatoha, kaua to putea.
Whakaitihia te pukapuka nui rawa atu
Ko nga kawenga mahi a Kubernetes e whakatau ana i o raatau hiahia CPU/mahara ma roto i nga "tono rauemi." Ka inehia nga rauemi PTM ki roto mariko mariko, nui ake ranei i roto i te "millicores", hei tauira 500m te tikanga 50% vCPU. Ka inehia nga rauemi mahara ki nga paita, ka taea te whakamahi i nga kumara noa, penei i te 500Mi, ko te tikanga 500 megabytes. Ko te tono rauemi "rakau" te kaha ki runga i nga pona kaimahi, ko te tikanga ko te pod me te tono PTM 1000m i runga i te pona me nga vCPU e 4 ka waiho kia 3 noa nga vCPU e waatea ana ki etahi atu putunga. [1]
Heke (he nui te rahui) Ko te rereketanga i waenga i nga rauemi i tonohia me te whakamahi pono. Hei tauira, ko te peera e tono ana kia 2 GiB o te mahara engari e whakamahi ana i te 200 MiB he ~1,8 GiB o te mahara "tawhero". Ka pau te moni i te taikaha. Ka taea e tetahi te whakatau tata ko te 1 GiB o te utu mahara nui ~ $10 ia marama. [2]
Pūrongo Rauemi Kubernetes (kube-resource-report) e whakaatu ana i te taikaha o nga rahui ka taea te awhina i a koe ki te whakatau i te kaha penapena:
Pūrongo Rauemi Kubernetes e whakaatu ana i te taikaha kua whakahiatohia e te tono me te whakahau. Ma tenei ka taea e koe te rapu waahi ka taea te whakaheke i nga tono rauemi. Ko te purongo HTML i hangaia he whakaahua noa mo te whakamahinga rauemi. Me titiro koe ki te whakamahi PTM/maumahara i roto i te waa ki te whakatau i nga tono rauemi tika. Anei he tūtohi Grafana mo te ratonga "PTM-taimaha": he iti ake te whakamahi a nga poti katoa i te 3 matua CPU i tonoa:
Ko te whakaheke i te tono PTM mai i te 3000m ki ~400m ka whakawātea i nga rauemi mo etahi atu mahi, ka iti ake te kohinga.
"Ko te whakamahi PTM toharite o nga tauira EC2 he maha nga wa e paopao ana ki te awhe ōrau mati-kotahi," te tuhi a Corey Quinn. Ahakoa mo EC2 he whakatau kino pea te whakatau tata i te rahi tikaHe ngawari te whakarereke i etahi patai rauemi Kubernetes i roto i te konae YAML, ka taea te penapena moni nui.
Engari kei te tino hiahia taatau ki te whakarereke i nga uara o nga tangata ki nga konae YAML? Kao, ka pai ake te mahi a nga miihini! Kubernetes Poutū Poutū Aunoa (VPA) e tika ana: ka urutau ki nga tono rauemi me nga here kia rite ki te taumahatanga mahi. Anei he tauira kauwhata o nga tono Prometheus CPU (raina kikorangi kikorangi) i urutauhia e VPA i roto i te waa:
Goldilocks mai i te Fairwind he taputapu ka hangaia he VPA mo ia tukunga ki roto i te mokowāingoa ka whakaatu i te taunakitanga VPA ki tana papatohu. Ka taea e ia te awhina i nga kaiwhakawhanake ki te whakarite i nga tono PTM/maumahara tika mo a raatau tono:
Ko te mea whakamutunga, engari ko te iti rawa, ka taea te whakaheke i nga utu AWS EC2 ma te whakamahi i nga tauira Spot hei pona kaimahi Kubernetes [3]. E waatea ana nga waahi waahi ki te 90% hekenga ka whakaritea ki nga utu i runga i te tono. Ko te whakahaere i nga Kubernetes i runga i te EC2 Spot he pai te whakakotahitanga: me tohu e koe etahi momo tauira rereke mo te waatea teitei ake, ko te tikanga ka taea e koe te tiki i tetahi node nui ake mo te utu kotahi, iti iho ranei, ka taea te whakamahi i te kaha nui ake e nga kawenga mahi a Kubernetes.
Me pehea te whakahaere i nga Kubernetes i runga i te EC2 Spot? He maha nga whiringa: whakamahia he ratonga tuatoru penei i a SpotInst (e kiia nei ko "Spot", kaua e patai mai he aha), me taapiri noa he Spot AutoScalingGroup (ASG) ki to tautau. Hei tauira, koinei te waahanga CloudFormation mo te ASG "whakapaipai-pai" me nga momo tauira maha:
He aha o tikanga pai mo te penapena utu kapua i runga i nga Kubernetes? Tena koa korero mai ki ahau i Twitter (@try_except_).
[1] Inaa, iti iho i te 3 vCPU ka noho tonu i te mea ka whakahekehia te urunga o te node e nga rauemi punaha kua rahuitia. Ka wehewehe a Kubernetes i waenga i te kaha node tinana me nga rauemi "kua whakaratohia" (Node Tohaina).
[2] Tauira tātaitanga: kotahi m5.he tauira nui ki te 8 GiB o te mahara ko ~$84 ia marama (eu-central-1, On-Demand), i.e. te aukati 1/8 node he tata ki te ~$10/marama.
[3] He maha atu ano nga huarahi hei whakaiti i to pire EC2, penei i te Rahui Tauira, Mahere Tiaki, aha atu - Kare au e korero i aua kaupapa i konei, engari me ata titiro koe!