Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

8 Aprily tamin'ny fihaonambe Saint HighLoad++ 2019, ao anatin'ny fizarana "DevOps and Operations", nisy tatitra "Fitarana sy famenoana Kubernetes" nomena, tamin'ny famoronana izay nandraisan'ny mpiasa telo tao amin'ny orinasa Flant. Ao anatin'izany dia miresaka toe-javatra maro izay tiantsika hanitarana sy hamenoana ny fahaizan'ny Kubernetes, saingy tsy nahita vahaolana vonona sy tsotra. Manana ny vahaolana ilaina amin'ny endrika tetikasa Open Source izahay, ary natokana ho azy ireo ihany koa ity kabary ity.

Araka ny fomban-drazana dia faly izahay manolotra video ny tatitra (50 minitra, be fanazavana kokoa noho ny lahatsoratra) sy ny famintinana lehibe amin'ny endrika lahatsoratra. Mandehana!

Core sy fanampiny ao amin'ny K8s

Kubernetes dia manova ny indostria sy ny fomba fiasa amin'ny fitantanana izay efa naorina hatry ny ela:

  • Misaotra azy abstractions, tsy miasa amin'ny foto-kevitra toy ny fametrahana config na fampandehanana baiko (Chef, Ansible...) intsony izahay, fa mampiasa fanakambanana kaontenera, serivisy, sns.
  • Afaka manomana fampiharana tsy mieritreritra momba ny nuances ny tranokala manokana, izay hanombohana azy: metaly miboridana, rahon'ny iray amin'ireo mpamatsy, sns.
  • Miaraka amin'ny K8s dia tsy mbola azo idirana kokoa ianao fomba fanao tsara indrindra amin'ny fikarakarana fotodrafitrasa: teknika scaling, fanasitranan-tena, fandeferana ny fahadisoana, sns.

Na izany aza, mazava ho azy, tsy dia milamina loatra ny zava-drehetra: nitondra fanamby vaovao manokana ihany koa i Kubernetes.

Kubernetes tsy dia fitambarana mamaha ny olan'ny mpampiasa rehetra. fototra Kubernetes dia tsy tompon'andraikitra afa-tsy amin'ny andiana asa ilaina kely indrindra izay misy ao rehetra cluster:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Ny fototra Kubernetes dia mamaritra andiana fototra fototra ho an'ny fanakambanana kaontenera, fitantanana ny fifamoivoizana, sns. Niresaka momba azy ireo tamin'ny antsipiriany bebe kokoa izahay tatitra 2 taona lasa izay.

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Amin'ny lafiny iray, ny K8s dia manolotra fahafahana lehibe hanitarana ireo fiasa misy, izay manampy amin'ny fanakatonana ny hafa - manokana - filan'ny mpampiasa. Ny fanampin'ny Kubernetes dia andraikitry ny administratera cluster, izay tsy maintsy mametraka sy manitsy ny zava-drehetra ilaina mba hahatonga azy ireo β€œamin'ny endriny mety” [mba hamahana ny olan'izy ireo manokana]. Karazana fanampim-panampiana inona ireo? Andeha isika hijery ohatra vitsivitsy.

Ohatra amin'ny add-ons

Rehefa nametraka Kubernetes isika, dia mety ho gaga isika fa tsy mandeha irery ny tambajotra izay tena ilaina amin'ny fifandraisan'ny pods ao anaty node na eo anelanelan'ny node. Ny kernel Kubernetes dia tsy miantoka ny fifandraisana ilaina fa izy no mamaritra ny tambajotra interface tsara (CNI) ho an'ny add-on an'ny antoko fahatelo. Tsy maintsy mametraka ny iray amin'ireo fanampim-panampiana ireo isika, izay ho tompon'andraikitra amin'ny fikirakirana tambajotra.

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Ohatra akaiky ny vahaolana fitahirizana angon-drakitra (kapila eo an-toerana, fitaovana fanakanana tambajotra, Ceph...). Tamin'ny voalohany dia tao amin'ny fototra izy ireo, saingy tamin'ny fahatongavana CSI ny toe-javatra dia miova amin'ny zavatra mitovy amin'ilay efa voalaza: ao amin'ny Kubernetes ny interface, ary amin'ny maody an'ny antoko fahatelo ny fampiharana azy.

Misy ohatra hafa:

  • Ingress- mpifehy (jereo ny fanadihadian'izy ireo ao amin'ny ny lahatsoratray vao haingana).
  • mpitantana fanamarinana:

    Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

  • mpandraharaha dia kilasin'ny add-ons (izay ahitana ny cert-manager), izy ireo no mamaritra ny primitive (s) sy ny controller(s). Ny lojikan'ny asan'izy ireo dia voafetra ihany amin'ny alΓ lan'ny eritreritsika ary mamela antsika hamadika ireo singa fotodrafitrasa efa vita (ohatra, DBMS) ho lasa primitives, izay mora kokoa ny miasa (fa tsy miaraka amin'ny kaontenera sy ny toe-javatra misy azy). Betsaka ny mpandraharaha efa voasoratra - na dia maro amin'izy ireo aza no mbola tsy vonona amin'ny famokarana, dia fotoana fohy ihany izany:

    Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

  • mari-pandrefesana - fanoharana iray hafa momba ny fomba nanasarahan'i Kubernetes ny interface (Metrics API) tamin'ny fampiharana (fanampiana hafa toy ny Prometheus adapter, Datadog cluster agent...).
  • ho an'ny fanaraha-maso sy antontan'isa, izay tsy ilaina fotsiny amin'ny fampiharana Prometheus sy Grafana, fa koa ny kube-state-metrics, node-exporter, sns.

Ary tsy lisitra feno fanampiny izany ... Ohatra, ao amin'ny orinasa Flant izay apetrakay amin'izao fotoana izao 29 fanampiny (izay mamorona zavatra Kubernetes 249 rehetra). Raha tsorina dia tsy afaka mahita ny fiainan'ny cluster isika raha tsy misy fanampiny.

automatique

Ny operatera dia natao ho azy ny asa mahazatra izay sendra antsika isan'andro. Ireto misy ohatra tena misy izay mety ho vahaolana tsara indrindra ny fanoratana mpandraharaha:

  1. Misy rejisitra manokana (izany hoe mila fidirana) misy sary ho an'ny fampiharana. Heverina fa ny pod tsirairay dia nomena tsiambaratelo manokana izay mamela ny fanamarinana ao amin'ny rejisitra. Ny andraikitray dia ny miantoka fa hita ao amin'ny namespace ity tsiambaratelo ity mba ahafahan'ny pods misintona sary. Mety misy fampiharana be dia be (izay mila tsiambaratelo ny tsirairay), ary ilaina ny manavao ny tsiambaratelo tsy tapaka, noho izany dia esorina ny safidy amin'ny fametrahana tsiambaratelo amin'ny tanana. Eo no tonga hamonjy ny operatera: mamorona mpanara-maso izay hiandry ny fisehoan'ny namespace ary, mifototra amin'ity hetsika ity, dia hanampy tsiambaratelo amin'ny namespace.
  2. Avelao amin'ny alΓ lan'ny default ny fidirana amin'ny pods mankany amin'ny Internet dia voarara. Saingy indraindray dia mety ilaina izany: mitombina ny fiasan'ny rafitra fahazoan-dΓ lana hidirana, tsy mila fahaiza-manao manokana, ohatra, amin'ny fisian'ny etikety iray ao amin'ny namespace. Ahoana no ahafahan'ny mpandraharaha manampy antsika eto? Namboarina ny mpanara-maso iray izay miandry ny fisehoan'ny etikety ao amin'ny namespace ary manampy ny politika mifanaraka amin'ny fidirana amin'ny Internet.
  3. Toe-javatra mitovy amin'izany: eritrereto hoe mila manampy iray isika handova, raha misy marika mitovy aminy (miaraka amin'ny karazana prefix). Mibaribary ny hetsika iarahana amin’ny mpandraharaha...

Amin'ny cluster rehetra dia tsy maintsy voavaha ny asa mahazatra, ary tsara azo atao amin'ny alalan'ny operateurs izany.

Raha fintinina ny tantara rehetra voalaza, dia tonga tamin'ny famaranana izahay ho an'ny asa mahazo aina ao Kubernetes ilainao: A) mametraka add-ons, b) mampivelatra ny mpandraharaha (ho famahana ny asan'ny admin isan'andro).

Ahoana ny fanoratana fanambarana ho an'ny Kubernetes?

Amin'ny ankapobeny, ny drafitra dia tsotra:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

...fa avy eo dia hita hoe:

  • Ny Kubernetes API dia zavatra tsy dia misy dikany loatra izay mitaky fotoana betsaka hifehezana azy;
  • Tsy natao ho an'ny rehetra ihany koa ny fandaharana (ny fiteny Go no nofidiana ho fiteny tiana satria misy rafitra manokana ho azy - Operator SDK);
  • Mitovy amin'ilay rafitra mihitsy ny zava-misy.

Fehiny: hanoratra controller (operator) tsy maintsy mandany vola be mianatra fitaovana. Hamarinina ho an'ny mpandraharaha "lehibe" izany - lazao, ho an'ny MySQL DBMS. Saingy raha tadidintsika ireo ohatra voalaza etsy ambony (famoahana tsiambaratelo, fidirana amin'ny pods amin'ny Internet ...), izay tiantsika hatao tsara ihany koa, dia ho takatsika fa ny ezaka lany dia mihoatra ny vokatra ilaintsika ankehitriny:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Amin'ny ankapobeny dia misy olana mitranga: mandany loharanon-karena be dia be ary mitadiava fitaovana mety amin'ny fanoratana fanambarana, na ataovy amin'ny fomba taloha (fa haingana). Mba hamahana izany - mba hahitana marimaritra iraisana eo amin'ireo tafahoatra ireo - namorona ny tetikasanay manokana izahay: shell-operator (Jereo koa ny fanambarana vao haingana amin'ny hub).

Shell-operator

Ahoana no fiasana? Ny cluster dia manana pod misy go binary miaraka amin'ny shell-operator. Eo akaikiny dia misy andiana fihantonana (tsipiriany bebe kokoa momba azy ireo - jereo eto ambany). Ny shell-operator mihitsy no misoratra anarana amin'ny sasany zava-mitranga ao amin'ny Kubernetes API, rehefa manokatra ny hooks mifanaraka amin'izany izy.

Ahoana no ahafantaran'ny mpikirakira akorandriaka hoe iza amin'ireo hook no hiantsoana ireo hetsika? Ity fampahalalana ity dia ampitaina amin'ny mpandrafitra akorandriaka amin'ny alΓ lan'ny fantsika, ary manao izany izy ireo.

Ny hook dia script Bash na rakitra hafa azo tanterahina izay manaiky hevitra tokana --config ary mamaly amin'ny JSON. Ity farany no mamaritra hoe inona no zavatra mahaliana azy ary inona no hetsika (ho an'ireo zavatra ireo) tokony hovaliana:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Hasehoko an-tsary ny fampiharana amin'ny shell-operator amin'ny iray amin'ireo ohatra ataontsika - misoroka tsiambaratelo amin'ny fidirana amin'ny rejisitra manokana miaraka amin'ny sary fampiharana. Misy dingana roa izany.

Fanao: 1. Manorata farango

Voalohany indrindra, ao amin'ny hook no hokarakaraintsika --config, izay manondro fa liana amin'ny toerana misy anarana izahay, ary indrindra indrindra, ny fotoana namoronana azy:

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

Hanao ahoana ny lojika? Tsotra ihany koa:

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

Ny dingana voalohany dia ny mamantatra hoe iza no namespace noforonina, ary ny faharoa dia ny famoronana azy amin'ny fampiasana kubectl tsiambaratelo ho an'ity toerana misy anarana ity.

Fanazaran-tena: 2. Manangona ny sary

Ny hany sisa tavela dia ny fampitana ny hook noforonina amin'ny shell-operator - ahoana no hanaovana izany? Ny shell-operator dia tonga amin'ny sarin'ny Docker, ka ny andraikitray dia ny manampy ny hook amin'ny lahatahiry manokana amin'ity sary ity:

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

Ny hany sisa tavela dia ny manangona azy ary manosika azy:

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

Ny fikitihana farany dia ny fametrahana ny sary amin'ny cluster. Mba hanaovana izany, andao hanoratra fanapariahana:

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

Misy teboka roa tokony hojerena:

  1. famantarana ny sary vao noforonina;
  2. Ity dia singa rafitra izay (farafaharatsiny) mila zo hisoratra anarana amin'ny hetsika ao amin'ny Kubernetes sy hanokana tsiambaratelo ho an'ny espace, ka mamorona ServiceAccount (sy fitsipika maromaro) ho an'ny hook.

Vokany - namaha ny olanay izahay HAVANA ho an'ny Kubernetes amin'ny fomba iray izay mamorona mpandraharaha amin'ny fanimbana tsiambaratelo.

Ny endri-javatra hafa shell-operator

Mba hamerana ny zavatra amin'ny karazana nofidinao izay hiasa amin'ny hook, azo sivana izy ireo, mifantina araka ny etikety sasany (na mampiasa matchExpressions):

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

nanome mekanika deduplication, izay - mampiasa sivana jq - mamela anao hamadika zavatra JSON lehibe ho lasa kely, izay tsy misy afa-tsy ireo mason-tsivana izay tiantsika hojerena raha misy fiovana.

Rehefa antsoina ny hook, dia mandalo azy ny mpandefa akorandriaka angona zavatra, izay azo ampiasaina amin'ny filana rehetra.

Tsy voafetra amin'ny hetsika Kubernetes ihany ny hetsika miteraka fihokoana: manome fanohanana ny shell-operator miantso hook amin'ny fotoana (mitovy amin'ny crontab amin'ny fandaharam-potoana mahazatra), ary koa hetsika manokana onStartup. Ireo hetsika rehetra ireo dia azo atambatra ary apetraka amin'ny hook iray ihany.

Ary endri-javatra roa hafa amin'ny shell-operator:

  1. Mety io asynchronously. Satria nisy hetsika Kubernetes (toy ny zavatra noforonina) voaray, dia mety nisy hetsika hafa (toy ny zavatra voafafa ihany) tao amin'ny cluster, ary mila mitantana izany ny hooks. Raha nisy hadisoana notanterahina ny hook, dia ho toy izany ny default antso indray mandra-pahavitan'ny fahombiazana (azo ovaina io fihetsika io).
  2. Manondrana izany mari-pandrefesana ho an'ny Prometheus, izay ahafahanao mahafantatra raha miasa ny shell-operator, fantaro ny isan'ny lesoka isaky ny hook sy ny haben'ny filaharana ankehitriny.

Mba hamintinana ity ampahany amin'ny tatitra ity:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Fametrahana fanampiny

Ho an'ny asa mampahazo aina miaraka amin'i Kubernetes dia voalaza ihany koa fa ilaina ny fametrahana add-ons. Hilaza aminareo momba izany aho amin'ny fampiasana ny ohatry ny lalan'ny orinasanay amin'ny fomba anaovanay izany ankehitriny.

Nanomboka niara-niasa tamin'ny Kubernetes niaraka tamin'ny cluster maromaro izahay, ny hany fanampin'izany dia Ingress. Mila apetraka amin'ny fomba hafa amin'ny cluster tsirairay izy io, ary nanao fanitsiana YAML maromaro ho an'ny tontolo samihafa izahay: metaly miboridana, AWS...

Noho ny fisian'ny cluster bebe kokoa, dia nisy ny fanamafisana bebe kokoa. Ho fanampin'izay, nohatsarainay ihany koa ireo fanamafisam-peo ireo, ka nanjary tsy mitovy izy ireo:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Mba handaminana ny zava-drehetra dia nanomboka tamin'ny script izahay (install-ingress.sh), izay nandray ho toy ny tohan-kevitra momba ny karazana cluster izay hapetrakay, dia niteraka ny YAML configuration ilaina ary nanakodia izany ho any Kubernetes.

Raha fintinina, ny lalantsika fanampiny sy ny hevitra mifandray amin'izany dia toy izao manaraka izao:

  • mba hiasa amin'ny YAML configurations dia ilaina ny mΓ΄tera mΓ΄dely (amin'ny dingana voalohany dia tsotra izany);
  • miaraka amin'ny fitomboan'ny isan'ny cluster dia tonga ny filana fanavaozana mandeha ho azy (ny vahaolana voalohany dia ny fametrahana ny script ao amin'ny Git, manavao azy amin'ny cron ary mampandeha azy);
  • Nitaky script mitovy amin'izany ny Prometheus (install-prometheus.sh), na izany aza, marihina fa mitaky angon-drakitra misimisy kokoa, ary koa ny fitehirizana azy ireo (amin'ny fomba tsara - afovoany sy ao anaty cluster), ary ny angona sasany (tenimiafina) dia mety ho voavolavola ho azy:

    Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

  • nitombo tsy an-kijanona ny mety hisian'ny zavatra tsy mety amin'ny cluster, ka tsikaritray fa ny installers (izany hoe script roa: ho an'ny Ingress sy Prometheus) nilaina ny filaharana (sampana maromaro ao amin'ny Git, crons maromaro hanavao azy ireo amin'ny mifanaraka amin'izany: kluster stable na fitsapana);
  • с kubectl apply lasa sarotra ny miasa satria tsy declarative ary afaka mamorona zavatra fotsiny, fa tsy mandray fanapahan-kevitra momba ny satany / mamafa azy;
  • Tsy ampy ny fiasa sasany izay tsy mbola nampiharina tamin'izany fotoana izany:
    • fanaraha-maso tanteraka ny vokatry ny fanavaozana cluster,
    • famaritana mandeha ho azy ny masontsivana sasany (fampidirana ho an'ny script fametrahana) mifototra amin'ny angona azo avy amin'ny cluster (fikarohana),
    • ny fivoarany lojika amin'ny endrika fitadiavana mitohy.

Nampihatra ireo traikefa nanangona rehetra ireo izahay tao anatin'ny rafitry ny tetikasanay hafa - addon-operator.

Addon-operator

Izy io dia mifototra amin'ny shell-operator efa voalaza. Toy izao ny rafitra manontolo:

Ity manaraka ity dia ampiana amin'ny hooks-operator shell:

  • fitahirizana soatoavina,
  • Sarin'ny familiana,
  • component izay manara-maso ny fivarotana soatoavina ary - raha misy fiovana - dia mangataka an'i Helm hamerina ny tabilao.

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Noho izany, afaka maneho fihetseham-po amin'ny hetsika iray ao amin'ny Kubernetes isika, manangana hook, ary avy amin'ity hook ity dia afaka manova ny fitahirizana, aorian'izay dia haverina indray ny tabilao. Ao amin'ny kisary aterak'izany, dia manasaraka ny fitambaran'ny hooks sy ny tabilao ho singa iray, izay antsoinay Module:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Mety misy mΓ΄dely maro, ary ampianay ny hooks eran-tany, fivarotana soatoavina manerantany, ary singa iray manara-maso an'ity fivarotana manerantany ity.

Ankehitriny, rehefa misy zava-mitranga ao amin'ny Kubernetes, dia afaka mamaly izany amin'ny alalan'ny fihokoana manerantany isika ary manova zavatra ao amin'ny fivarotana manerantany. Ho tsikaritra io fiovana io ary hahatonga ny modules rehetra ao amin'ny kluster hivoaka:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Ity rafitra ity dia mahafeno ny fepetra rehetra amin'ny fametrahana add-ons voalaza etsy ambony:

  • Ny Helm dia tompon'andraikitra amin'ny templating sy ny fanambarana.
  • Ny olana momba ny fanavaozana mandeha ho azy dia voavaha tamin'ny alΓ lan'ny hook manerantany, izay mandeha any amin'ny rejisitra amin'ny fandaharam-potoana ary, raha mahita sarin'ny rafitra vaovao ao izy, dia manodina azy (izany hoe "tena").
  • Ny fitehirizana fitehirizana ao amin'ny cluster dia ampiharina amin'ny fampiasana ConfigMap, izay ahitana ny angon-drakitra voalohany ho an'ny fitahirizana (amin'ny fanombohana dia ampidirina ao amin'ny fitahirizana izy ireo).
  • Ny olana amin'ny famoronana tenimiafina, ny fitadiavana ary ny fitadiavana mitohy dia voavaha tamin'ny fampiasana hooks.
  • Tanteraka ny filaharana noho ny marika, izay tohanan'i Docker ivelan'ny boaty.
  • Ny vokatra dia arahi-maso amin'ny fampiasana metrika izay ahafahantsika mahazo ny sata.

Ity rafitra manontolo ity dia ampiharina amin'ny endrika binary tokana ao amin'ny Go, izay antsoina hoe addon-operator. Izany dia mahatonga ny kisary ho tsotra kokoa:

Manitatra sy mameno ny Kubernetes (tatitra sy horonan-tsary)

Ny singa fototra amin'ity kisary ity dia andiana modules (asongadina amin'ny loko volondavenona etsy ambany). Ankehitriny isika dia afaka manoratra module ho an'ny fanampiny ilaina miaraka amin'ny ezaka kely ary azo antoka fa hapetraka ao amin'ny cluster tsirairay, dia havaozina sy mamaly ny hetsika ilainy ao amin'ny cluster.

Fampiasana "Flant". addon-operator amin'ny cluster Kubernetes 70+. Sata ankehitriny - version alpha. Ankehitriny dia manomana antontan-taratasy hamoahana ny beta izahay, fa amin'izao fotoana izao ao amin'ny tahiry ohatra misy, izay ahafahanao mamorona addon anao manokana.

Aiza no ahazoako ny modules ho an'ny addon-operator? Ny famoahana ny tranomboky no dingana manaraka ho anay; mikasa ny hanao izany izahay amin'ny fahavaratra.

Horonantsary sy sary mihetsika

Lahatsary avy amin'ny fampisehoana (~50 minitra):

Fampisehoana ny tatitra:

Sal

Tatitra hafa ao amin'ny bilaoginay:

Mety ho liana amin'ireto boky ireto koa ianao:

Source: www.habr.com

Add a comment