Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

La 8 Mmesa kopanong Saint HighLoad++ 2019, e le karolo ea karolo ea "DevOps le Ts'ebetso", tlaleho "Ho Atolosoa le ho tlatsa Kubernetes" e fanoe, ha ho bōptjoa basebetsi ba bararo ba khampani ea Flant. Ho eona, re bua ka maemo a mangata ao ho ona re neng re batla ho atolosa le ho tlatsana le bokhoni ba Kubernetes, empa re sa kang ra fumana tharollo e lokiselitsoeng le e bonolo bakeng sa eona. Re na le litharollo tse hlokahalang ka mokhoa oa merero ea Open Source, 'me puo ena e nehetsoe ho bona.

Ka moetlo, re thabela ho hlahisa video ea tlaleho (Metsotso e 50, e ruta ho feta sengoloa) le kakaretso ea sehlooho ka mokhoa oa mongolo. Tsamaea!

Core le litlatsetso ho K8s

Kubernetes e fetola indasteri le mekhoa ea tsamaiso eo e leng khale e thehiloe:

  • Kea mo leboha liphatlalatso, ha re sa sebetsa ka likhopolo tse kang ho theha config kapa ho tsamaisa taelo (Chef, Ansible ...), empa sebelisa lihlopha tsa lijana, litšebeletso, joalo-joalo.
  • Re ka lokisa likopo ntle le ho nahana ka li-nuances tsa sebaka se itseng, eo e tla qalisoa ka eona: tšepe e se nang letho, leru la e mong oa bafani, joalo-joalo.
  • Ka li-K8 ha ho mohla u kileng oa fumaneha mekhoa e metle mabapi le ho hlophisa lisebelisoa tsa motheo: mekhoa ea ho lekanya, ho ipholisa, ho mamella liphoso, joalo-joalo.

Leha ho le joalo, ehlile, ntho e ngoe le e ngoe ha e boreleli: Kubernetes le eona e tlisitse mathata a eona a macha.

Kubernetes ha ke motsoako o rarollang mathata ohle a basebelisi bohle. Ntho ea bohlokoa Kubernetes e ikarabella feela bakeng sa sete ea bonyane mesebetsi e hlokahalang e teng ho e mong le e mong sehlopha:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Motheo oa Kubernetes o hlalosa sete ea mantlha ea li-primitives bakeng sa lijana tsa lihlopha, ho laola sephethephethe, joalo-joalo. Re buile ka bona ka ho qaqileng haholoanyane ka tlaleha lilemo tse 2 tse fetileng.

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ka lehlakoreng le leng, K8s e fana ka menyetla e metle ea ho atolosa mesebetsi e teng, e thusang ho koala ba bang - itseng - litlhoko tsa basebelisi. Keketso ho Kubernetes ke boikarabello ba batsamaisi ba lihlopha, ba tlamehang ho kenya le ho lokisa ntho e 'ngoe le e' ngoe e hlokahalang ho fumana sehlopha sa bona "ka sebopeho se nepahetseng" [ho rarolla mathata a bona a khethehileng]. Ke litlatsetso tsa mofuta ofe tsee? A re hlahlobeng mehlala e meng.

Mehlala ea litlatsetso

Ha re se re kentse Kubernetes, re ka makatsoa ke hore marang-rang a hlokahalang haholo bakeng sa ho sebelisana ha li-pods ka har'a node le pakeng tsa nodes ha e sebetse ka boeona. Kubernetes kernel ha e fane ka tiiso ea likhokahano tse hlokahalang; ho fapana le moo, e khetha marang-rang segokanyimmediamentsi sa sebolokigolo (CNI) bakeng sa litlatsetso tsa motho oa boraro. Re tlameha ho kenya e 'ngoe ea li-add-on tsena, tse tla ikarabella bakeng sa tlhophiso ea marang-rang.

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Mohlala o haufi ke litharollo tsa polokelo ea data (disk ea lehae, sesebelisoa sa block block, Ceph ...). Mathomong ba be ba le ka garegare, eupša ka go tla CSI boemo bo fetoha ho ntho e ts'oanang le e seng e hlalositsoe: sebopeho se ho Kubernetes, 'me ts'ebetsong ea eona ke li-module tsa mokha oa boraro.

Mehlala e meng e kenyelletsa:

  • Ingress-balaoli (sheba tlhahlobo ea bona ho sengoloa sa rona sa morao tjena).
  • mookameli oaertert:

    Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

  • Basebelisi ke sehlopha sohle sa li-add-on (tse kenyeletsang molaoli ea boletsoeng), li hlalosa li-primitive(s) le li-controller. Maikutlo a mosebetsi oa bona a lekanyelitsoe feela ke menahano ea rona mme a re lumella ho fetola likarolo tsa motheo tse lokiselitsoeng (mohlala, DBMS) hore e be li-primitives, tseo ho leng bonolo ho sebetsana le tsona (ho feta ka sete ea lijana le litlhophiso tsa tsona). Ho ngotsoe palo e kholo ea basebetsi - leha ba bangata ba bona ha ba so lokele tlhahiso, ke taba ea nako feela:

    Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

  • Melemo - papiso e 'ngoe ea kamoo Kubernetes a arotseng sebopeho (Metrics API) ho tloha ts'ebetsong (li-add-on tsa batho ba boraro tse kang Prometheus adapter, Datadog cluster agent ...).
  • etsoe tlhokomelo le lipalo-palo, moo ts'ebetsong e seng feela e hlokahalang Prometheus le Grafana, empa hape le kube-state-metrics, node-exporter, joalo-joalo.

'Me lena ha se lethathamo le feletseng la litlatsetso ... Ka mohlala, rona k'hamphani ea Flant re kenya hona joale 29 tlatsetso (tseo kaofela li etsang kakaretso ea lintho tse 249 tsa Kubernetes). Ka mantsoe a bonolo feela, re ke ke ra bona bophelo ba sehlopha ntle le litlatsetso.

Boiketsetso

Lisebelisoa li etselitsoe ho iketsetsa lits'ebetso tseo re kopanang le tsona letsatsi le letsatsi. Mehlala ea 'nete ke ena eo ho ngola opareitara e ka bang tharollo e ntle haholo ho eona:

  1. Ho na le ngoliso ea lekunutu (ke hore, e hloka ho kena) e nang le litšoantšo bakeng sa ts'ebeliso. Ho nahanoa hore pod e 'ngoe le e' ngoe e abetsoe sephiri se khethehileng se lumellang ho netefatsa ho ngolisa. Mosebetsi oa rona ke ho netefatsa hore sephiri sena se fumaneha sebakeng sa mabitso e le hore li-pods li ka khoasolla litšoantšo. Ho ka ba le lits'ebetso tse ngata (e 'ngoe le e' ngoe e hloka lekunutu), 'me ho molemo ho ntlafatsa liphiri ka bobona kamehla, kahoo khetho ea ho beha liphiri ka letsoho e felisoa. Mona ke moo opareitara a tlang ho pholosa: re theha molaoli ea tla emela hore sebaka sa mabitso se hlahe 'me, ho itšetlehile ka ketsahalo ena, o tla eketsa sephiri sebakeng sa mabitso.
  2. Ho lumeloa ka mokhoa oa kamehla ho tloha ho li-pods ho ea Marang-rang ho thibetsoe. Empa ka linako tse ling ho ka 'na ha hlokahala: hoa utloahala hore mokhoa oa tumello ea ho fihlella o sebetse habonolo, ntle le ho hloka tsebo e khethehileng, mohlala, ka ho ba teng ha letšoao le itseng sebakeng sa mabitso. Motho ea sebetsang a ka re thusa joang moo? Ho entsoe molaoli o emelang hore lengolo le hlahe sebakeng sa mabitso ebe o eketsa leano le nepahetseng bakeng sa phihlello ea Marang-rang.
  3. Boemo bo ts'oanang: ha re re re hloka ho eketsa e itseng silafetse, haeba e na le label e tšoanang (e nang le mofuta o itseng oa sehlongwapele). Liketso le opareitara li hlakile ...

Sehlopheng sefe kapa sefe, mesebetsi e tloaelehileng e tlameha ho rarolloa, le ka ho le letona sena se ka etsoa ho sebelisa basebetsi.

Ha re akaretsa lipale tsohle tse hlalositsoeng, re fihletse qeto ea hore bakeng sa mosebetsi o monate oa Kubernetes oo u o hlokang: A) kenya litlatsetso, b) ntshetsa pele basebetsi (bakeng sa ho rarolla mesebetsi ea letsatsi le letsatsi ea admin).

U ka ngola polelo joang bakeng sa Kubernetes?

Ka kakaretso, morero o bonolo:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

... empa ho bonahala eka:

  • Kubernetes API ke ntho e sa reng letho e nkang nako e ngata ho e tseba;
  • lenaneo le lona ha se la motho e mong le e mong (puo ea Go e khethiloe e le puo e ratoang hobane ho na le moralo o khethehileng bakeng sa eona - SDK ea opereishene);
  • Boemo bo tšoana le ka moralo ka boeona.

Ntlha ea bohlokoa: ho ngola molaodi (opereishene) o tlameha ho sebelisa lisebelisoa tsa bohlokoa ho ithuta lintho tse bonahalang. Sena se ka lokafatsoa bakeng sa basebelisi ba "kholo" - re re, bakeng sa MySQL DBMS. Empa haeba re hopola mehlala e hlalositsoeng ka holimo (ho senola liphiri, ho fumana li-pods ho Internet ...), tseo re batlang ho li etsa ka nepo, joale re tla utloisisa hore boiteko bo entsoeng bo tla feta sephetho seo re se hlokang hona joale:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ka kakaretso, ho hlaha bothata: sebelisa lisebelisoa tse ngata 'me u fumane sesebelisoa se nepahetseng sa ho ngola lipolelo, kapa u se etse ka tsela ea khale (empa kapele). Ho e rarolla - ho fumana sekisetsa lipakeng tsa maemo ana a feteletseng - re thehile morero oa rona: khetla-mosebetsi (sheba le ea hae phatlalatso ea morao tjena ka har'a hub).

Shell-operator

O sebetsa joang? Sehlopha se na le pod e nang le Go binary e nang le shell-operator. Haufi le eena ho na le sete ea likhoka (lintlha tse ling ka tsona - sheba ka tlase). Shell-operator ka boeona e ngolisa ho itseng liketsahalo ho Kubernetes API, ha e hlaha moo e hlahisang lihoko tse tsamaellanang.

Motho ea sebetsang likhetla o tseba joang hore na ke lihakisi life tse lokelang ho bitsa liketsahalong life? Tlhahisoleseding ena e fetisetsoa ho khetla-opereishene ka lihakisi ka botsona, 'me li e etsa ka mokhoa o bonolo haholo.

Hook ke sengoloa sa Bash kapa faele efe kapa efe e sebetsang e amohelang khang e le 'ngoe --config mme e araba ka JSON. Ea morao-rao e etsa qeto ea hore na ke lintho life tse khahlisang ho eona le hore na ke liketsahalo life (bakeng sa lintho tsena) tse lokelang ho arajoa:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ke tla bontša ts'ebetsong ho shell-operator ea e 'ngoe ea mehlala ea rona - liphiri tse senyang bakeng sa ho fumana ngoliso ea poraefete ka litšoantšo tsa kopo. E na le mekhahlelo e 'meli.

Itloaetse: 1. Ngola hoko

Pele ho tsohle, ka hook re tla sebetsa --config, e bontšang hore re thahasella libaka tsa mabitso, 'me ka ho khetheha, nako ea ho thehoa ha tsona:

[[ $1 == "--config" ]] ; then
  cat << EOF
{
  "onKubernetesEvent": [
    {
      "kind": "namespace",
      "event": ["add"]
    }
  ]
}
EOF
…

Mokhoa oa ho nahana o ne o tla shebahala joang? Hape e bonolo haholo:

…
else
  createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
  kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi

Mohato oa pele ke ho fumana hore na ke sebaka sefe sa mabitso se entsoeng, 'me sa bobeli ke ho se etsa ho sebelisoa kubectl sephiri sa sebaka sena sa mabitso.

Itloaetse: 2. Ho bokella setšoantšo

Sohle se setseng ke ho fetisetsa hook e entsoeng ho khetla-opereishene - ho etsa see joang? Shell-operator ka boeona e tla e le setšoantšo sa Docker, kahoo mosebetsi oa rona ke ho kenyelletsa hook bukeng e khethehileng setšoantšong sena:

FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks

Ho setseng ke ho e kopanya le ho e sutumelletsa:

$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1

Taba ea ho qetela ke ho tsamaisa setšoantšo ho sehlopha. Ho etsa sena, ha re ngoleng dulang:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-operator
spec:
  template:
    spec:
      containers:
      - name: my-operator
        image: registry.example.com/my-operator:v1 # 1
      serviceAccountName: my-operator              # 2

Ho na le lintlha tse peli tseo u lokelang ho li ela hloko:

  1. pontšo ea setšoantšo se sa tsoa bōptjoa;
  2. Ena ke karolo ea tsamaiso eo (bonyane) e hlokang litokelo tsa ho ngolisa liketsahalong tsa Kubernetes le ho fana ka liphiri ho libaka tsa mabitso, kahoo re theha ServiceAccount (le sete sa melao) bakeng sa hook.

Sephetho - re rarolotse bothata ba rona beng ka bona bakeng sa Kubernetes ka tsela e etsang opareitara bakeng sa ho senya liphiri.

Likarolo tse ling tsa li-shell-operator

Ho fokotsa lintho tsa mofuta oo u o khethileng tseo hook e tla sebetsa le tsona, li ka tlhotloa, ho khetha ho latela lileibole tse itseng (kapa ho sebelisa matchExpressions):

"onKubernetesEvent": [
  {
    "selector": {
      "matchLabels": {
        "foo": "bar",
       },
       "matchExpressions": [
         {
           "key": "allow",
           "operation": "In",
           "values": ["wan", "warehouse"],
         },
       ],
     }
     …
  }
]

Fanetsoe mochine oa deduplication, e leng - ho sebelisa jq filter - e u lumella ho fetola lintho tse kholo tsa JSON hore e be tse nyenyane, moo ho setseng li-parameter tseo re batlang ho li beha leihlo bakeng sa liphetoho.

Ha hook e bitsoa, ​​shell-operator ea e fetisa data ya ntho, e ka sebelisoang bakeng sa tlhoko leha e le efe.

Liketsahalo tse hlahisang li-hook ha li felle feela liketsahalong tsa Kubernetes: shell-operator e fana ka tšehetso bakeng sa ho bitsa dihoko ka nako (e tšoanang le crontab ho kemiso ea setso), hammoho le ketsahalo e khethehileng onStartup. Liketsahalo tsena kaofela li ka kopanngoa le ho abeloa hook e le 'ngoe.

Le likarolo tse ling tse peli tsa shell-operator:

  1. Ea sebetsa asynchronously. Kaha ketsahalo ea Kubernetes (e kang ntho e entsoeng) e ile ea amoheloa, liketsahalo tse ling (tse kang ntho e tšoanang e hlakotsoeng) li ka be li etsahetse sehlopheng, 'me li-hook li lokela ho ikarabella bakeng sa sena. Haeba hook e entsoe ka phoso, joale ka ho sa feleng e tla ba joalo letsa hape ho fihlela ho phethoa ka katleho (boitšoaro bona bo ka fetoloa).
  2. E romela kantle ho naha metrics bakeng sa Prometheus, eo ka eona u ka utloisisang hore na khetla-opereishene e sebetsa, fumana palo ea liphoso bakeng sa hook e 'ngoe le e' ngoe le boholo ba queue ea hona joale.

Ho akaretsa karolo ena ea tlaleho:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

E kenya lisebelisoa

Bakeng sa mosebetsi o motle le Kubernetes, tlhokahalo ea ho kenya li-add-on e boetse e boletsoe. Ke tla u bolella ka eona ke sebelisa mohlala oa tsela ea k'hamphani ea rona ho ea kamoo re e etsang hona joale.

Re ile ra qala ho sebetsa le Kubernetes ka lihlopha tse 'maloa, keketso feela eo e neng e le Ingress. E ne e hloka ho kenngoa ka tsela e fapaneng sehlopheng ka seng, 'me re entse litlhophiso tse' maloa tsa YAML bakeng sa libaka tse fapaneng: tšepe e se nang letho, AWS ...

Kaha ho ne ho e-na le lihlopha tse ngata, ho ne ho e-na le litlhophiso tse ngata. Ntle le moo, re ile ra ntlafatsa litlhophiso tsena ka botsona, ka lebaka leo li ileng tsa fetoha tse fapaneng haholo:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ho beha tsohle ka tatellano, re ile ra qala ka script (install-ingress.sh), e ileng ea nka e le khang ea mofuta oa sehlopha seo re tla isa ho sona, e hlahisitse tlhophiso e hlokahalang ea YAML mme ea e fetisetsa ho Kubernetes.

Ka bokhutšoanyane, tsela ea rona e tsoelang pele le mabaka a amanang le eona e ne e le a latelang:

  • ho sebetsa le meralo ea YAML, ho hlokahala enjene ea template (mehatong ea pele ena ke sed e bonolo);
  • ka keketseho ea palo ea lihlopha, tlhokahalo ea ho ntlafatsa ka mokhoa o itekanetseng e ile ea tla (tharollo ea pele e ne e le ho kenya script ho Git, ho e ntlafatsa ho sebelisa cron le ho e tsamaisa);
  • ho ne ho hlokahala mongolo o tšoanang bakeng sa Prometheus (install-prometheus.sh), leha ho le joalo, hoa hlokomeleha ka taba ea hore e hloka lintlha tse ngata tse kenyelletsoeng, hammoho le polokelo ea tsona (ka tsela e ntle - e bohareng le ka sehlopha), le lintlha tse ling (li-password) li ka hlahisoa ka bo eona:

    Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

  • kotsi ea ho ntša ntho e fosahetseng ho palo e ntseng e eketseha ea lihlopha e ne e ntse e eketseha, kahoo re ile ra hlokomela hore li-installers (ke hore, mangolo a mabeli: bakeng sa Ingress le Prometheus) ho ne ho hlokahala staging (makala a 'maloa a Git, li-crons tse' maloa ho li ntlafatsa ka tsela e lumellanang: lihlopha tse tsitsitseng kapa tsa liteko);
  • с kubectl apply ho se ho le thata ho sebetsa le eona hobane ha e phatlalatse ebile e ka etsa lintho feela, empa e sa etse liqeto ka boemo ba tsona / ho li hlakola;
  • Re ne re haelloa ke mesebetsi e meng eo re neng re sa e sebelisa ho hang ka nako eo:
    • taolo e felletseng holim'a sephetho sa lintlafatso tsa sehlopha,
    • boikemisetso ba othomathiki ba liparamente tse ling (kenyelletso bakeng sa lingoloa tsa ho kenya) ho ipapisitse le data e ka fumanoang ho tsoa sehlopheng (ho sibolloa),
    • tsoelo-pele ea eona e utloahalang ka mokhoa oa ho sibolloa ho tsoelang pele.

Re sebelisitse boiphihlelo bona bo bokelletsoeng ka har'a moralo oa morero oa rona o mong - addon-opereta.

Sesebediswa sa Addon

E thehiloe holim'a khetla e seng e boletsoe. Sisteme eohle e shebahala tjena:

Lintlha tse latelang li eketsoa ho li-hook tsa li-shell-operator:

  • boleng polokelo,
  • Chate ea helm,
  • karolo eo e hlokomela boleng ba polokelo mme - ha ho ka ba le diphetoho - o kopa Helm ho phutha chate hape.

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ka hona, re ka itšoara ketsahalong ea Kubernetes, ra qala hook, 'me ho tloha hook ena re ka etsa liphetoho ho polokelo, ka mor'a moo chate e tla khoasolloa hape. Setšoantšong se hlahisoang, re arola lihlopha tsa li-hook le chate ka karolo e le 'ngoe, eo re e bitsang mojule:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Ho ka ba le li-module tse ngata, 'me ho tsona re kenyelletsa li-hook tsa lefats'e, lebenkele la boleng ba lefats'e, le karolo e hlokomelang lebenkele lena la lefats'e.

Joale, ha ho etsahala ho hong ho Kubernetes, re ka e arabela ka ho sebelisa hook ea lefats'e mme ra fetola ho hong lebenkeleng la lefats'e. Phetoho ena e tla hlokomeloa 'me e tla etsa hore li-module tsohle tse ka har'a sehlopha li kenngoe:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Morero ona o khotsofatsa litlhoko tsohle tsa ho kenya li-add-on tse boletsoeng ka holimo:

  • Helm e ikarabella bakeng sa ho etsa templating le declarativeness.
  • Taba ea ho intlafatsa ka boits'oaro e ile ea rarolloa ho sebelisoa hook ea lefats'e, e eang ho registry ka kemiso 'me, haeba e bona setšoantšo se secha sa tsamaiso moo, e e ntša (e leng "ka boeona").
  • Ho boloka litlhophiso ka har'a sehlopha ho kengoa tšebetsong ConfigMap, e nang le lintlha tsa mantlha tsa polokelo (ha e qala li kenngoa ka har'a polokelo).
  • Mathata a ho hlahisa li-password, ho sibolla le ho sibolla ho tsoelang pele a ile a rarolloa ho sebelisoa lihoko.
  • Staging e finyelloa ka li-tag, tseo Docker e li tšehetsang ka ntle ho lebokose.
  • Sephetho se beoa leihlo ho sebelisoa metrics eo ka eona re ka utloisisang boemo.

Sistimi ena kaofela e sebelisoa ka mokhoa oa binary e le 'ngoe ho Go, e bitsoang addon-operator. Sena se etsa hore setšoantšo se shebahale se le bonolo:

Ho holisa le ho tlatsa Kubernetes (tlhahlobo le tlaleho ea video)

Karolo e ka sehloohong setšoantšong sena ke sete ea li-module (e totobalitsoe ka bohlooho ka tlase). Hona joale re ka ngola mojule bakeng sa tlatsetso e hlokahalang ka boiteko bo fokolang mme re be le bonnete ba hore e tla kenngoa sehlopheng ka seng, e tla nchafatsoa le ho arabela liketsahalong tseo e li hlokang sehlopheng.

Lisebelisoa tsa "Flant". addon-opereta ho lihlopha tse 70+ tsa Kubernetes. Boemo ba hajoale - phetolelo ea alpha. Hona joale re ntse re lokisa litokomane tsa ho lokolla beta, empa hajoale sebakeng sa polokelo mehlala e teng, motheong oa hore u ka iketsetsa addon ea hau.

Nka fumana li-module tsa addon-operator hokae? Ho hatisa laeborari ea rona ke mohato o latelang ho rona; re rera ho etsa sena hlabula.

Lifitio le li-slide

Video ea tšebetso (~ metsotso e 50):

Tlhahiso ea tlaleho:

PES

Litlaleho tse ling ho blog ea rona:

U ka boela ua thahasella lingoliloeng tse latelang:

Source: www.habr.com

Eketsa ka tlhaloso