
Internetis on palju viidatud kirjandust, kuid mĂ”nikord on kĂ”ige vÀÀrtuslikumad just kĂ”ige lihtsamad soovitused. Meeskond tĂ”lkis , mille autor koostas aasta jooksul, töötades Kubernetes'ega. Soovitused ei ole tĂ€htsuse jĂ€rgi jĂ€rjestatud, kuid usume, et igaĂŒks leiab siit midagi kasulikku endale.
Lihtsaim kÀsk Kubernetes'i kasutamises
Alustuseks on vÔib-olla kÔige lihtsam ja kasulikum tegevus Kubernetes'i kasutamisel. JÀrgmine kÀsk aktiveerib kÀskude automaattÀiendamise kubectl bash'i terminalis:
echo "source > ~/ .bashrc
Automaatne tÀiendamine kubectl salvestatakse .bashrc faili ja aktiveeritakse automaatselt igal korral, kui terminal kÀivitatakse. See kiirendab pikkade kÀskude ja parameetrite, nagu all-namespacesLisaks leiate .
MÀlu ja CPU Ôigused vaikimisi nimel
Kui rakendus on valesti kirjutatud, nĂ€iteks avab iga sekundi jĂ€rel uue ĂŒhenduse andmebaasiga, kuid kunagi ei sulge seda, toimub klastris mĂ€lu lekke. Ja kui rakenduse juurutamisel pole mÀÀratud mĂ€lupiirangut, vĂ”ib see pĂ”hjustada sĂ”lme riket.
Ette vÀltimiseks vÔimaldab Kubernetes igas nimespetsiifiliselt mÀÀrata vaikimisi piirangud. Need kirjutatakse yml-faili, mis on seotud konkreetse nimespetsiifikaga. Siin on sellise faili nÀide:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
Looge selline yml-fail ja rakendage see igas nimespetsiifikas. NĂ€iteks nimespetsiifikas limit-example. NĂŒĂŒd kehtib igasuguste konteinerite puhul, mis on ĂŒles seatud selles nimespetsiifikas, piiri vÀÀrtus 512Mi, vĂ€lja arvatud juhul, kui antud konteinerile on mÀÀratud mĂ”ni muu individuaalne piir.
PrĂŒgipuhastus vanades Kubernetes'i versioonides
Kubelet alustab vaikimisi prĂŒgipuhastust, kui var/lib/docker moodustab 90% vabast ketta ruumidest. See on suurepĂ€rane, kuid Kubernetes'i versioonis 1.7 ei olnud vaikimisi piiri indekseeritud inode (faili indeksi) arvu jaoks, mis vastab failide arvule failisĂŒsteemis.
VÔimalik, et teie konteiner var/lib/docker saa kasutada ainult 50% kettaruumi, kuid samas vÔivad inode'id otsa lÔppeda, mis pÔhjustab töötajate töös probleeme.
Vanadel kubelet'i versioonidel vahemikus 1.4 kuni 1.6 tuleb lisada jÀrgmine lipp:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
Versioonis 1.7 ja uuemates see lipp on vaikimisi seadistatud. Kuid varasemad versioonid ei jÀlginud inoodide piirangut.
Minikube⊠vÀike, aga vÔimas kohalik Kubernetes
Minikube on kÔige lihtsam viis kÀivitada kohalik Kubernetes klaster. Seda saab alustada lihtsa kÀsuga:
minikube start
Selle kÀsu tÀitmisel töötab teie arvutis tÔeline Kubernetes klaster.

Nipp seisneb selles, kuidas rakendust koguda ja seda kohalikus klastris kÀivitada. Kui ei anta erilisi juhiseid, kogutakse Docker'i pilt teie arvutis, mitte klastris.
Kuna Docker'it sundida saatma pilti kohalikku Kubernetes klastrisse, antakse docker-machine'ile jÀrgmine kÀsk:
eval $(minikube docker-env)
NĂŒĂŒd saame koguda rakendusi kohalikus Kubernetes klastris.
Ărge jagage kubectl'i ligipÀÀsu kĂ”igile
See tundub ilmne, kuid kui mitu meeskonda kasutavad oma rakenduste jaoks ĂŒhte klastri (milleks Kubernetes on loodud), ei tasu lihtsalt anda ligipÀÀsu kĂ”igile. kubectl. Parim on jagada meeskonnad, mÀÀrates igale neist oma nimespetsiifilised ruumid ja piirates ligipÀÀsu RBAC-poliitikatega.
Sa saad keeruliseks minna, mÀÀrates iga podi jaoks juurdepÀÀsu, lugemise, loomise, kustutamise ja muud Ôigused. Kuid peamine on piirata ligipÀÀsu saladustele, lubades selle ainult administraatoritele. Nii eristame need, kes saavad klastrit hallata, ja need, kes saavad vaid seal rakendusi kÀivitada.
Haldage podide eelarveid
Kuidas tagada, et Kubernetes'i klastris ei esineks ootamatuid seisakuid? PodDisruptionBudget ja veel kord PodDisruptionBudget.
Klastrid uuendatakse perioodiliselt ja sĂ”lmed tĂŒhjendatakse. Miski ei seisa paigal, see on reaalsus. Iga mitme instantsiga rakenduse juurutamisel peab kindlasti olema kaasatud PDB (PodDisruptionBudget). See luuakse lihtsas yaml-failis, mis rakendatakse klastri peale. Konkreetse PDB katvuse mÀÀravad mĂ€rgise valikud.
MÀrkus: PDB eelarvet arvestatakse ainult pöörduva eelarve rikkumise korral (). NÀiteks riistvarahÀirete korral PDB ei tööta.
PDB 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 ja minAvailable. Esimeses parameetris mÀÀratakse, millistele rakendustele eelarve kehtib. NÀiteks, kui mul on juurutamised siltidega app: app-a ja app: app-b, siis kehtib see PDB ainult esimesele.
Parameeter minAvailable arvesse vĂ”etakse sĂ”lme tĂŒhjendamisel (puhastamisel). NĂ€iteks meie nĂ€ites tĂŒhjendamise ajal kĂ”rvaldatakse kĂ”ik instantsid app: app-a, vĂ€lja arvatud kaks.
See vÔimaldab kontrollida, kui palju rakenduse eksemplare peaks olema igal hetkel kÀimas.
Rakenduse töökorralduse jÀlgimine
Seda jÀlgimist saab teostada kahel viisil: Readiness vÔi Liveness kontrollide abil.
Esimene kontroll (readiness) mÀÀrab, kas konteiner on valmis liiklust vastu vÔtma.
Teine (liveness) nÀitab, kas konteiner on töökindel vÔi tuleb see taaskÀivitada.
Vastavad konfiguratsioonid lisatakse lihtsalt yaml-sissekandes. Seal saab mÀÀrata ajutisi, ooteaegu ja kordusproove. TÀiendava informatsiooni saamiseks vaadake .
Sildid igal pool
Sildid on ĂŒks Kubernetes'i pĂ”hikontsepte. Need vĂ”imaldavad objektidel vabalt omavahel suhelda ja luua pĂ€ringuid siltide alusel. Kuberneteses saab isegi minna kliendi juurde ja jĂ€lgida sĂŒndmusi konkreetsete siltide pĂ”hjal.
Siltide abil on vĂ”imalik teha praktiliselt kĂ”ike, kuid hea nĂ€itena vĂ”iks tuua mitme keskkonna loomise programmide kĂ€itamiseks ĂŒhes klastris.
Oletame, et kasutate sama klastri dev ja qa. See tĂ€hendab, et teie kĂ€sutuses on rakendus app-a, mis töötab samal ajal kahes keskkonnas qa ja dev. Sel juhul saame eraldi pöörduda rakenduse eksemplari poole konkreetses keskkonnas, mÀÀrates sobiva parameetri environment. NĂ€iteks, app: app-a ja environment: dev ĂŒhe keskkonna jaoks ja app: app-a ja environment: qa teise jaoks.
See vÔimaldab pöörduda mÔlema rakenduse eksemplari poole, nÀiteks testimise lÀbiviimiseks samal ajal.
Tee jÀrjestikuste toimingute korralduslikuks
Kubernetes on vĂ€ga vĂ”imas sĂŒsteem, kuid iga sĂŒsteem vĂ”ib lĂ”puks ummistuda paljude protsessidega. Kubelet kĂ€ivitab kĂ”ik mÀÀratud protsessid ja kontrollid, samuti oma omad.
Loomulikult ei aeglusta ĂŒkski ĂŒksik teenus sĂŒsteemi ning Kubernetes on algselt loodud skaleerimiseks. Kuid kui ĂŒhe teenuse asemel on miljon, hakkab kubelet sinne upuma.
Kui mingil pÔhjusel kustutate juurutuse (konteineri, pildi, mis iganes), veenduge, et kÔik oleks tÀielikult puhastatud.
Tutvuge Go'ga
Peamine nĂ”uanne jĂ€tsime lĂ”ppu. Ăppige programmeerimiskeelt Go.
Kubernetes on kirjutatud Go's, kÔik laiendused on kirjutatud Go'd, ja ametlikult toetatakse klientteeki client-go.
Seda saab kasutada igasuguste huvitavate asjade tegemiseks. NĂ€iteks saate Kubernetes'e sĂŒsteemi laiendamiseks enda maitse jĂ€rgi. Nii saate kasutada enda programme andmete kogumiseks, rakenduste juurutamiseks vĂ”i lihtsalt konteinerite puhastamiseks.
Go programmeerimiskeele Ôppimine ja client-go omandamine on tÔenÀoliselt kÔige olulisem nÔuanne, mida algetaotajatele Kubernetes'e kohta anda.
Mida veel lugeda:
- .
- ?
- .
Allikas: habr.com
