
Na internete je mnoho referenčnej literatúry, ale niekedy sa ukazujú ako najcennejšie najjednoduchšie rady. Tím preložil , ktoré autor článku zhromaždil po roku práce s Kubernetes. Tipy nie sú zoradené podľa dôležitosti, ale myslíme si, že si každý nájde niečo užitočné pre seba.
Najjednoduchší príkaz pri práci s Kubernetes
Na začiatok, snáď najjednoduchšia a najužitočnejšia akcia pri práci s Kubernetes. Nasledujúci príkaz aktivuje automatické doplňovanie príkazov kubectl v shelli bash:
echo "source > ~/\.bashrc
Automatické doplňovanie kubectl sa zapíše do súboru .bashrc a automaticky sa aktivuje pri každom spustení shellu. To urýchľuje zadávanie dlhých príkazov a parametrov, ako je all-namespaces. Viac informácií nájdete v .
Predvolené obmedzenia pamäte a CPU v mennom priestore
Ak je aplikácia napísaná nesprávne, napríklad každú sekundu otvára nové spojenie s databázou, ale nikdy ho nezatvára, v klastre dochádza k úniku pamäte. A ak pre aplikáciu nie sú pri nasadení nastavené obmedzenia pamäte, môže to viesť k zlyhaniu uzla.
Aby sa tomu predišlo, Kubernetes umožňuje nastaviť predvolené obmedzenia pre každý menný priestor. Tieto obmedzenia sú zapísané v yaml súbore pre konkrétny menný priestor. Tu je príklad takého súboru:
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
Vytvorte takýto yaml a aplikujte ho na akýkoľvek menný priestor. Napríklad na menný priestor limit-example. Teraz bude pre každý kontajner nasadený v tomto mennom priestore platiť limit 512Mi, ak pre daný kontajner nie je navyše nastavený iný individuálny limit.
Odstraňovanie odpadu v starších verziách Kubernetes
Kubelet predvolene začína odstraňovanie odpadu, keď var/lib/docker zaberá 90 % dostupného diskového priestoru. To je skvelé, avšak pred verziou Kubernetes 1.7 neexistoval žiadny predvolený limit na počet používaných indexových deskriptorov inode (inodov), ktoré zodpovedajú počtu súborov v súborovom systéme.
Potenciálne váš kontajner var/lib/docker môže využívať len 50 % diskového priestoru, ale inody môžu byť vyčerpané, čo vyvolá problémy v práci pracovníkov.
Vo starších verziách kubelet od 1.4 do 1.6 je potrebné pridať túto vlajku:
--eviction-hard
=memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<5%
Vo verzii 1.7 a novších je táto vlajka nastavená predvolene. Staršie verzie však nesledujú limit inód.
Minikube… malý, ale výkonný lokálny Kubernetes
Minikube je najjednoduchší spôsob, ako spustiť lokálny klaster Kubernetes. Spúšťa sa jednoduchým príkazom:
minikube start
Po vykonaní tohto príkazu máte na počítači skutočný klaster Kubernetes.

Trik spočíva v tom, ako zostaviť aplikáciu a spustiť ju lokálne v tomto klasteri. Ak nevydáte osobitné pokyny, Docker obraz sa bude zostavovať na vašom počítači, nie v klasteri.
Aby Docker poslalo obraz do lokálneho klastera Kubernetes, dáme docker-machine nasledujúci príkaz:
eval $(minikube docker-env)
Teraz môžeme zostavovať aplikácie na lokálnom klasteri Kubernetes.
Nedávajte prístup kubectl všetkým okolo
Toto sa zdá byť samozrejmé, ale ak viac tímov používa jeden klaster pre svoje aplikácie (na čo Kubernetes vznikol), nemali by ste jednoducho rozdávať prístupy. kubectlRadšej rozdelte tímy, pričom každej pridelíte vlastný názov priestoru a obmedzíte prístup pomocou politík RBAC.
Môžete sa zaoberať podrobným nastavením prístupových práv pre každý pod, vrátane čítania, vytvárania, mazaní a iných operácií. Ale hlavné je obmedziť prístup k tajomstvám, povoliť ho len administrátorom. Takto oddelíme tých, ktorí môžu spravovať klaster, od tých, ktorí v ňom môžu len nasadiť aplikácie.
Spravujte rozpočty podov
Ako zabezpečiť, aby aplikácia v klasteri Kubernetes nemala žiadne prestoje? PodDisruptionBudget a ešte raz PodDisruptionBudget.
Klastre sa pravidelne aktualizujú a uzly sa vyprázdňujú. Nič nestojí na mieste, taká je realita. Do každého nasadenia s viac ako jedným inštancom by mal byť určite zahrnutý PDB (PodDisruptionBudget). Vytvára sa v jednoduchom yaml súbore, ktorý sa aplikuje na klaster. Rozsah konkrétneho PDB sa určuje pomocou selektorov štítkov.
Poznámka: Rozpočet PDB sa zohľadňuje len pri reverzibilnom porušení rozpočtu (). V situáciách ako sú hardvérové zlyhania PDB nefunguje.
Príklad PDB:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: app-a-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: app-a
Dva základné parametre sú matchLabels a minAvailable. V prvom parametri sa uvádza, pre ktoré aplikácie platí rozpočet. Napríklad, ak mám nasadenia s etiketami app: app-a a app: app-b, tento PDB sa bude uplatňovať len na prvé.
Parameter minAvailable sa zohľadňuje pri vyprázdnení uzla. Napríklad v našom príklade sa pri vyprázdňovaní vyraďujú všetky inštancie app: app-a, okrem dvoch.
To umožňuje kontrolovať, koľko inštancií aplikácie má byť spustených v danom čase.
Monitoring stavu aplikácie
Takýto monitoring je možné realizovať dvoma spôsobmi: pomocou kontroly Readiness alebo Liveness.
Prvá kontrola (readiness) určuje pripravenosť kontajnera na príjem prevádzky.
Druhá (liveness) ukazuje, či je kontajner funkčný, alebo ho treba reštartovať.
Prislúchajúce konfigurácie sa jednoducho pridajú do yaml pre nasadenie. Tam môžete uviesť časové výpadky, dobu oneskorenia a počet opakovaných pokusov. Podrobnejšie informácie o nich nájdete v .
Štítky všade
Štítky sú jedným z fundamentálnych pojmov v Kubernetes. Umožňujú objektom slobodne sa spojiť navzájom a vytvárať požiadavky na základe štítkov. V Kubernetes je možné dokonca prejsť k klientovi a sledovať udalosti podľa konkrétnych štítkov.
Pomocou štítkov je možné spraviť takmer všetko, ale dobrým príkladom bude vytvorenie viacerých prostredí na vykonávanie programov v jednom klastri.
Predpokladajme, že používate rovnaký klaster pre dev a qa. To znamená, že môžete mať aplikáciu app-a, ktorá zároveň funguje v oboch prostrediach qa a dev. V takom prípade môžeme samostatne pristupovať k inštancii aplikácie v konkrétnom prostredí, zadaním príslušného parametra environment. Napríklad, app: app-a a environment: dev pre jedno prostredie, a app: app-a a environment: qa pre druhé.
To umožňuje pristupovať k obom inštanciám aplikácie, napríklad súčasne vykonávať testovanie.
Urobte poriadok
Kubernetes je veľmi mocný systém, ale akýkoľvek systém sa nakoniec môže uviaznuť v veľkom množstve procesov. Kubelet spúšťa všetky procesy a kontroly, ktoré ste uviedli, ako aj svoje vlastné.
Samozrejme, jedna neudržiavaná služba nezastaví systém, a Kubernetes je pôvodne navrhnutý na škálovanie. Ale ak namiesto jednej služby vznikne milión, kubelet začne zlyhávať.
Ak ste z nejakého dôvodu odstránili nasadenie (kontajner, obraz, čokoľvek), uistite sa, že je úplne vyčistené.
Poznajte Go
Najdôležitejšiu radu sme si nechali na koniec. Naučte sa programovací jazyk Go.
Kubernetes je vyvinutý v Go, všetky rozšírenia sú napísané v Go, a oficiálne je podporovaná klientská knižnica client-go.
Môže sa použiť na rôzne zaujímavé veci. Napríklad na prispôsobenie systému Kubernetes podľa vašich predstáv. Môžete použiť vlastné programy na zhromažďovanie údajov, nasadzovanie aplikácií alebo jednoduché čistenie kontajnerov.
Naučiť sa programovací jazyk Go a ovládnuť client-go je snáď najdôležitejšia rada, ktorú môžeme dať začínajúcim používateľom Kubernetes.
Čo ďalšie čítať:
- .
- ?
- .
Zdroj: habr.com
