10 Mea masani masani pe a faʻaaogaina Kubernetes

Manatua. fa'aliliu.: O tusitala o lenei tusiga o inisinia mai se kamupani Czech laitiiti, pipetail. Na mafai ona latou tuʻufaʻatasia se lisi matagofie o [o nisi taimi e le masani ai, ae o loʻo i ai pea] faʻafitauli faigata ma manatu sese e fesoʻotaʻi ma le faʻaogaina o fuifui Kubernetes.

10 Mea masani masani pe a faʻaaogaina Kubernetes

I le aluga o tausaga o le faʻaaogaina o Kubernetes, sa matou galulue faʻatasi ma se numera tele o fuifui (pulea ma le le pulea - i luga ole GCP, AWS ma Azure). I le aluga o taimi, na amata ona matou matauina o nisi o mea sese na fai soo. Ae ui i lea, e leai se maasiasi i lenei mea: ua matou faia le tele o latou lava!

O le tusiga o loʻo i ai mea sese masani ma o loʻo taʻua ai foʻi le auala e faʻasaʻo ai.

1. Punaoa: talosaga ma tapulaa

O lenei mea e mautinoa lava e tatau ona vaʻaia vavalalata ma tulaga muamua ile lisi.

ole CPU ole talosaga masani a le o fa'ama'oti mai uma po'o se tau maualalo tele (ia tuu le tele o pods i node taitasi pe a mafai). O le mea lea, ua ova le mamafa o nodes. I taimi o le maualuga o le uta, e faʻaaogaina atoatoa le malosi o le faʻaogaina o le pona ma o se galuega faʻapitoa e mauaina naʻo le mea e "manaʻomia" e. Fa'amalo ole PPU. O lenei mea e mafua ai le faʻateleina o le faʻaogaina o le faʻaogaina, taimi faʻagata, ma isi faʻafitauli le lelei. (Faitau atili e uiga i lenei mea i la matou isi faaliliuga lata mai: “tapula'a o le PPU ma le fa'aoso fa'amalosi i Kubernetes" - tusa. fa'aliliu.)

Taumafaiga Sili (matua fautuaina):

resources: {}

Ole talosaga ole CPU e matua maualalo (matua fautuaina):

   resources:
      Requests:
        cpu: "1m"

I le isi itu, o le i ai o se tapulaʻa CPU e mafai ona taʻitaʻia ai le faaseʻeina le talafeagai o taamilosaga o le uati e pods, e tusa lava pe le atoatoa le utaina o le node processor. Toe fo'i, e mafai ona o'o atu ai i le fa'atupula'ia o le tuai. O lo'o fa'aauau pea fete'ena'iga ile fa'ata'otoga CPU CFS quota i le Linux kernel ma le CPU throttling e faʻatatau i tapulaʻa faʻatulagaina, faʻapea foʻi ma le faʻagataina o le CFS quota ... Talofa, faʻatapulaʻaina CPU e mafai ona mafua ai le tele o faʻafitauli nai lo le mafai ona latou foia. O nisi fa'amatalaga e uiga i lenei mea e mafai ona maua i le sootaga i lalo.

Filifiliga tele (sova le tuuto) fa'afitauli mafaufau e mafai ona o'o atu ai i fa'afitauli tetele. O le o'o i le tapula'a ole PPU e aofia ai le fa'ase'eina o ta'amilosaga o le uati, a'o le o'o atu i le tapula'a manatua e aofia ai le tapeina o le pod. Pe na e matauina OOMkill? Ioe, o le mea tonu lena o loo tatou talanoa ai.

E te mana'o e fa'aitiitia le ono tupu o lenei mea? Aua le soona fa'asoa manatu ma fa'aoga Guaranteed QoS (Quality of Service) e ala i le setiina o le talosaga manatua i le tapula'a (pei o le fa'ata'ita'iga i lalo). Faitau atili e uiga i lenei mea ile Henning Jacobs folasaga (Lead Engineer i Zalando).

Pa'u (sili atu le avanoa e maua ai le OOMkilled):

   resources:
      requests:
        memory: "128Mi"
        cpu: "500m"
      limits:
        memory: "256Mi"
        cpu: 2

Faamaonia:

   resources:
      requests:
        memory: "128Mi"
        cpu: 2
      limits:
        memory: "128Mi"
        cpu: 2

O le a se mea e mafai ona fesoasoani pe a faʻatulagaina punaoa?

Faatasi ai ma le fesoasoani a metric-server e mafai ona e vaʻai i le faʻaogaina o punaoa a le CPU ma le faʻaogaina o mafaufauga e pods (ma pusa i totonu). E foliga mai, ua uma ona e faʻaaogaina. Na'o le fa'atonuina o tulafono nei:

kubectl top pods
kubectl top pods --containers
kubectl top nodes

Ae ui i lea, latou te faʻaalia le faʻaaogaina o loʻo iai nei. E mafai ona tuʻuina atu ia te oe se manatu faigata o le faʻatonuga o le tele, ae mulimuli ane e te manaʻomia talafaasolopito o suiga i metrics i le aluga o taimi (e tali fesili e pei o: “O le a le maualuga o le uta CPU?”, “O le a le uta i le taeao ananafi?”, ma isi). Mo lenei mea e mafai ona e faʻaaogaina Prometheus, DataDog ma isi meafaigaluega. Na'o latou maua fua mai metrics-server ma teuina, ma e mafai e le tagata fa'aoga ona fesiligia ma fa'atatau i latou.

VerticalPodAutoscaler e mafai ai faʻaaoga lenei faiga. E siaki le PPU ma le tala fa'asolopito o le fa'aogaina ma fa'atulaga ni talosaga fou ma tapula'a e fa'atatau i nei fa'amatalaga.

O le fa'aogaina lelei o le eletise e le o se galuega faigofie. E pei o le taalo Tetris i taimi uma. Afai o loʻo e totogia tele mo le faʻaogaina o le eletise ma le maualalo o le taumafaina (fai mai ~ 10%), matou te fautuaina le vaʻai i oloa e faʻatatau i le AWS Fargate poʻo le Virtual Kubelet. O lo'o fausia i luga o se fa'ata'ita'iga pili e leai se server/pay-per-usage, lea e ono iu ina taugofie i ia tulaga.

2. Su'esu'e ola ma saunia

Ona o le faaletonu, e le mafai ona siaki le ola ma le saunia i Kubernetes. Ma o nisi taimi e galo ia i latou e ki ...

Ae fa'afefea se isi mea e mafai ona e amataina se toe amataina o le tautua pe a tupu se mea sese e oti ai? Ma e fa'afefea ona iloa e le tagata fa'atatau o uta ua sauni le pod e talia fe'avea'i? Po'o e mafai ona fa'atautaia le tele o feoaiga?

O nei suʻega e masani ona fenumiai le tasi ma le isi:

  • Ola - siaki "survivability", lea e toe amata ai le pod pe a le manuia;
  • Tatala - siaki sauni, pe a le manuia, e motusia le pod mai le auaunaga Kubernetes (e mafai ona siaki e faʻaaoga ai kubectl get endpoints) ma e le taunu'u atu i ai se'iloga ua mae'a manuia le isi siaki.

O nei siaki uma e lua FAIA I LE Tamilosaga UMA O LE OLA O LE POD. E taua tele.

O se manatu sese masani e faapea o su'esu'ega sauniuni e na'o le amataina ina ia iloa ai e le paleni ua saunia le pod (Ready) ma e mafai ona amata fa'agaioia feoaiga. Ae ui i lea, o se tasi lea o filifiliga mo lo latou faʻaaogaina.

O le isi o le avanoa e iloa ai o le feoaiga i luga o le pod e tele naua ma ovaina ai (po'o le pod o lo'o fa'atinoina le fa'atatauina o puna'oa). I lenei tulaga, e fesoasoani le siaki saunia faʻaitiitia le uta i luga o le pod ma "faʻamalie" i ai. O le fa'amae'aina lelei o se siaki sauni i le lumana'i e mafai ai toe fa'aopoopo le uta i luga o le pod. I lenei tulaga (afai e le manuia le su'ega sauniuni), o le le manuia o le su'ega o le ola o le a matua fa'afefeteina. Aisea e toe amata ai se pusa e maloloina ma galue malosi?

O le mea lea, i nisi tulaga, e leai se siaki e sili atu nai lo le faʻatagaina i latou i faʻamaufaʻailoga sese. E pei ona taʻua i luga, afai siaki ola kopi siaki saunia, ona e i ai lea i se puapuaga tele. O le filifiliga e mafai o le configure na'o le su'ega saunima ola mata'utia tuu ese.

O ituaiga siaki uma e lua e le tatau ona toilalo pe a le manuia faʻalagolago masani, a le o lea o le a oʻo atu i le faʻalavelave (pei o le avalanche) le manuia o pods uma. I se isi faaupuga, aua e te fa'aleagaina oe lava.

3. LoadBalancer mo auaunaga HTTP taitasi

E foliga mai, o loʻo i ai lau 'auʻaunaga HTTP i lau fuifui e te manaʻo e tuʻuina atu i le lalolagi i fafo.

Afai e te tatalaina le auaunaga e pei type: LoadBalancer, o lana pule (faʻalagolago i le kamupani e tuʻuina atu auaunaga) o le a tuʻuina atu ma faʻatalanoa se LoadBalancer i fafo (e le o taʻavale i luga o le L7, ae e oʻo lava ile L4), ma e ono aʻafia ai le tau (tuatusi IPv4 faʻapitoa i fafo, mana faʻapipiʻi, pili ile-lua. ) ona o le manaʻoga e fausia se numera tele o ia punaoa.

I lenei tulaga, e sili atu le talafeagai le faʻaaogaina o se tasi o paleni uta fafo, tatala auaunaga pei type: NodePort. Pe sili atu, faʻalautele se mea e pei o nginx-ingress-pule (po o traffik), o ai o le a na o ia NodePort fa'ai'uga e feso'ota'i ma le fa'apaleni uta fafo ma o le a fa'asolo ai feoaiga i totonu ole fuifui fa'aaoga ulufale-Kubernetes punaoa.

O isi 'au'aunaga i totonu o fa'apotopotoga (micro) e fegalegaleai le tasi ma le isi e mafai ona "feso'ota'i" fa'aoga auaunaga pei o ClusterIP ma se masini su'esu'e auaunaga e ala ile DNS. Aua le fa'aogaina a latou DNS/IP lautele, aua e mafai ona a'afia ai le le tumau ma fa'ateleina le tau o auaunaga ao.

4. Autoscaling se fuifui e aunoa ma le amanaia o ona foliga

A fa'aopoopo pona ma aveese mai se fuifui, e le tatau ona e fa'alagolago i nisi o fua fa'atatau e pei o le fa'aogaina o le CPU i na pona. E tatau ona amanaʻia le tele o fuafuaga a le pusa tapula'a, e pei o le pod/node affinity, tants and tolerations, resources requests, QoS, etc. O le faʻaaogaina o se autoscaler fafo e le faʻaogaina nei nuances e mafai ona oʻo atu ai i faʻafitauli.

Va'ai faalemafaufau e tatau ona fa'atulaga se pusa, ae o lo'o maua uma le malosi o le PPU e talosagaina / fa'a'ese'ese ma le pod e pipii i se setete Pending. E va'aia e le autoscaler fafo le averesi o uta o le CPU (e le o le talosaga) ma e le amataina le fa'alauteleina (fa'ato'a) - e le fa'aopoopoina se isi node. O le i'uga, o le a le fa'atulagaina lenei pod.

I le tulaga lea, toe fesuia'i fua (fua i totonu) - o le aveesea o se node mai se fuifui e sili atu ona faigata ona faatino. Vaai faalemafaufau o loʻo i ai sau pusa faʻapitoa (faʻatasi ai ma le teuina faifai pea e fesoʻotaʻi). Volume faifai pea e masani ona i ai sone avanoa faapitoa ma e le toe faia i le itulagi. O lea la, afai e tapeina e le autoscaler fafo se node ma lenei pod, o le a le mafai e le tagata faʻatulagaina le faʻatulagaina o lenei pod i luga o se isi node, talu ai e mafai ona faia lenei mea i le avanoa avanoa o loʻo i ai le teuina faifai pea. Pod o le a mau i le setete Pending.

Ta'uta'ua tele i totonu ole nu'u Kubernetes fuifui-autoscaler. E tamo'e i luga o se fuifui, lagolago API mai le tele o ao e tu'uina atu, fa'atatau uma tapula'a ma mafai ona fua i mataupu o lo'o i luga. E mafai fo'i ona fa'asolo i totonu a'o fa'atumauina tapula'a uma, ma fa'asaoina ai tupe (semanu e fa'aalu i le gafatia e le fa'aaogaina).

5. Fa'atamala IAM/RBAC gafatia

Faʻaeteete i le faʻaaogaina o tagata faʻaoga IAM ma mealilo faifai pea mo masini ma talosaga. Fa'atulaga avanoa le tumau e fa'aaoga ai matafaioi ma tala o auaunaga (teuga tupe a auaunaga).

E masani ona matou feagai ma le mea moni e faʻapea o ki avanoa (ma mea lilo) e faʻamalosi i le faʻatulagaina o talosaga, faʻapea foʻi ma le le amanaʻiaina o le suiga o mealilo e ui ina maua le avanoa i Cloud IAM. Fa'aoga matafaioi a le IAM ma tala o auaunaga nai lo tagata fa'aoga pe a talafeagai ai.

10 Mea masani masani pe a faʻaaogaina Kubernetes

Fa'agalo e uiga i le kube2iam ma alu sa'o ile matafaioi IAM mo fa'amatalaga tau auaunaga (e pei ona fa'amatalaina ile tusi o le igoa lava e tasi Štěpán Vraný):

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-app-role
  name: my-serviceaccount
  namespace: default

Tasi fa'amatalaga. E le faigata, sa'o?

E le gata i lea, aua le tuʻuina atu faʻamatalaga auaunaga ma faʻamatalaga faʻataʻitaʻiga avanoa admin и cluster-adminpe afai latou te le manaomia. O lenei mea e sili atu ona faigata ona faʻatinoina, aemaise ile RBAC K8s, ae mautinoa e aoga le taumafaiga.

6. Aua le faalagolago i le otometi anti-affinity mo pods

Va'ai faalemafaufau e tolu au fa'atusa o nisi fa'apipi'iina i luga o se node. E pa'u le node, ma fa'atasi ai ma fa'atusa uma. Tulaga le fiafia, a ea? Ae aisea na i ai uma kopi i luga o le node e tasi? E le o Kubernetes e tatau ona tuʻuina atu avanoa maualuga (HA)?!

Ae paga lea, o le Kubernetes scheduler, i luga o lana lava taumafaiga, e le tausisia tulafono o le ola eseese (tetee-afine) mo pusa. E tatau ona fa'ailoa manino mai:

// опущено для краткости
      labels:
        app: zk
// опущено для краткости
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - zk
              topologyKey: "kubernetes.io/hostname"

Pau lava lena. Ole taimi nei ole a fa'atulagaina pods i nodes eseese (o lenei tulaga e na'o le taimi ole fa'atulagaina, ae le o le taimi o la latou taotoga - o le mea lea requiredDuringSchedulingIgnoredDuringExecution).

O lea tatou te talanoa i ai podAntiAffinity i nodes eseese: topologyKey: "kubernetes.io/hostname", - ae le o sone avanoa eseese. Ina ia faʻatinoina se HA atoatoa, e tatau ona e eli loloto i lenei autu.

7. Le amanaia PodDisruptionBudgets

Va'ai faalemafaufau o lo'o i ai sau uta gaosiga i luga o se fuifui Kubernetes. Mai lea taimi i lea taimi, o nodes ma le fuifui lava ia e tatau ona faʻafouina (pe faʻaumatia). PodDisruptionBudget (PDB) o se mea e pei o se maliega faʻamaonia auaunaga i le va o faʻalapotopotoga faʻapipiʻi ma tagata faʻaoga.

O le PDB e mafai ai ona e aloese mai faʻalavelave faʻalavelave e mafua mai i le leai o ni nodes:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: zk-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: zookeeper

I lenei faʻataʻitaʻiga, o oe, i le avea ai ma se faʻaoga o le fuifui, taʻu atu i le au pulega: "Ei, o loʻo i ai laʻu auaunaga a le leoleo manu, ma e tusa lava po o le a lau mea e fai, ou te manaʻo ia i ai a itiiti ifo ma le 2 kopi o lenei auaunaga e avanoa i taimi uma."

E mafai ona e faitau atili e uiga i lenei mea iinei.

8. Fa'aoga tele po'o si'osi'omaga i se fuifui masani

Kubernetes namespaces (igoa avanoa) aua le tu'uina atu se fa'a'esega malosi.

O se manatu sese masani e faapea afai e te tuʻuina atu se uta e le faʻaaogaina i totonu o le tasi igoa avanoa ma se uta uta i le isi, ona latou o le a le faatosinaina e le tasi le isi i soo se auala... Ae ui i lea, e mafai ona ausia se tulaga o le vavaeeseina e ala i le faʻaogaina o punaoa / tapulaʻa, faʻatulagaina o quota, ma le faʻatulagaina o faʻamuamuaClasses. O nisi "fa'aletino" fa'aesea i le va'aiga fa'amatalaga e tu'uina mai e feso'ota'iga, fa'apalepale, ta'i (po'o nodeselectors), ae o ia tu'uese'ega e matua'i lava. faigata faatino.

O i latou e manaʻomia le tuʻufaʻatasia o ituaiga uma o galuega i totonu o le fuifui e tasi e tatau ona feagai ma le lavelave. Afai e leai se manaʻoga faʻapea, ma e mafai ona e gafatia e maua toe tasi le fuifui (fai mai, i se ao lautele), ona sili atu lea ona fai. O lenei mea o le a maua ai se maualuga maualuga atu o le fa'alumaina.

9. externalTrafficPolicy: Cluster

E masani ona tatou vaʻaia o fefaʻatauaiga uma i totonu o le fuifui e sau e ala i se auaunaga e pei o NodePort, lea e faʻatulagaina ai le faiga faʻavae externalTrafficPolicy: Cluster... O lona uiga o lena NodePort o loʻo matala i luga o pona uma i totonu o le fuifui, ma e mafai ona e faʻaogaina soʻo se tasi o ia mea e fegalegaleai ai ma le tautua manaʻomia (set of pods).

10 Mea masani masani pe a faʻaaogaina Kubernetes

I le taimi lava e tasi, o pusa moni e fesoʻotaʻi ma le auaunaga NodePort o loʻo taʻua i luga e masani ona maua i luga o se mea vaega itiiti o nei nodes. I se isi faaupuga, afai ou te faʻafesoʻotaʻi i se node e le o iai le pod manaʻomia, o le a tuʻuina atu feʻaveaʻi i se isi node, fa'aopoopoina se oso ma le fa'atuputeleina o le taofiofia (afai o lo'o i ai nodes i sone avanoa eseese / nofoaga autu o fa'amaumauga, e mafai ona fai si maualuga o le taofi; fa'aopoopo, o le a fa'atupula'ia le tau o felauaiga i fafo).

I le isi itu, afai o se auaunaga Kubernetes e iai se faiga faʻavae externalTrafficPolicy: Local, ona tatala ai lea o NodePort i luga o na pona o loʻo faʻaogaina ai pusa manaʻomia. Pe a faʻaaogaina se paleni uta fafo e siaki ai le setete (su'esu'eina o le soifua maloloina) fa'ai'uga (fa'afefea AWS ELB), o Ia o le a auina atu felauaiga i na o nodes talafeagai, lea o le a i ai se aoga aoga i le tuai, faʻaogaina o manaʻoga, tupe faʻaalu (ma le mafaufau masani e faʻatonuina tutusa).

O lo'o i ai se avanoa maualuga o lo'o e fa'aaogaina se mea fa'apena traffik poʻo nginx-ingress-pule e pei o le NodePort endpoint (poʻo le LoadBalancer, lea e faʻaogaina ai le NodePort) e faʻatautaia ai fefaʻatauaiga o le HTTP, ma le faʻatulagaina o lenei filifiliga e mafai ona faʻaitiitia ai le faʻaogaina mo ia talosaga.

В lenei lolomiga E mafai ona e aʻoaʻo atili e uiga i fafoTrafficPolicy, ona lelei ma le le lelei.

10. Aua le nonoa i fuifui ma aua le fa'aleagaina le va'alele fa'atonutonu

I le taimi muamua, sa masani ona valaʻau 'auʻaunaga i igoa talafeagai: Anton, HAL9000 ma Colossus ... I aso nei ua suia i latou e faʻailoa faʻafuaseʻi. Ae ui i lea, sa tumau pea le masani, ma o lea ua o atu igoa talafeagai i fuifui.

O se tala masani (faʻavae i mea moni na tutupu): na amata uma i se faʻamaoniga o manatu, o lea na i ai i le fuifui se igoa mitamita tofotofoga… Ua mavae tausaga ma o loo faaaogaina pea i le gaosiga, ma e fefefe tagata uma e tago i ai.

E leai se mea malie e uiga i fuifui ua liua i fagafao, o lea matou te fautuaina le aveese mai lea taimi i lea taimi aʻo faʻataʻitaʻi fa'alavelave fa'afuase'i (o le a fesoasoani lenei mea inisinia vevesi - tusa. fa'aliliu.). E le gata i lea, e le afaina le galue i luga o le faʻatonuga (vaalele pulea). O le fefe e pa'i atu ia te ia e le o se faailoga lelei. Etcd oti? Tama e, ua e matua fa'alavelave lava!

I le isi itu, e le tatau ona e ta'ita'iina i le fa'aogaina. Faatasi ai ma le taimi e ono fa'agesegese le vaega fa'atonutonu. E foliga mai, o lenei mea e mafua ona o le tele o mea faitino e faia e aunoa ma lo latou suiga (o se tulaga masani pe a faʻaaogaina Helm ma faʻaoga faʻaletonu, o le mea lea e leʻo faʻafouina ai lona tulaga i configmaps / mealilo - o se taunuuga, e faitau afe mea faʻaputu i totonu. le fa'atonuga fa'atonu) po'o le fa'atonuina pea o mea kube-api (mo le fa'avasegaina otometi, mo le CI/CD, mo le mata'ituina, fa'amaumauga o mea tutupu, fa'atonu, ma isi).

E le gata i lea, matou te fautuaina le siakiina o maliega SLA/SLO ma le kamupani Kubernetes pulea ma gauai atu i faʻamaoniga. E mafai e le tagata faʻatau ona faʻamaonia fa'atonu avanoa avanoa (po o ona vaega laiti), ae le o le p99 tuai o talosaga e te lafo i ai. I se isi faaupuga, e mafai ona e ulufale kubectl get nodes, ma maua se tali pe a uma le 10 minute, ma o le a le solia lea o tuutuuga o le maliega o auaunaga.

11. Ponesi: fa'aaoga le pine fou

Ae o se mea masani lenei. Talu ai nei, ua tau le maua soo lenei metotia, talu ai o le toʻatele, ua aʻoaʻoina mai aafiaga tiga, ua le toe faʻaaogaina le pine :latest ma amata fa'apipi'i fa'aliliuga. Talofa!

ECR fa'atumauina le le suia o pine ata; Matou te fautua atu ia e faamasani i lenei tulaga ofoofogia.

Aotelega

Aua e te faʻamoemoe o mea uma e galue i le po: Kubernetes e le o se faʻamaʻi. Leaga le app o le a tumau pea i lenei auala e oʻo lava i Kubernetes (ma atonu o le a sili atu ona leaga). O le fa'atamala o le a o'o atu ai i le fa'alavelave tele, fa'agesegese ma fa'alavelave le galuega o le vaega fa'atonutonu. E le gata i lea, e ono lamatia oe e aunoa ma se fuafuaga mo le toe faaleleia o faalavelave. Aua le fa'amoemoe Kubernetes e tu'u'ese'ese ma maualuga avanoa mai le pusa. Fa'aalu sina taimi e fa'aoga moni ai lau talosaga ile ao.

E mafai ona e faamasani i aafiaga le manuia o au eseese i totonu lenei faaputuga o tala saunia e Henning Jacobs.

O i latou e manaʻo e faʻaopoopo i le lisi o mea sese o loʻo tuʻuina atu i lenei tusiga e mafai ona faʻafesoʻotaʻi i matou i luga o Twitter (@MarekBartik, @MstrsObserver).

PS mai faaliliu

Faitau foi i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga