
Internetis on palju viidatud kirjandust, kuid mĂ”nikord on kĂ”ige vÀÀrtuslikumad hoopis kĂ”ige lihtsamad nĂ”uanded. Meeskond tĂ”lkis , mille autor koostas pĂ€rast aastast tööd Kubernetesega. Soovitused pole jĂ€rjestatud olulisuse jĂ€rgi, kuid usume, et igaĂŒks leiab endale midagi kasulikku.
Lihtsaim kÀsk Kubernetesega töötamiseks
Alustuseks on ilmselt kÔige lihtsam ja kasulikum tegevus Kubernetesega töötamisel. JÀrgmine kÀsk lubab kÀskude automaatset tÀiendamist kubectl bash'i keskkonnas:
echo "source > ~/.bashrc
Automaatne tĂ€iendamine kubectl salvestatakse failisse .bashrc ja aktiveeritakse automaatselt iga kord, kui keskkond avatakse. See kiirendab pikkade kĂ€skude ja parameetrite, nagu all-namespaces, sisestamist. TĂ€iendavad ĂŒksikasjad leiate .
Vaikimisi mÀlu ja CPU piirangud nimede ruumis
Kui rakendus on valesti kirjutatud, nĂ€iteks avab iga sekundi jĂ€rel andmebaasi uue ĂŒhenduse, kuid kunagi ei sulge seda, siis toimub klastris mĂ€lu leke. Ja kui rakendusele ei ole deponeerimisel mÀÀratud mĂ€lu piirangut, vĂ”ib see pĂ”hjustada sĂ”lme kokkuvarisemise.
Sellise olukorra ennetamiseks vÔimaldab Kubernetes iga nimede ruumi vaikimisi piirangute seadmist. Need mÀÀratakse konkreetses nimede ruumi yaml-failis. 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 see mis tahes nimede ruumi. NĂ€iteks nimede ruumile limit-example. NĂŒĂŒd kehtib iga selle nimede ruumis kĂ€ivitunud konteineri jaoks 512Mi piirang, kui sellele konteinerile ei ole mÀÀratud eraldi piiri.
Reostuse puhastamine vanades Kubernetes versioonides
Kubelet alustab vaikimisi reostuse puhastamist, kui var/lib/docker kasutab 90 % saadaval olevast kettaruumist. See on suurepĂ€rane, kuid Kubernetes 1.7 versioonini ei olnud vaike piirangut inode deskriptorite (failisĂŒsteemi failide arvu) kasutamise arvule.
Teie konteiner vÔib kasutada ainult 50 % kettaruumist, kuid samal ajal vÔivad inode'd otsa saada, mis pÔhjustab probleeme tööprotsesside töös. var/lib/docker vÔib kasutada ainult 50% ketta ruumist, kuid sellegipoolest vÔivad inodid otsa saada, mis tekitab töötajate töös probleeme.
Vanades kubelet'i versioonides alates 1.4 kuni 1.6 tuleb lisada jÀrgmine lipp:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
Versioonides 1.7 ja uuemates on see lipp vaikimisi seadistatud. Kuid varasemad versioonid ei jÀlgi inoodide limiiti.
Minikube⊠vÀike, kuid vÔimas kohaliku Kubernetes'e lahendus
Minikube on kÔige lihtsam viis kÀivitada kohalik Kubernetes'e klaster. See kÀivitub lihtsa kÀsklusega:
minikube start
Selle kÀsu tÀitmise tulemusel töötab teie arvutis tÔeline Kubernetes'e klaster.

Nipp seisneb selles, kuidas rakendust koguda ja seda kohalikus klastris kÀivitada. Kui ei anta erilisi juhiseid, kogutakse Docker'i pilt teie arvutisse, mitte klastrisse.
Kuna Docker tuleb suunata pildi saatmiseks kohalikku Kubernetes'e klastrisse, antakse docker-masinale jÀrgmine kÀsk:
eval $(minikube docker-env)
NĂŒĂŒd saame rakendusi kohalikus Kubernetes'e klastris koguda.
Ărge jagage kubectl'i pÀÀsmeid kĂ”ikidele
See tundub iseenesestmĂ”istetav, kuid kui mitu meeskonda kasutavad oma rakenduste jaoks ĂŒhte klastrit (milleks Kubernetes on loodud), ei tasu lihtsalt kĂ”ikidele Ă”igusi anda. kubectl. Parem on jagada meeskonnad, mÀÀrates igaĂŒhele oma nimeruumi ja piirates juurdepÀÀsu RBAC poliitikatega.
Saate end vaevata, kirjutades iga pod'i jaoks juurdepÀÀsuÔigust, lugemist, loomist, kustutamist ja muid toiminguid. Kuid peamine on piirata juurdepÀÀsu saladustele, lubades seda vaid administraatoritele. Nii eristame me neid, kes saavad klastrit administreerida, ja neid, kes saavad seal lihtsalt seadmeid paigaldada.
Haldage pod'i eelarveid
Kuidas tagada, et Kubernetes'e klastris pole rakendusele seiskamisi? PodDisruptionBudget ja veel kord PodDisruptionBudget.
Klastrite pidev uuendamine ja sĂ”lmede tĂŒhjendamine on reaalne olukord. Igas juurutuses, millel on rohkem kui ĂŒks instants, tuleks kindlasti sisaldada PDB (PodDisruptionBudget). See luuakse lihtsas yaml failis, mis rakendatakse klastrile. Konkreetse PDB ulatus mÀÀratakse mĂ€rgiste valijate abil.
MÀrkus: PDB eelarvet arvestatakse ainult tagasihoidliku eelarve rikkumise korral (). NÀiteks riistvara rikete korral PDB ei töötaks.
NĂ€ide PDB-st:
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, milliste rakenduste jaoks eelarve kehtib. NÀiteks, kui mul on juurutamised siltega app: app-a ja app: app-b, siis seda PDB-d rakendatakse ainult esimesele.
Parameeter minAvailable arvesse vĂ”etakse sĂ”lme tĂŒhjendamisel. 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 ajahetkel kÀimas.
Rakenduse töökindluse jÀlgimine
Selline jÀlgimine on vÔimalik kahel viisil: valmisoleku- vÔi elujÔudluskatsete kaudu.
Esimene proov (valmidus) mÀÀrab konteineri valmisoleku liikluse vastuvÔtmiseks.
Teine (elujÔudlus) nÀitab, kas konteiner on töökorras vÔi tuleks see taaskÀivitada.
Seotud konfiguratsioonid lisatakse lihtsalt yaml-i juurutamiseks. Seal saab mÀÀrata ajasid, viivitusi ja kordusproovide arvu. Rohkem teavet nende kohta leiate .
Sildid igal pool
Sildid on Kuberneteses ĂŒks pĂ”himĂ”ttelisi mĂ”isted. Need vĂ”imaldavad objektidel vabalt ĂŒksteisega siduda ning luua pĂ€ringuid siltide alusel. Kuberneteses saab isegi kliendile liikuda ja jĂ€lgida konkreetsete siltide pĂ”hiseid sĂŒndmusi.
Siltide abil saab teha praktiliselt kĂ”ike, kuid hea nĂ€ide oleks mitme keskkonna loomine programmide kĂ€itamiseks ĂŒhes klastris.
Oletame, et kasutate sama klastrit dev ja qa. See tĂ€hendab, et teil vĂ”ib olla rakendus app-a, mis töötab samaaegselt mĂ”lemas keskkonnas qa ja dev. Sel juhul saame pöörduda eraldi rakenduse eksemplari poole konkreetses keskkonnas, mÀÀrates vastava parameetri keskkond. NĂ€iteks, app: app-a ja environment: dev ĂŒhe keskkonna jaoks ja app: app-a ja environment: qa teise jaoks.
See vÔimaldab ligipÀÀsu mÔlema rakenduse eksemplaridele, nÀiteks testimise samaaegset lÀbiviimist.
Hoia asjad korras
Kubernetes on vĂ€ga vĂ”imas sĂŒsteem, kuid iga sĂŒsteem suudab lĂ”puks kinni jÀÀda paljude protsesside tĂ”ttu. Kubelet kĂ€ivitab kĂ”ik, mida olete mÀÀranud, ja kontrollib omaenda.
Muidugi ei aeglusta ĂŒhe ĂŒksuse puudumine sĂŒsteemi, ja Kubernetes on algselt loodud skaleerimiseks. Kuid kui ĂŒhe asemel tekib miljon teenust, hakkab kubelet upuma.
Kui te mingil pÔhjusel kustutate rakenduse (konteineri, pildi, mida iganes), veenduge, et kÔik oleks tÀielikult kustutatud.
Tutvuge Go programmikeelega
Peamine nÔuanne, mille oleme lÔpetuseks jÀtnud. Uurige Go programmikeelt.
Kubernetes on kirjutatud Go's, kÔik laiendused on kirjutatud Go's ning ametlikult toetatakse ka kliendiraamatukogu client-go.
Seda saab kasutada erinevate ja huvitavate asjade jaoks. NĂ€iteks Kubernetes'i sĂŒsteemi kohandamiseks oma Ă€ranĂ€gemise jĂ€rgi. NĂ€iteks vĂ”ite kasutada oma programme andmete kogumiseks, rakenduste juurutamiseks vĂ”i konteinerite lihtsaks puhastamiseks.
Go programmikeele Ôppimine ja client-go omandamine on ilmselt kÔige tÀhtsam nÔuanne, mida algetappides Kubernetes'i kasutajatele anda.
Mida veel lugeda:
- .
- ?
- .
Allikas: habr.com
