Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

I tenei tau, ko te hui matua a Kubernetes Pakeha - KubeCon + CloudNativeCon Europe 2020 - he mariko. Heoi, ko te whakarereketanga o te whakatakotoranga kaore i aukati i a maatau ki te tuku i ta maatau purongo kua roa kua whakamaheretia "Haere? Pahu! Tutaki ki te Shell-operator” i whakatapua ki ta maatau kaupapa Open Source anga-kaiwhakahaere.

Ko tenei tuhinga, i whakaaweahia e te korero, e whakaatu ana i tetahi huarahi ki te whakangawari i te mahi hanga kaiwhakahaere mo Kubernetes me te whakaatu me pehea e taea ai e koe te mahi i a koe ake me te iti o te whakapau kaha ki te whakamahi i te anga-kaiwhakahaere.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Te whakataki ataata o te purongo (~ 23 meneti i roto i te reo Ingarihi, ka kitea he nui ake nga korero i te tuhinga) me te waahanga matua mai i roto i te ahua tuhinga. Haere!

I Flant ka arotau me te whakaaunoa i nga mea katoa. I tenei ra ka korero tatou mo tetahi atu ariā whakahihiri. Hui: te tuhi anga taketake-kapua!

Heoi, me timata tatou ki te horopaki e puta ai enei mea katoa: Kubernetes.

Kubernetes API me nga kaiwhakahaere

Ko te API i Kubernetes ka taea te whakaatu hei momo tūmau kōnae me nga raarangi mo ia momo ahanoa. Ko nga mea (rauemi) kei runga i tenei tūmau e tohuhia ana e nga konae YAML. I tua atu, he API taketake te tūmau e taea ai e koe te mahi e toru nga mea:

  • riro rauemi i runga i tona ahua me tona ingoa;
  • panoni rauemi (i tenei keehi, ko nga mea "tika" anake e tiakina ana e te kaitoro - ko nga mea katoa i hee te hanga, i whakaarohia ranei mo etahi atu raarangi ka makahia);
  • ara mo te rauemi (i tenei keehi, ka whiwhi tonu te kaiwhakamahi i tana putanga o naianei/whakahoutia).

No reira, ko Kubernetes te mahi hei momo tuumau konae (mo nga whakaaturanga YAML) me nga tikanga matua e toru (ae, tera ano etahi, engari ka waiho e matou inaianei).

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ko te raruraru ka taea e te tūmau te rokiroki korero anake. Ki te mahi i te reira e hiahia ana koe kaiwhakahaere - te ariā tuarua tino nui me te tino kaupapa o te ao o Kubernetes.

E rua nga momo kaiwhakahaere matua. Ko te tuatahi ka tango i nga korero mai i a Kubernetes, ka tukatuka i runga i te arorau kohanga, ka whakahokia ki nga K8s. Ko te tuarua he tango korero mai i a Kubernetes, engari, kaore i rite ki te momo tuatahi, ka huri te ahua o etahi rauemi o waho.

Kia ata titiro tatou ki te tukanga o te hanga Hoatutanga ki Kubernetes:

  • Kaiwhakahaere Whakamahinga (kei roto kube-controller-manager) ka whiwhi korero mo te Whakamahinga me te hanga ReplicaSet.
  • Ka waihangahia e ReplicaSet nga tauira e rua (e rua nga pene) i runga i enei korero, engari kaore ano kia whakaritea enei putea.
  • Ka whakatakotohia e te kaihōtaka nga pona me te taapiri i nga korero node ki o raatau YAML.
  • Ka huri a Kubelets ki tetahi rauemi o waho (e kii ana a Docker).

Katahi ka tuaruatia tenei raupapa katoa i roto i te raupapa whakamuri: ka tirotirohia e te kubelet nga ipu, ka tatau i te mana o te poti ka whakahokia mai. Ka whiwhi te kaiwhakahaere ReplicaSet i te mana me te whakahou i te ahua o te huinga tauira. He rite ano te mea ki te Kaiwhakahaere Whakatupato me te mutunga ka whiwhi te kaiwhakamahi i te mana whakahou (o naianei).

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Anga-kaiwhakahaere

Ko te ahua ko Kubernetes i ahu mai i runga i te mahi tahi a nga momo kaiwhakahaere (he kaiwhakahaere ano hoki nga kaiwhakahaere Kubernetes). Ka puta ake te patai, me pehea te hanga i to ake kaiwhakahaere me te iti o te kaha? Na konei ko te mea i whakawhanakehia e matou ka tae mai ki te whakaora anga-kaiwhakahaere. Ka taea e nga kaiwhakahaere punaha te hanga i a raatau ake korero ma te whakamahi i nga tikanga mohio.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

He tauira ngawari: te kape i nga mea ngaro

Ka titiro tatou ki tetahi tauira ngawari.

Me kii he kahui Kubernetes ta tatou. He mokowā ingoa default me etahi mea ngaro mysecret. I tua atu, he waahi ingoa ano kei roto i te roopu. Ko etahi o ratou he tapanga motuhake e piri ana ki a raatau. Ko ta matou whainga ko te kape i te mea ngaro ki roto i nga waahi ingoa me te tapanga.

He uaua te mahi na te mea ka puta mai nga mokowā ingoa hou i roto i te kāhui, a kei etahi o ratou tenei tapanga. I tetahi atu ringa, ka whakakorehia te tapanga, me whakakore ano a Secret. I tua atu i tenei, ko te mea ngaro ano ka taea te whakarereke: i tenei keehi, me kape te mea ngaro hou ki nga waahi ingoa katoa me nga tapanga. Mena ka mukua pohehe te Secret i tetahi mokowāingoa, me whakahoki tonu e to maatau kaiwhakahaere.

Inaianei kua whakaritea te mahi, kua tae ki te wa ki te timata ki te whakatinana ma te whakamahi i te anga-kaiwhakahaere. Engari ko te tuatahi he pai ki te korero i etahi kupu mo te anga-kaiwhakahaere ake.

Me pehea te mahi anga-kaiwhakahaere

Pērā i ētahi atu mahi i Kubernetes, ka rere te kaiwhakahaere anga i roto i tana ake pona. I roto i tenei pod i roto i te whaiaronga /hooks ka penapena nga konae whakahaere. Ka taea e enei te tuhi i roto i te Bash, Python, Ruby, etc. Ka kiia e matou he matau nga konae whakahaere (nga matau).

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ka ohauru a Shell-operator ki nga huihuinga Kubernetes me te whakahaere i enei matau hei whakautu ki nga kaupapa e hiahiatia ana e matou.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Me pehea e mohio ai te kaiwhakahaere anga ko tehea matau hei whakahaere me ahea? Ko te take e rua nga wahanga o ia matau. I te wa o te whakaoho, ka whakahaerehia e te kaiwhakahaere anga nga matau katoa me te tautohetohe --config Koinei te waahanga whirihoranga. A, i muri i tera, ka whakarewahia nga matau i runga i te huarahi noa - hei whakautu ki nga kaupapa e piri ana. I te keehi whakamutunga, ka whiwhi te matau i te horopaki here (te horopaki here) - nga raraunga i roto i te whakatakotoranga JSON, ka korerohia e matou mo nga korero i raro nei.

Te hanga kaiwhakahaere i Bash

Inaianei kua reri matou mo te whakatinanatanga. Ki te mahi i tenei, me tuhi e rua nga mahi (ma te ara, ka tūtohu matou whare pukapuka shell_lib, e tino whakangwari ana i te tuhi matau ki Bash):

  • ko te mea tuatahi mo te wahanga whirihoranga - ka whakaatu i te horopaki here;
  • kei te tuarua te arorau matua o te matau.

#!/bin/bash

source /shell_lib.sh

function __config__() {
  cat << EOF
    configVersion: v1
    # BINDING CONFIGURATION
EOF
}

function __main__() {
  # THE LOGIC
}

hook::run "$@"

Ko te mahi e whai ake nei ko te whakatau he aha nga taonga e hiahiatia ana. I roto i to maatau, me whai maatau:

  • puna huna mo nga huringa;
  • mokowāingoa katoa i roto i te kāhui, kia mōhio ai koe ko ēhea he tapanga e piri ana;
  • nga mea ngaro ki te whakarite kia rite katoa ki te mea ngaro o te puna.

Ohauru ki te puna ngaro

He tino ngawari te whirihoranga here. Ka tohu matou kei te pirangi matou ki a Secret me te ingoa mysecret i te mokowā ingoa default:

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

function __config__() {
  cat << EOF
    configVersion: v1
    kubernetes:
    - name: src_secret
      apiVersion: v1
      kind: Secret
      nameSelector:
        matchNames:
        - mysecret
      namespace:
        nameSelector:
          matchNames: ["default"]
      group: main
EOF

Ko te mutunga, ka puta te matau ina huri te mea ngaro o te puna (src_secret) ka whiwhi i te horopaki here e whai ake nei:

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ka kite koe, kei roto te ingoa me te mea katoa.

Te pupuri i nga waahi ingoa

Inaianei me ohauru koe ki nga waahi ingoa. Hei mahi i tenei, ka tohua e matou te whirihoranga here e whai ake nei:

- name: namespaces
  group: main
  apiVersion: v1
  kind: Namespace
  jqFilter: |
    {
      namespace: .metadata.name,
      hasLabel: (
       .metadata.labels // {} |  
         contains({"secret": "yes"})
      )
    }
  group: main
  keepFullObjectsInMemory: false

Ka kite koe, kua puta he mara hou ki te whirihoranga me te ingoa jqTatari. Ka rite ki tana ingoa, jqFilter ka tarai i nga korero koretake katoa ka hangaia he ahanoa JSON hou me nga mara e pai ana ki a maatau. Ka whiwhi te matau ki te whirihoranga rite te horopaki here e whai ake nei:

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

He huānga kei roto filterResults mo ia mokowā ingoa i roto i te kāhui. Taurangi Boolean hasLabel e tohu ana mena ka piri tetahi tapanga ki tetahi mokowā ingoa. Kaiwhiriwhiri keepFullObjectsInMemory: false e tohu ana kaore he take ki te pupuri i nga mea katoa ki te mahara.

Aroturuki i nga mea ngaro

Ka ohauru matou ki nga mea ngaro katoa kua tohua he korero managed-secret: "yes" (Koinei ta matou whainga dst_secrets):

- name: dst_secrets
  apiVersion: v1
  kind: Secret
  labelSelector:
    matchLabels:
      managed-secret: "yes"
  jqFilter: |
    {
      "namespace":
        .metadata.namespace,
      "resourceVersion":
        .metadata.annotations.resourceVersion
    }
  group: main
  keepFullObjectsInMemory: false

I tenei take jqFilter ka tātari i nga korero katoa engari ko te mokowāingoa me te tawhā resourceVersion. Ko te tawhā whakamutunga i tukuna ki te tuhipoka i te wa e hanga ana i te mea ngaro: ka taea e koe te whakataurite i nga putanga o nga mea ngaro me te pupuri tonu i nga korero.

Ko te matau i whirihora penei, ina mahia, ka whiwhi i nga horopaki here e toru kua whakaahuatia i runga ake nei. Ka taea te whakaaro he momo whakaahua (hopuāhua) tautau.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

I runga i enei korero katoa, ka taea te hanga i tetahi algorithm taketake. Ka huri ki runga i nga mokowāingoa katoa me:

  • ki te hasLabel take true mo te mokowāingoa onāianei:
    • ka whakataurite i te mea ngaro o te ao ki te mea o te rohe:
      • ki te mea he rite tonu, kahore he mahi;
      • ki te rereke - ka mahia kubectl replace ranei create;
  • ki te hasLabel take false mo te mokowāingoa onāianei:
    • me whakarite karekau a Secret i te mokowāingoa kua hoatu:
      • mena kei reira te mea ngaro o te rohe, mukua ma te whakamahi kubectl delete;
      • ki te kore e kitea te mea ngaro o te rohe, kaore he mahi.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Te whakatinanatanga o te algorithm i Bash ka taea e koe te tiki i to maatau whare putunga me nga tauira.

Koinei te huarahi i taea ai e matou te hanga i tetahi kaiwhakahaere Kubernetes ngawari ma te whakamahi i nga rarangi 35 o te whirihora YAML me te nui o te waehere Bash! Ko te mahi a te anga-kaiwhakahaere he hono tahi.

Heoi, ko te kape i nga mea ngaro ehara i te waahanga anake o te tono o te taputapu. Anei etahi atu tauira hei whakaatu i tana kaha.

Tauira 1: Te whakarereketanga ki te Mahere Whirihora

Me titiro tatou ki tetahi Whakamahinga e toru nga putunga. Ka whakamahi nga Pods i te ConfigMap hei penapena i etahi whirihoranga. I te whakarewatanga o nga poti, kei roto te ConfigMap i tetahi ahuatanga (kia kiia ko v.1). Na reira, ka whakamahia e nga pene katoa tenei momo putanga o ConfigMap.

Inaianei me whakaaro kua huri te ConfigMap (v.2). Heoi, ka whakamahia e nga poti te putanga o mua o ConfigMap (v.1):

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Me pehea e taea ai e au te huri ki te ConfigMap hou (v.2)? He ngawari te whakautu: whakamahia he tauira. Me taapirihia he korero arowhai ki te waahanga template Ngā whirihoranga tuku:

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ko te mutunga mai, ka rehitatia tenei moni arowhai ki roto i nga putunga katoa, ka rite ano ki tera o te Whakamahinga. Inaianei me whakahou noa koe i te tuhipoka ina huri te ConfigMap. Na te anga-kaiwhakahaere ka tae mai i roto i tenei keehi. Katoa e hiahia ana koe ki te mahi he kaupapa he matau ka ohauru ki te ConfigMap me te whakahou i te kaute.

Mena ka huri te kaiwhakamahi ki te ConfigMap, ka kite te kaiwhakahaere anga, ka tatau ano i te kaute. Muri iho ka uru mai te makutu o Kubernetes: ka patua e te kaitoi te pona, ka hanga he mea hou, tatari kia riro mai. Ready, ka neke atu ki tera atu. Ko te mutunga mai, ka tukutahi ka huri ki te putanga hou o ConfigMap.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Tauira 2: Mahi me nga Whakamaramatanga Rauemi Ritenga

Kei te mohio koe, ka taea e Kubernetes te hanga momo momo taonga. Hei tauira, ka taea e koe te hanga momo MysqlDatabase. Me kii e rua nga tawhā metadata o tenei momo: name и namespace.

apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
  name: foo
  namespace: bar

He kahui Kubernetes kei a matou he momo mokowāingoa e taea ai e matou te hanga papaa raraunga MySQL. I roto i tenei take ka taea te whakamahi anga-kaiwhakahaere ki te whai i nga rauemi MysqlDatabase, te hono atu ki te tūmau MySQL me te tukutahi i nga ahuatanga e hiahiatia ana, e kitea ana o te tautau.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Tauira 3: Aroturuki Whatunga Rōpū

Kei te mohio koe, ko te whakamahi i te ping te huarahi ngawari ki te aro turuki i te whatunga. I roto i tenei tauira ka whakaatu me pehea te whakatinana i taua aroturuki ma te whakamahi i te anga-kaiwhakahaere.

Tuatahi, me ohauru koe ki nga node. Me hiahia te kaiwhakahaere anga ki te ingoa me te wahitau IP o ia node. Ma to raatau awhina, ka ping e ia enei pona.

configVersion: v1
kubernetes:
- name: nodes
  apiVersion: v1
  kind: Node
  jqFilter: |
    {
      name: .metadata.name,
      ip: (
       .status.addresses[] |  
        select(.type == "InternalIP") |
        .address
      )
    }
  group: main
  keepFullObjectsInMemory: false
  executeHookOnEvent: []
schedule:
- name: every_minute
  group: main
  crontab: "* * * * *"

Taumahi executeHookOnEvent: [] ka aukati i te rere o te matau ki te whakautu ki tetahi huihuinga (ara, hei whakautu ki te whakarereke, te taapiri, te whakakore i nga pona). Heoi, ko ia ka rere (me te whakahou i te rarangi o nga pona) Kua whakaritea - ia meneti, i whakaritea e te mara schedule.

Inaianei ka puta te patai, me pehea e mohio ai tatou mo nga raru penei i te ngaronga o te paakete? Kia titiro tatou ki te waehere:

function __main__() {
  for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
    node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
    node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
    packets_lost=0
    if ! ping -c 1 "$node_ip" -t 1 ; then
      packets_lost=1
    fi
    cat >> "$METRICS_PATH" <<END
      {
        "name": "node_packets_lost",
        "add": $packets_lost,
        "labels": {
          "node": "$node_name"
        }
      }
END
  done
}

Ka huri matou i te rarangi o nga node, ka tiki i o raatau ingoa me o ratou wahitau IP, ping ka tukuna nga hua ki a Prometheus. Ka taea e te kaiwhakahaere anga te kaweake i nga inenga ki Prometheus, ka tiakina ki tetahi konae kei runga i te ara kua tohua ki te taurangi taiao $METRICS_PATH.

Pēnei ka taea e koe te hanga he kaiwhakahaere mo te aroturuki whatunga ngawari i roto i te tautau.

Tikanga tūtira

Ka kore e oti tenei tuhinga ki te kore e whakaahua i tetahi atu tikanga nui i hangaia ki roto i te anga-kaiwhakahaere. Whakaarohia ka mahia e ia etahi momo matau hei whakautu ki tetahi huihuinga i roto i te tautau.

  • Ka aha mena, i te wa ano, ka tupu tetahi mea i roto i te tautau? kotahi ano takahanga?
  • Ka whakahaerehia e te kaiwhakahaere anga tetahi atu tauira o te matau?
  • Ka pehea, ki te mea, e rima nga huihuinga ka puta i te roopu i te wa kotahi?
  • Ka mahi whakarara te anga-kaiwhakahaere?
  • He aha nga rauemi kua pau penei i te mahara me te PTM?

Waimarie, kei te anga-kaiwhakahaere he tikanga tutira kua hangaia. Ko nga huihuinga katoa ka raupapahia, ka tukatukahia.

Me whakaatu tenei me etahi tauira. Me kii e rua nga matau. Ko te kaupapa tuatahi ka haere ki te matau tuatahi. Ka mutu ana mahi, ka anga whakamua te rarangi. Ko nga huihuinga e toru e whai ake nei ka tukuna ki te matau tuarua - ka tangohia mai i te rarangi ka uru ki roto i te "paipu". Koira Ka whiwhi te matau i te maha o nga huihuinga — ranei, tino tika, he huinga o nga horopaki here.

Ko enei hoki Ka taea te whakakotahi i nga huihuinga ki tetahi kaupapa nui. Ko te tawhā te kawenga mo tenei group i roto i te whirihoranga here.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ka taea e koe te hanga i te maha o nga rarangi / matau me o raatau momo huinga. Hei tauira, ka taea e te rarangi kotahi te mahi me nga matau e rua, he rereke ranei.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ko nga mea katoa e hiahia ana koe ki te whirihora i te mara kia rite queue i roto i te whirihoranga here. Ki te kore te ingoa o te rarangi i tohua, ka rere te matau ki te rarangi taunoa (default). Ma tenei tikanga tutira ka taea e koe te whakaoti katoa i nga raru whakahaere rawa ina mahi koe me nga matau.

mutunga

I whakamaramatia e matou he aha te anga-kaiwhakahaere, i whakaatu me pehea e taea ai te whakamahi tere me te ngawari ki te hanga i nga kaiwhakahaere Kubernetes, me te maha o nga tauira o tana whakamahinga.

Ko nga korero taipitopito mo te anga-kaiwhakahaere, me te akoranga tere mo te whakamahi, kei te waatea i roto i nga korero e pa ana. putunga i runga i GitHub. Kaua e whakaroa ki te whakapiri mai ki a maatau me nga paatai: ka taea e koe te korero mo tetahi kaupapa motuhake Roopu Telegram (i roto i te Russian) ranei i roto i tenei huinga (i te reo Ingarihi).

A, ki te pai ki a koe, kei te koa tonu matou ki te kite i nga take hou/PR/whetu i runga i GitHub, kei hea, ma te ara, ka kitea e koe etahi atu kaupapa whakamere. I roto ia ratou he mea tika kia tohuhia addon-kaiwhakahaere, ko ia te tuakana o te anga-kaiwhakahaere. Ka whakamahia e tenei taputapu nga tūtohi Helm ki te whakauru i nga taapiri, ka taea te tuku whakahōu me te aro turuki i nga momo tawhā/uara tūtohi, te whakahaere i te tukanga whakaurunga o nga tūtohi, ka taea hoki te whakarereke hei whakautu ki nga huihuinga o te roopu.

Haere? Pahu! Tutaki ki te kaiwhakahaere anga (arotake me te purongo ataata mai i KubeCon EU'2020)

Ataata me nga kiriata

Ataata mai i te whakaaturanga (~23 meneti):


Whakaaturanga o te ripoata:

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero