Internetissä on paljon viitekirjallisuutta, mutta joskus yksinkertaisimmat vinkit ovat arvokkaimpia. Tiimi Kubernetes aaS osoitteesta Mail.ru käännetty valikoima kymmenen temppua ja vinkkiä, jonka artikkelin kirjoittaja on kerännyt vuoden työskentelyn jälkeen Kuberneteksen kanssa. Vinkkejä ei ole lajiteltu tärkeyden mukaan, mutta uskomme, että jokainen löytää itselleen jotain hyödyllistä.
Helpoin komento käyttää Kubernetesin kanssa
Aloitus on ehkä yksinkertaisin ja hyödyllisin vaihe Kubernetesin kanssa työskentelyssä. Seuraava komento mahdollistaa komennon suorittamisen kubectl bash shellissä:
Automaattinen täydennys kubectl kirjoitetaan .bashrc-tiedostoon ja aktivoituu automaattisesti aina, kun komentotulkki käynnistetään. Tämä nopeuttaa pitkien komentojen ja vaihtoehtojen kirjoittamista all-namespaces. Lue lisää kohdasta Kubernetes bash apua.
Nimitilan muistin ja suorittimen oletusrajat
Jos sovellus on kirjoitettu väärin, kuten avataan uusi tietokantayhteys joka sekunti, mutta ei koskaan suljeta sitä, klusteri vuotaa muistia. Ja jos sovelluksella ei ole muistirajaa käyttöönoton aikana, tämä voi johtaa solmuvirheeseen.
Tämän estämiseksi Kubernetes antaa sinun asettaa oletusrajat kullekin nimiavaruudelle. Ne on kirjoitettu yaml-tiedostoon tietylle nimiavaruudelle. Tässä on esimerkki tällaisesta tiedostosta:
Luo tällainen yaml ja käytä sitä missä tahansa nimiavaruudessa. Esimerkiksi nimiavaruuteen limit-example. Nyt kaikilla tässä nimiavaruudessa käyttöönotetuilla säilöillä on 512 Mi:n raja, ellei tälle säilölle ole lisäksi asetettu muuta yksittäistä rajaa.
Roskakeräys Kubernetesin vanhemmissa versioissa
Kubelet aloittaa roskienkeruun oletusarvoisesti kun var/lib/docker vie 90 % käytettävissä olevasta levytilasta. Tämä on hienoa, mutta ennen Kubernetes 1.7:ää käytettävien inodien määrällä ei ollut oletusrajoitusta, mikä vastaa tiedostojärjestelmän tiedostojen määrää.
Mahdollisesti konttisi var/lib/docker voi käyttää vain 50% levytilasta, mutta se voi loppua inodeista, mikä aiheuttaa ongelmia työntekijöille.
Kubeletin vanhemmissa versioissa 1.4–1.6 sinun on lisättävä seuraava lippu:
Temppu on kuinka rakentaa sovellus ja suorittaa se paikallisesti tässä klusterissa. Ellei toisin mainita, Docker-näköistiedosto rakennetaan koneellesi, ei klusteriin.
Dockerin pakottamiseksi työntämään kuva paikalliseen Kubernetes-klusteriin docker-koneelle annetaan seuraava komento:
eval $(minikube docker-env)
Nyt voimme rakentaa sovelluksia paikalliseen Kubernetes-klusteriin.
Älä jaa kubectl-käyttöoikeutta kaikkien kanssa
Tämä vaikuttaa itsestään selvältä, mutta jos useat tiimit käyttävät samaa klusteria sovelluksilleen (johon Kubernetes luotiin), älä vain julkaise niitä kaikkia peräkkäin kubectl. On parempi erottaa komennot toisistaan antamalla jokaiselle oma nimiavaruutensa ja rajaamalla pääsy RBAC-käytännöillä.
Voit hämmentyä antamalla kullekin podille käyttö-, luku-, luonti-, poisto- ja muita toimintoja koskevia oikeuksia. Mutta tärkeintä on rajoittaa pääsy salaisuuksiin ja sallia se vain järjestelmänvalvojille. Näin erotamme ne, jotka voivat hallinnoida klusteria, ja ne, jotka voivat yksinkertaisesti ottaa sen käyttöön.
Hallitse pod-budjetteja
Kuinka varmistaa, ettei Kubernetes-klusterissa ole sovelluksen käyttökatkoksia? PodDisruptionBudget ja jälleen PodDisruptionBudget.
Klusterit päivitetään säännöllisesti ja solmut tyhjennetään. Mikään ei pysy paikallaan, se on todellisuus. Jokaiseen käyttöönottoon, jossa on useampi kuin yksi esiintymä, on sisällytettävä PDB (PodDisruptionBudget). Se luodaan yksinkertaisessa yaml-tiedostossa, jota sovelletaan klusteriin. Tietyn ATE:n laajuus määräytyy otsikon valitsimien avulla.
Huom: ATE:n budjetti otetaan huomioon vain, jos budjettirikkomus voidaan perua (vapaaehtoista häiriötä). Tilanteissa, kuten laitteistovioissa, PDB ei toimi.
Kaksi pääparametria ovat matchLabels и minAvailable. Ensimmäinen parametri määrittää, mitä sovelluksia budjetti koskee. Esimerkiksi, jos minulla on käyttöönottoja tunnisteilla app: app-a и app: app-b, tämä ATE koskee vain ensimmäistä talousarvioesitystä.
Parametri minAvailable otetaan huomioon solmua tyhjennettäessä (puhdistettaessa). Esimerkiksi esimerkissämme kaikki tapaukset häädetään tuhon aikana app: app-akahta lukuunottamatta.
Tämän avulla voit hallita, kuinka monta sovelluksen esiintymää on käynnissä kerrallaan.
Sovelluksen terveydentilan seuranta
Tällainen seuranta on mahdollista kahdella tavalla: Valmius- tai Elävyystesteillä.
Ensimmäinen luodin (valmius) määrittää, onko kontti valmis vastaanottamaan liikennettä.
Toinen (elävyys) osoittaa, onko säiliö terve vai pitääkö se käynnistää uudelleen.
Asiaankuuluvat kokoonpanot lisätään yksinkertaisesti yamliin käyttöönottoa varten. Siellä voit määrittää aikakatkaisut, viiveajan ja uudelleenyritysten määrän. Katso niistä lisää Kubernetesin dokumentaatio.
Etikettejä kaikkialla
Tarrat ovat yksi Kubernetesin peruskäsitteistä. Niiden avulla objektit voivat kommunikoida vapaasti toistensa kanssa sekä luoda pyyntöjä tarrojen perusteella. Kubernetesissa voit jopa mennä asiakkaalle ja katsoa tapahtumia tiettyjen tarrojen kohdalla.
Tunnisteilla voidaan tehdä melkein mitä tahansa, mutta hyvä esimerkki olisi luoda useita ympäristöjä ohjelmien suorittamiseksi samassa klusterissa.
Oletetaan, että käytät samaa klusteria dev и qa. Tämä tarkoittaa, että sinulla voi olla hakemus app-a, työskentelee samanaikaisesti molemmissa ympäristöissä qa и dev. Tässä tapauksessa voimme käyttää sovellusesiintymää erikseen tietyssä ympäristössä määrittämällä sopiva parametri environment. Esimerkiksi app: app-a и environment: dev yhdelle ympäristölle ja app: app-a и environment: qa toiselle.
Näin voit käyttää sovelluksen molempia esiintymiä esimerkiksi testaamaan samanaikaisesti.
Laita asiat järjestykseen
Kubernetes on erittäin tehokas järjestelmä, mutta mikä tahansa järjestelmä voi lopulta juuttua moniin prosesseihin. Kubelet suorittaa kaikki määrittämäsi prosessit ja tarkistukset sekä omansa.
Yksi orpopalvelu ei tietenkään hidasta järjestelmää, ja Kubernetes on suunniteltu skaalautuvaksi alusta alkaen. Mutta jos yhden palvelun sijaan ilmestyy miljoona, kubelet alkaa tukehtua.
Jos olet jostain syystä poistamassa käyttöönottoa (säilöä, kuvaa, mitä tahansa), muista puhdistaa se kokonaan.
Kubernetes on kehitetty Go:ssa, kaikki laajennukset on kirjoitettu Golla, ja myös client-go-kirjasto on virallisesti tuettu.
Sitä voidaan käyttää erilaisiin ja mielenkiintoisiin asioihin. Esimerkiksi laajentaaksesi Kubernetes-järjestelmää makusi mukaan. Voit esimerkiksi käyttää omia ohjelmiasi tietojen keräämiseen, sovellusten käyttöönottoon tai yksinkertaisesti säiliöiden puhdistamiseen.
Go-ohjelmointikielen oppiminen ja client-go-hallinta on ehkä tärkein neuvo, jonka voi antaa aloitteleville Kubernetes-käyttäjille.