Supraj 10 Kubernetes Trukoj kaj Konsiloj

Supraj 10 Kubernetes Trukoj kaj Konsiloj

Estas multe da referenca literaturo en la Interreto, sed foje la plej simpla konsilo estas la plej valora. Teamo Kubernetes aaS de Mail.ru tradukita elekto de dek lertaĵoj kaj konsiletoj, kiun la aŭtoro de la artikolo kolektis post unu jaro da laborado kun Kubernetes. La konsiletoj ne estas ordigitaj laŭ graveco, sed ni pensas, ke ĉiuj trovos ion utilan por si.

La plej simpla komando por labori kun Kubernetes

Komence, eble la plej simpla kaj plej utila ago labori kun Kubernetes. La sekva komando ebligas komandkompletigon kubectl en bash-ŝelo:

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

Aŭtomata kompletigo kubectl estos skribita al la .bashrc-dosiero kaj estos aŭtomate aktivigita ĉiufoje kiam la ŝelo estas komencita. Ĉi tio akcelas tajpi longajn komandojn kaj parametrojn kiel ekz all-namespaces. Legu pli en Kubernetes bash-helpo.

Defaŭlta memoro kaj CPU-limoj en nomspaco

Se la aplikaĵo estas skribita malĝuste, ekzemple, ĝi malfermas novan konekton al la datumbazo ĉiun sekundon sed neniam fermas ĝin, tiam la areto havas memorfukon. Kaj se la aplikaĵo ne havas memorlimon fiksitan dum deplojo, ĉi tio povas konduki al noda fiasko.

Por malhelpi ĉi tion, Kubernetes permesas vin agordi defaŭltajn restriktojn laŭ nomspaco. Ili estas skribitaj en la yaml-dosiero por specifa nomspaco. Jen ekzemplo de tia dosiero:

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

Kreu tian yaml kaj apliki al iu ajn nomspaco. Ekzemple, al la nomspaco limit-example. Nun ĉiu ujo deplojita en ĉi tiu nomspaco havos limon de 512Mi, krom se alia individua limo estas aldone fiksita por ĉi tiu ujo.

Rubkolekto en pli malnovaj versioj de Kubernetes

Kubelet defaŭlte komencas rubkolekton kiam var/lib/docker okupas 90% de disponebla diskspaco. Ĉi tio estas bonega, tamen ĝis Kubernetes 1.7 ne estis defaŭlta limo por la nombro da uzataj inodoj, kiuj respondas al la nombro da dosieroj en la dosiersistemo.

Eble via ujo var/lib/docker eble nur uzos 50% de la diskospaco, sed povas elĉerpi inodojn, kio kaŭzos problemojn por laboristoj.

En pli malnovaj versioj de kubelet de 1.4 ĝis 1.6 vi devos aldoni ĉi tiun flagon:

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

En 1.7 kaj postaj versioj ĉi tiu flago estas agordita defaŭlte. Tamen, antaŭaj versioj ne kontrolas la inodlimon.

Minikube... malgranda sed potenca loka Kubernetes

Minikube estas la plej facila maniero funkciigi lokan Kubernetes-grupon. Ĝi estas lanĉita per simpla komando:

minikube start

Ruli ĉi tiun komandon rezultigas realan Kubernetes-grupon funkciantan en via komputilo.

Supraj 10 Kubernetes Trukoj kaj Konsiloj
Ilustraĵfonto

La lertaĵo estas kiel konstrui la aplikaĵon kaj ruli ĝin loke sur tiu areto. Krom se specife instrukciita, la Docker-bildo estos konstruita sur via komputilo kaj ne sur la areto.

Por devigi Docker puŝi la bildon al la loka Kubernetes-grupo, la docker-maŝino ricevas la jenan komandon:

eval $(minikube docker-env)

Nun ni povas konstrui aplikojn sur loka Kubernetes-grupo.

Ne donu kubectl-aliron al ĉiuj

Ĉi tio ŝajnas evidenta, sed se pluraj teamoj uzas la saman areton por siaj aplikoj (por kio Kubernetes estis kreita), vi ne devus nur doni al ĉiuj kubectl. Pli bone estas apartigi la komandojn, atribuante al ĉiu el ili sian propran nomspacon kaj limigante aliron per RBAC-politikoj.

Vi povas konfuziĝi atribuante rajtojn aliri, legi, krei, forigi kaj aliajn operaciojn por ĉiu pod. Sed la ĉefa afero estas limigi aliron al sekretoj, permesante ĝin nur al administrantoj. Tiel ni diferencigos inter tiuj kiuj povas administri la areton kaj tiuj kiuj simple povas deploji al ĝi.

Administri Pod-Buĝetojn

Kiel certigi neniun malfunkcion por aplikaĵo en Kubernetes-areo? PodDisruptionBudget kaj denove PodDisruptionBudget.

Aretoj estas periode ĝisdatigitaj kaj nodoj estas malplenigitaj. Nenio staras senmove, tio estas la realo. Ĉiu deplojo kun pli ol unu okazo devus inkluzivi PDB (PodDisruptionBudget). Ĝi estas kreita en simpla yaml-dosiero, kiu estas aplikata al la areto. La kovra areo de aparta PDB estas determinita de etikedelektiloj.

Notu: La PDB-buĝeto estas enkalkulata nur kiam la buĝetmalobservo estas reigebla (propra-vola interrompo). En situacioj kiel aparataj misfunkciadoj, PDB ne funkcios.

Ekzemplo PDB:

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

La du ĉefaj parametroj estas matchLabels и minAvailable. La unua parametro specifas al kiuj aplikoj aplikas la buĝeto. Ekzemple, se mi havas deplojojn kun etikedoj app: app-a и app: app-b, tiam ĉi tiu PDB aplikiĝos nur al la unua.

Parametro minAvailable konsiderata kiam oni malplenigas (purigas) la nodon. Ekzemple, en nia ekzemplo, dum malplenigo, ĉiuj okazoj estas forpelitaj app: app-a, krom du.

Ĉi tio ebligas al vi kontroli kiom da okazoj de la aplikaĵo devus funkcii samtempe.

Aplika sano-monitorado

Tia monitorado eblas dumaniere: uzante testojn de Readiness aŭ Liveness.

La unua enketo (preteco) determinas la pretecon de la ujo ricevi trafikon.

La dua (viveco) montras ĉu la ujo estas sana aŭ necesas rekomenci.

La koncernaj agordoj estas simple aldonitaj al la yaml por deplojo. Tie vi povas specifi tempodaŭrojn, malfrutempojn kaj la nombron da reprovoj. Vidu pli da detaloj pri ili Kubernetes dokumentaro.

Etikedoj estas ĉie

Etikedoj estas unu el la fundamentaj konceptoj en Kubernetes. Ili permesas al objektoj libere komuniki unu kun la alia, kaj ankaŭ krei demandojn bazitajn sur etikedoj. En Kubernetes, vi eĉ povas iri al la kliento kaj rigardi eventojn por specifaj etikedoj.

Vi povas fari preskaŭ ĉion per etikedoj, sed bona ekzemplo estus krei plurajn mediojn por ruli programojn sur la sama areto.

Ni diru, ke vi uzas la saman areton por dev и qa. Ĉi tio signifas, ke vi povas havi aplikaĵon app-a, samtempe laborante en ambaŭ medioj qa и dev. En ĉi tiu kazo, ni povas aparte aliri la aplikaĵon en specifa medio specifante la taŭgan parametron environment. Ekzemple app: app-a и environment: dev por unu medio, kaj app: app-a и environment: qa por la dua.

Ĉi tio ebligas al vi aliri ambaŭ okazojn de la aplikaĵo, ekzemple, por fari provojn samtempe.

Organiziĝu

Kubernetes estas tre potenca sistemo, sed iu ajn sistemo povas eventuale blokiĝi kun tro da procezoj. La Kubelet funkcias ĉiujn procezojn kaj kontrolojn, kiujn vi specifita, kaj ankaŭ siajn proprajn.

Kompreneble, unu orfa servo ne malrapidigos la sistemon, kaj Kubernetes estas desegnita por grimpi de la fundo. Sed se anstataŭ unu servo miliono aperas, la kubelet komencas sufoki.

Se ial vi forigas deplojon (ujo, bildo, kio ajn), nur certigu fari kompletan purigadon.

Renkontu Go

Ni konservis la ĉefan konsilon por la lasta. Lernu la programlingvon Go.

Kubernetes estas evoluigita en Go, ĉiuj etendaĵoj estas skribitaj en Go, kaj la klient-go-klienta biblioteko ankaŭ estas oficiale subtenata.

Ĝi povas esti uzata por malsamaj kaj interesaj aferoj. Ekzemple, vastigi la Kubernetes-sistemon laŭ via gusto. Do, vi povas uzi viajn proprajn programojn por kolekti datumojn, disfaldi aplikaĵojn aŭ simple purigi ujojn.

Lerni la programlingvon Go kaj regi client-go estas eble la plej grava konsilo, kiun vi povas doni al novaj uzantoj de Kubernetes.

Tradukita kun la subteno de Mail.ru Cloud Solutions

Kion alian legi:

  1. Tri niveloj de aŭtoskalo en Kubernetes kaj kiel uzi ilin efike.
  2. Kubernetes-labornodoj: multaj malgrandaj aŭ malmultaj grandaj?
  3. 25 Utilaj Iloj por Disvolvi kaj Administri Kubernetes.

fonto: www.habr.com

Aldoni komenton