Kubernetese 10 parimat nippi ja näpunäidet

Kubernetese 10 parimat nippi ja näpunäidet

Internetis on palju teatmekirjandust, kuid mõnikord on kõige lihtsamad nõuanded kõige väärtuslikumad. Meeskond Kubernetes aaS saidilt Mail.ru tõlgitud valik kümnest nipist ja nipist, mille artikli autor kogus pärast aastast koostööd Kubernetesega. Näpunäiteid ei sorteerita tähtsuse järgi, kuid arvame, et igaüks leiab endale midagi kasulikku.

Lihtsaim käsk Kubernetesiga töötamiseks

Alustuseks võib-olla kõige lihtsam ja kasulikum toiming Kubernetesega töötamisel. Järgmine käsk võimaldab käsu lõpetamist kubectl bash shellis:

echo "source <(kubectl completion bash)" >> ~/.bashrc

Automaatne lõpetamine kubectl kirjutatakse .bashrc faili ja aktiveeritakse automaatselt iga kord, kui shell käivitatakse. See kiirendab pikkade käskude ja parameetrite tippimist nagu all-namespaces. Loe lähemalt sisse Kubernetes bashi abi.

Nimeruumi vaikemälu ja protsessori piirangud

Kui rakendus on valesti kirjutatud, näiteks avab iga sekundi tagant uue ühenduse andmebaasiga, kuid ei sulge seda kunagi, siis on klastris mäluleke. Ja kui rakendusel ei ole juurutamise ajal määratud mälupiirangut, võib see põhjustada sõlme rikke.

Selle vältimiseks võimaldab Kubernetes määrata vaikepiiranguid nimeruumipõhiselt. Need on kirjutatud yamli faili konkreetse nimeruumi jaoks. Siin on näide sellisest failist:

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

Looge selline yaml ja rakendage seda mis tahes nimeruumis. Näiteks nimeruumi limit-example. Nüüd on mis tahes selles nimeruumis juurutatud konteineri limiit 512 Mi, välja arvatud juhul, kui sellele konteinerile on lisaks määratud muud individuaalset limiiti.

Prügikoristus Kubernetese vanemates versioonides

Kubelet alustab vaikimisi prügikoristust millal var/lib/docker hõivab 90% vabast kettaruumist. See on aga suurepärane, kuni Kubernetes 1.7-ni ei olnud kasutatud inoodide arvul vaikimisi piirangut, mis vastab failisüsteemis olevate failide arvule.

Võimalik, et teie konteiner var/lib/docker võib kasutada ainult 50% kettaruumist, kuid inoodid võivad otsa saada, mis põhjustab töötajatele probleeme.

Kubeleti vanemates versioonides 1.4 kuni 1.6 peate lisama selle lipu:

--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%

1.7 ja uuemates versioonides on see lipp vaikimisi seatud. Varasemad versioonid aga inode limiiti ei jälgi.

Minikube... väike, kuid võimas kohalik Kubernetes

Minikube on lihtsaim viis kohaliku Kubernetese klastri käitamiseks. See käivitatakse lihtsa käsuga:

minikube start

Selle käsu käivitamisel töötab teie masinas tõeline Kubernetese klaster.

Kubernetese 10 parimat nippi ja näpunäidet
Illustratsiooni allikas

Trikk seisneb selles, kuidas rakendust luua ja selles klastris kohapeal käitada. Kui pole konkreetset juhist, luuakse Dockeri pilt teie arvutis, mitte klastris.

Dockeri sundimiseks lükkama pilti kohalikku Kubernetese klastrisse, antakse dokkimismasinale järgmine käsk:

eval $(minikube docker-env)

Nüüd saame luua rakendusi kohalikule Kubernetese klastrile.

Ärge andke kubectlile juurdepääsu kõigile

See tundub ilmselge, kuid kui mitu meeskonda kasutavad oma rakenduste jaoks sama klastrit (selleks Kubernetes loodi), ei tohiks te lihtsalt kõigile anda kubectl. Parem on käsud eraldada, määrates neile igaühele oma nimeruumi ja piirates juurdepääsu RBAC-poliitikate abil.

Võite segadusse sattuda, kui määrate igale kaustale juurdepääsu, lugemise, loomise, kustutamise ja muude toimingute õigused. Kuid peamine on piirata juurdepääsu saladustele, võimaldades seda ainult administraatoritele. Nii teeme vahet neil, kes saavad klastrit hallata, ja neil, kes saavad sellesse lihtsalt juurutada.

Hallake Podi eelarveid

Kuidas tagada Kubernetese klastris oleva rakenduse tööseisaku puudumine? PodDisruptionBudget ja jälle PodDisruptionBudget.

Klastreid värskendatakse perioodiliselt ja sõlmed tühjendatakse. Miski ei seisa paigal, see on reaalsus. Iga juurutus, millel on rohkem kui üks eksemplar, peaks sisaldama esialgset eelarveprojekti (PodDisruptionBudget). See luuakse lihtsas yaml-failis, mida rakendatakse klastrile. Konkreetse esialgse eelarveprojekti katvusala määratakse etiketivalijatega.

Märkus: Esialgse eelarveprojekti eelarvet võetakse arvesse ainult siis, kui eelarve rikkumine on pöörduv (vabatahtlik katkestamine). Sellistes olukordades nagu riistvararikked, esialgne eelarveprojekt ei tööta.

Esialgse eelarveprojekti näide:

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

Kaks peamist parameetrit on matchLabels и minAvailable. Esimene parameeter määrab, millistele rakendustele eelarve kehtib. Näiteks kui mul on siltidega juurutusi app: app-a и app: app-b, siis see esialgne eelarveprojekt kehtib ainult esimesele.

Parameeter minAvailable sõlme tühjendamisel (puhastamisel) arvesse võtta. Näiteks meie näites tõstetakse tühjendamise ajal kõik instantsid välja app: app-a, välja arvatud kaks.

See võimaldab teil kontrollida, mitu rakenduse eksemplari peaks igal ajahetkel töötama.

Rakenduse tervise jälgimine

Selline jälgimine on võimalik kahel viisil: kasutades valmisoleku või elavuse teste.

Esimene sond (valmidus) määrab konteineri valmisoleku liiklust vastu võtta.

Teine (elavus) näitab, kas konteiner on terve või vajab taaskäivitamist.

Asjakohased konfiguratsioonid lisatakse juurutamiseks lihtsalt yamli. Seal saate määrata ajalõpe, viivitusaegu ja korduskatsete arvu. Vaadake nende kohta rohkem üksikasju Kubernetese dokumentatsioon.

Sildid on kõikjal

Sildid on Kubernetese üks põhimõisteid. Need võimaldavad objektidel vabalt üksteisega suhelda, samuti luua siltide põhjal päringuid. Kuberneteses saate isegi minna kliendi juurde ja vaadata konkreetsete siltide jaoks sündmusi.

Siltide abil saate teha peaaegu kõike, kuid hea näide oleks mitme keskkonna loomine programmide käitamiseks samas klastris.

Oletame, et kasutate sama klastri jaoks dev и qa. See tähendab, et teil võib olla rakendus app-a, töötades samaaegselt mõlemas keskkonnas qa и dev. Sel juhul saame konkreetses keskkonnas rakenduse eksemplarile eraldi juurde pääseda, määrates vastava parameetri environment. Näiteks app: app-a и environment: dev ühe keskkonna jaoks ja app: app-a и environment: qa teise jaoks.

See võimaldab teil pääseda juurde mõlemale rakenduse eksemplarile, näiteks testimise üheaegseks läbiviimiseks.

Pange asjad korda

Kubernetes on väga võimas süsteem, kuid iga süsteem võib lõpuks liiga paljude protsesside tõttu takerduda. Kubelet käitab kõiki teie määratud protsesse ja kontrolle, aga ka enda oma.

Loomulikult ei aeglusta üks orvuks jäänud teenus süsteemi ja Kubernetes on loodud mastaapima juba maast madalast. Aga kui ühe teenuse asemel ilmub miljon, hakkab kubelet lämbuma.

Kui kustutate mingil põhjusel juurutuse (konteiner, pilt või mis iganes), tehke lihtsalt täielik puhastus.

Saage tuttavaks Go

Peamised nõuanded jätsime viimaseks. Õppige Go programmeerimiskeelt.

Kubernetes on välja töötatud Go-s, kõik laiendused on kirjutatud Go-s ja ametlikult toetatakse ka klient-go klienditeeki.

Seda saab kasutada erinevate ja huvitavate asjade jaoks. Näiteks Kubernetese süsteemi laiendamiseks oma maitse järgi. Seega saate andmete kogumiseks, rakenduste juurutamiseks või lihtsalt konteinerite puhastamiseks kasutada oma programme.

Go programmeerimiskeele õppimine ja client-go valdamine on ehk kõige olulisem nõuanne, mida saate uutele Kubernetese kasutajatele anda.

Tõlgitud Mail.ru pilvelahenduste toel

Mida muud lugeda:

  1. Kolm automaatse skaleerimise taset Kubernetes ja kuidas neid tõhusalt kasutada.
  2. Kubernetese töötaja sõlmed: palju väikeseid või vähe suuri?
  3. 25 kasulikku tööriista Kubernetese juurutamiseks ja haldamiseks.

Allikas: www.habr.com

Lisa kommentaar