Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Kui töötate Kubernetesega, on kubectl tõenäoliselt üks kõige rohkem kasutatavaid tööriistu. Ja iga kord, kui te kulutate palju aega konkreetse tööriistaga töötamisele, on mõistlik seda hästi õppida ja tõhusalt kasutada.

Meeskond Mail.ru Kubernetes aaS Tõlkis Daniel Weibel, kus leiate nõuandeid ja näpunäiteid kubectliga tõhusaks töötamiseks. Samuti aitab see sügavamalt mõista Kubernetes, tööpõhimõtteid.

Autori sõnul on artikli eesmärk muuta teie igapäevane töö Kubernetesega mitte ainult tõhusamaks, vaid ka meeldivamaks!

Sissejuhatus: mis on kubectl

Enne kubectli tõhusama kasutamise õppimist on vajalik mõista, mis see on ja kuidas see töötab.

Kasutaja vaatenurgast on kubectl Kubernetes juhtpaneel, mis võimaldab teostada Kubernetes operatsioone.

Tehnilisest vaatest on kubectl Kubernetes API klient.

Kubernetes API — see HTTP REST API. See API on Kubernetes, mille kaudu see täielikult kontrollitakse. See tähendab, et iga Kubernetes'i operatsioon esindab API lõpp-punkte ja seda saab teostada HTTP päringu kaudu sellele lõpp-punktile.

Seega, kubectl peamine ülesanne on saata HTTP päringud Kubernetes API-le:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Kubernetes on täielikult ressursipõhine süsteem. See tähendab, et see toetab baasressursside olekut ja kõik Kubernetes'e operatsioonid on CRUD operatsioonid.

Te kontrollite Kubernetes't täielikult, hallates neid ressursse, ning Kubernetes määrab, mida teha, lähtudes ressursi hetkeolukorrast. Seetõttu on Kubernetes'i API lingid organiseeritud ressursitüüpide loendina, millel on seotud operatsioonid.

Vaadakem näidet.

Oletame, et soovite luua ReplicaSet'i ressursi. Selleks kirjeldage ReplicaSet'i failis nimega replicaset.yaml, siis käivitage käsk:

$ kubectl create -f replicaset.yaml

Tulemusena luuakse ReplicaSet'i ressurs. Aga mis toimub kulisside taga?

Kubernetesis on ReplicaSet loomise operatsioon. Nagu iga teine operatsioon, on see saadaval API lõpppunktina. Antud operatsiooni API lõpppunkt näeb välja järgmine:

POST /apis/apps/v1/namespaces/{namespace}/replicasets

Kubernetes kõigi operatsioonide API lõpppunkte saab leida API käsiraamatust (sealhulgas eelnevalt nimetatud lõpppunkt). Et teha tegelik päring lõpppunti, tuleb eelnevalt lisada API serveri URL lõpppunktide teedele, mis on loetletud API käsiraamatus.

Seega, kui täidate eelnevalt nimetatud käsku, saadab kubectl HTTP POST päringu eelnevalt mainitud API lõpppunkti. ReplicaSeti määratlemine, mille olete määranud failis replicaset.yaml, edastatakse päringu kehas.

Just nii töötab kubectl kõigi käskudega, mis suhtlevad Kubernetes klastriga. Kõigis nendes olukordades saadab kubectl lihtsalt HTTP-päringud vastavatesse Kubernetes API lõpppunktidesse.

Pange tähele, et Kubernetesit saab täielikult hallata sellise tööriista kaudu nagu curl, saates käsitsi HTTP-päringud Kubernetes API-sse. Kubectl lihtsalt lihtsustab Kubernetes API kasutamist.

See, mis on kubectl ja kuidas see töötab. Kuid on veel üks asi Kubernetes API-st, mille kohta peab iga kubectl kasutaja teadma. Vaatame lühidalt Kubernetes'e sisemaailma.

Kubernetes'e sisemaailm

Kubernetes koosneb sõltumatute komponentide kogumist, mis töötavad eraldi protsessidena klastrite sõlmedes. Mõned komponendid töötavad peasalvadel, teised tööalustel, iga komponent täidab oma erilist ülesannet.

Siin on mõned kõige olulisemad komponendid peasalvadel:

  1. Salvestus — hoiab ressursi määratlemisi (tavaliselt etcd).
  2. API server — pakub API-d ja haldab hoidlat.
  3. Kontrolleri hallitseja — tagab, et ressursside olekud vastavad spetsifikatsioonidele.
  4. Ajakava — planeerib pod'id tööalustel.

Ja siin on üks kõige olulisem komponent tööalustel:

  1. Kubelet — haldab konteinerite käivitamist tööalusel.

Et mõista, kuidas need komponendid koos töötavad, vaadake näiteks.

Eeldame, et olete just käivitanud kubectl create -f replicaset.yaml, pärast mida kubectl tegi HTTP POST päringu ReplicaSet API lõpppunktile (edastades ReplicaSet'i ressursi määratluse).

Mis toimub klastris?

  1. Pärast täitmist kubectl create -f replicaset.yaml API-server salvestab teie ReplicaSeti ressursi määratluse hoidlas:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

  2. Seejärel käivitatakse ReplicaSeti kontroller kontrolleri halduris, mis haldab ReplicaSeti ressursside loomist, muutmist ja kustutamist:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

  3. ReplicaSeti kontroller loob iga ReplicaSeti replikatsiooni jaoks pod'i määratluse (vastavalt ReplicaSeti määratlemise pod'i mallile) ja salvestab need hoidlas:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

  4. Käivitatakse planeerija, mis jälgib pod'e, mida ei ole veel määratud ühelegi töönoodile:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

  5. Planeerija valib igale pod'ile sobiva töönoodi ja lisab selle teabe pod'i määratlusesse hoidlas:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

  6. Töönoodil, kellele pod on määratud, käivitatakse Kubelet, mis jälgib sellele nodile määratud pod'e:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

  7. Kubelet loeb pod'i määratluse hoidlast ja annab konteinerikeskkonnale, nagu Docker, käske konteinerite käivitamiseks nodil:

    Kuidas kasutada kubectli tõhusamalt: põhjalik juhend

Allpool on selle kirjelduse tekstiversioon.

API päring ReplicaSeti loomise lõpp-punkti töötab üles API-server. API-server autentib päringu ja salvestab ReplicaSeti ressursi määratluse hoidlas.

See sündmus aktiveerib ReplicaSeti kontrolleri, mis on kontrolleri halduri alamprotsess. ReplicaSeti kontroller jälgib ReplicaSeti ressursside loomist, uuendamist ja kustutamist salvestuses ning saab teate, kui see juhtub.

ReplicaSeti kontrolleri ülesanne on tagada, et kasutatav arv ReplicaSeti repliikide pod'e on olemas. Meie näites ei ole pod'e seni loodud, seega loob ReplicaSeti kontroller need pod'i määratlused (vastavalt ReplicaSeti määratlusele) ja salvestab need salvestuses.

Uute pod'ide loomine käivitab planeerija, mis jälgib määratlemata pod'ide määratlusi, mis veel ei ole töö sõlmedes planeeritud. Planeerija valib igale pod'ile sobiva töö sõlme ja värskendab määratlusi salvestuses.

Pange tähele, et seni ei ole klastris üheski kohas töökoormuse koodi täidetud. Kõik, mis siiani tehtud on, on ressursside loomine ja värskendamine salvestuses peameses sõlmes.

Viimases sündmuses käivitab Kubelet, mis jälgib pod'e, mis on planeeritud nende töönõuetele. Kubelet'i töönõu, kuhu on paigaldatud teie ReplicaSet pod'id, peab andma konteinerikeskkonnale, nagu Docker, käsu laadida vajalikud konteineripildid ja need käivitada.

Sel hetkel on teie ReplicaSet rakendus lõpuks käivitunud!

Kubernetes API roll

Kuidas te juba eelnevas näites nägite, jälgivad Kubernetes'i komponendid (välja arvatud API server ja andmehoidla) ressursside muutusi andmehoidlas ja muudavad ressursside teavet andmehoidlas.

Muidugi, need komponendid ei suhtle andmehoidla vahetult, vaid ainult Kubernetes API kaudu.

Vaatame järgmisi näiteid:

  1. ReplicaSet kontroller kasutab API lõpp-punkti list ReplicaSets parameetriga watch et jälgida ReplicaSet ressursside muutusi.
  2. ReplicaSet kontroller kasutab API lõpp-punkti create Pod (loo pod) pod'ide loomiseks.
  3. Planeerija kasutab API lõpp-punkti patch Pod (muuda pod) pod'ide uuendamiseks valitud töönõue teabega.

Nagu näete, on see sama API, mida kasutab kubectl. Ühe ja sama API kasutamine nii sisemiste komponentide kui ka välistes süsteemides on Kubernetes'i disainifilosoofia võtmeelement.

Nüüd saame kokkuvõtvalt määratleda, kuidas Kubernetes töötab:

  1. Salvestuskoht säilitab oleku, st Kubernetes'i ressursid.
  2. API server pakub salvestusele juurdepääsu Kubernetes API kujul.
  3. Kõik teised Kubernetes'i komponendid ja kasutajad loevad, jälgivad ja manipuleerivad Kubernetes'i olekuga (ressurssidega) läbi API.

Sellel kontseptsioonide tundmisel on oluline roll, et paremini mõista kubectli kasutamist ja maksimeerida selle efektiivsust.

Nüüd vaatame üle mõned konkreetsed näpunäited ja trikid, mis aitavad parandada kubectli kasutamise tõhusust.

1. Sisendi kiirus käsu täiendamise abil

Üks kasulikest, kuid sageli tähelepanuta jäävaid nippe, mis toob kasu kubectli kasutamisel, on käsu täiendamine.

Käsu täiendamine võimaldab automaatselt täita kubectli käskude erinevaid osi klahviga Tab. See töötab alameetodite, valikute ja argumentide puhul, sealhulgas keerulisemate, nagu ressursi nimed.

Vaata, kuidas kubectl'i käsu täiendamine töötab:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Käsu täiendamine töötab Bash ja Zsh käsirežiimides.

Ametlik juhend sisaldab üksikasjalikke juhiseid automaatse täiendamise seadistamiseks, kuid allpool toome lühikese ülevaate.

Kuidas käsu täiendamine töötab

Käsu täiendamine on shell'i funktsioon, mis töötab täiendusskriptiga. Täiendusskript on shell'i skript, mis määratleb täiendamise käitumise konkreetse käsu jaoks.

Kubectl genereerib ja väljastab automaatselt Bash ja Zsh-i täiendusskriptid järgmiste käskude abil:

$ kubectl completion bash

Või:

$ kubectl completion zsh

Teoreetiliselt on piisav, kui suunata nende käskude väljund vastavasse käsirežiimi, et kubectl saaks käske täiendada.

Praktiliselt erineb ühendamisviis Bash'i (sealhulgas erinevused Linuxi ja MacOS-i vahel) ning Zsh-i puhul. Allpool vaatame neid kõiki variante.

Bash Linuxis

Bash'i täiendusskript sõltub bash-completion paketist, seega tuleb see kõigepealt installida:

$ sudo apt-get install bash-completion

Või:

$ yum install bash-completion

Saate testida, kas pakett on edukalt installitud järgmise käsuga:

$ type _init_completion

Kui shelli funktsiooni kood kuvatakse, siis on bash-completion õigesti installitud. Kui käsk annab vea "Leitud ei ole", peate oma faili lisama järgmise reavahe ~ / .bashrc:

$ source /usr/share/bash-completion/bash_completion

Kas see rida peab faili lisama ~ / .bashrc või mitte, sõltub pakihaldurist, mida kasutasite bash-completioni installimiseks. APT puhul on see vajalik, YUM-i puhul mitte.

Pärast bash-completioni installimist tuleb kõik seadistada nii, et kubectl täiendamis skript oleks aktiivne kõigis shelli seanssides.

Üks võimalus selleks on lisada järgmine rida faili ~ / .bashrc:

source <(kubectl completion bash)

Teine võimalus on lisada kubectl täiendamis skript kausta /etc/bash_completion.d (loodage see, kui see ei eksisteeri):

$ kubectl completion bash >/etc/bash_completion.d/kubectl

Kõik kaustas olevad täiendamis skriptid /etc/bash_completion.d kaasa arvatud bash-completioni.

Mõlemad variandid on võrdselt kasutatavad.

Pärast käsurea taaskäivitamist hakkab kubectl käskude automaatne täiendamine tööle.

Bash MacOS-is

MacOS-is on seadistus veidi keerulisem. Probleem on selles, et MacOS-is on vaikimisi Bash versioon 3.2, kuid kubectl automaatse täiendamise skript nõuab vähemalt 4.1 versiooni Bashist ja ei tööta versioonis 3.2.

Bashi vanema versiooni kasutamine MacOS-is on seotud litsentsimise küsimustega. Bash versioon 4 levitatakse GPLv3 litsentsi alusel, mida Apple ei toeta.

Kubuntu autode lõpetamise seadistamiseks MacOS-is peate installima uuema versiooni Bashist. Samuti võite installida uuendatud Bash'i vaikimisi käsurea tõlgina, mis kaitseb teid tuleviku probleemide eest. See pole keeruline, detailid on toodud artiklis „Bashi värskendamine MacOS-is».

Enne jätkamist kontrollige, et kasutate uuemat versiooni Bashist (kontrollige väljundit bash --version).

Bashi autode lõpetamise skript sõltub projektist bash-completion, seega tuleb see esmalt installida.

Saate installida bash-completion'i Homebrew:

$ brew install bash-completion@2

Siit @2 tähendab bash-completion versiooni 2. Kubuntu autode lõpetamine nõuab bash-completion v2 ja bash-completion v2 nõuab vähemalt versiooni Bash 4.1.

Käskluse väljund brew-install sisaldab sektsiooni Caveats, kus on öeldud, et tuleb lisada faili ~/.bash_profile:

export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . 
"/usr/local/etc/profile.d/bash_completion.sh"

Kuid soovitan, et need read ei oleks ~/.bash_profile, ja seejärel määratleme selle, takistades seeläbi kasutajal selgelt selle väljaid muuta. See on üks andmete peitmise mustritest ~/.bashrc. Sellest tulenevalt on automaatne täiendamine saadaval mitte ainult põhikomandotes, vaid ka alakomandotes.

Pärast käsurea taaskäivitamist saate installatsiooni õigsust kontrollida järgmise käsu abil:

$ type _init_completion

Kui väljundis näete shell-funktsiooni, siis on kõik korrektselt seadistatud.

Nüüd tuleb teha nii, et kubectl automaatne täiendamine oleks kõigis sessioonides aktiivne.

Üks võimalus on lisada järgmine rida teie ~/.bashrc:

source <(kubectl completion bash)

Teine võimalus on lisada automaatse täiendamise skript kausta /usr/local/etc/bash_completion.d:

$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectl

See meetod töötab ainult siis, kui olete bash-completion'i installinud Homebrew abil. Sellisel juhul laadib bash-completion kõik skriptid sellest kataloogist.

Kui olete installinud kubectl Homebrew abil, siis ei pea te eelmist sammu tegema, sest automaatse täiendamise skript on automaatselt paigutatud kausta /usr/local/etc/bash_completion.d paigaldamise ajal. Sellisel juhul hakkab kubectl automaatne täiendamine tööle kohe, kui olete bash-completion'i installinud.

Kokkuvõttes on kõik need variantid ekvivalentsed.

Zsh

Zsh automaatse täiendamise skriptid ei nõua mingeid sõltuvusi. Kõik, mis on vajalik — on need laadida käsurea käivitamisel.

Saate seda teha, lisades rea oma ~/.zshrc faili:

source <(kubectl completion zsh)

Kui saate vea not found: compdef pärast oma puutumise taaskäivitamist, tuleb aktiveerida sisseehitatud funktsioon compdef. Selle saab aktiveerida, lisades teie faili algusesse ~/.zshrc järgmise:

autoload -Uz compinit
compinit

2. Kiire ülevaade ressursispetsifikatsioonidest

Kui loote YAML ressursi definitsioone, peate teadma nende väljade ja väärtuste kohta. Üks koht, kust seda teavet leida, on API juhend, mis sisaldab täielikke spetsifikatsioone kõikide ressursside kohta.

Kuid iga kord veebibrauserisse lülitumine on ebamugav. Seetõttu pakub kubectl käsku kubectl explain, mis näitab kõikide ressursside spetsifikatsioone otse teie terminalis.

Käsu formaat on järgmine:

$ kubectl explain resource[.field]...

Käsk väljastab taotletud ressursi või välja spetsifikatsiooni. Väljastatud teave on identne selle, mis on API juhendis.

Vaikimisi kubectl explain näitab ainult esimese taseme väljade pesastamist.

Vaata, kuidas see välja näeb siit.

Kogu puu saab kuvada, kui lisada valik --recursive:

$ kubectl explain deployment.spec --recursive

Kui te ei tea täpselt, milliseid ressursse vajate, saate need kõik näha järgmise käsu abil:

$ kubectl api-resources

See käsk kuvab ressursside nimed mitmuses, näiteks, deployments asetatakse deployment. Samuti näitab see lühinime, näiteks deploy, nende ressursside jaoks, kus see on olemas. Ärge muretsege nende erinevuste pärast. Kõik need nimevariandid on kubectl jaoks ekvivalentsetes. See tähendab, et võite kasutada mõnda neist kubectl explain.

Kõik järgmised käsklused on võrdsed:

$ kubectl explain deployments.spec
# või
$ kubectl explain deployment.spec
# või        
$ kubectl explain deploy.spec

3. Kasutage kohandatud veeru väljundiformaati

Vaikimisi on käsu kubectl get:

$ kubectl get pods
NAME                     READY    STATUS    RESTARTS  AGE
engine-544b6b6467-22qr6   1/1     Running     0       78d
engine-544b6b6467-lw5t8   1/1     Running     0       78d
engine-544b6b6467-tvgmg   1/1     Running     0       78d
web-ui-6db964458-8pdw4    1/1     Running     0       78d

See formaat on mugav, kuid see sisaldab piiratud teavet. Võrreldes täisressursi määratlemise formaadiga, kuvatakse siin vaid mõned väljad.

Selle puhul saate kasutada kohandatud veeru väljundvormingut, mis võimaldab määrata, milliseid andmeid kuvada. Saate välja tuua ükskõik millise ressursi välja eraldi veeruna.

Kohandatud vormingu kasutamine määratakse valikute kaudu:

-o custom-columns=
:[,
:]...

Iga veeru väljundit saate määrata paari abil

:, kus
— veeru nimi ja <jsonpath> — väljend, mis määratleb ressursi välja.

Vaadakem lihtsat näidet:

$ kubectl get pods -o custom-columns='NAME:metadata.name'

NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4

Väljund sisaldab ühte veergu, mis näitab pod'ide nimesid.

Valiku väljend valib pod'ide nimed väljalt metadata.name. See on sellepärast, et pod'i nimi määratakse välja nimetus all olevas väljas metadata ressursi pod'i kirjelduse juures. Lisainfot leiate API käsiraamatust või tippige käsk kubectl explain pod.metadata.name.

Nüüd oletame, et soovite väljundile lisada täiendava veeru, näiteks näidates, millisel sõlmel iga pod töötab. Sel eesmärgil võite lihtsalt lisada vastava veeru spetsifikatsiooni kohandatud veergude valikusse:

$ kubectl get pods 
  -o custom-columns='NAME:metadata.name,NODE:spec.nodeName'

NAME                       NODE
engine-544b6b6467-22qr6    ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8    ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg    ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4     ip-10-0-118-34.ec2.internal

Väljendus valib nodi nime spec.nodeName — kui pod omistatakse nodile, siis selle nimi kirjutatakse podi ressursside eritingimuste valdkonda. spec.nodeName Rohkem teavet saab vaadata väljatoonist kubectl selgitab pod.spec.nodeName.

Pange tähele, et Kubernetes'i ressursside väljad on suuruse suhtes tundlikud.

Saate vaadata mis tahes ressurssi välja veeruna. Lihtsalt vaadake ressurssi eritingimusi ja proovige neid kõigi väljadega, mis teile meeldivad.

Aga esiteks vaatame lähemalt väljavalimise väljendite kohta.

JSONPath väljendid

Ressursside valimiseks mõeldud väljendid põhinevad JSONPath.

JSONPath on keel andmete valimiseks JSON-dokumentidest. Ühe välja valimine on kõige lihtsam JSONPath kasutusjuht. Tal on palju rohkem võimalusi, sealhulgas valida, filtreerida ja nii edasi.

Kubectl selgitab toetab piiratud arvu JSONPath omadusi. Allpool on toodud omadused ja nende kasutamise näited:

# Выбрать все элементы списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
# Выбрать специфический элемент списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
# Выбрать элементы списка, попадающие под фильтр
$ kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
# Выбрать все поля по указанному пути, независимо от их имени
$ kubectl get pods -o custom-columns='DATA:metadata.*'
# Выбрать все поля с указанным именем, вне зависимости от их расположения
$ kubectl get pods -o custom-columns='DATA:..image'

Operator [] has special significance. Many fields of Kubernetes resources are lists, and this operator allows you to select elements from these lists. It is often used with a wildcard like [*] to select all elements of the list.

Rakenduse näited

The possibilities for using a custom output format for columns are limitless, as you can display any field or combination of fields of the resource in the output. Here are a few application examples, but feel free to explore them on your own and find useful applications for you.

  1. Displaying container images for pods:
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    This command displays the container image names for each pod.

    Remember that a pod can contain multiple containers, so the image names will be output on one line separated by commas.

  2. Displaying availability zones of nodes:
    $ kubectl get nodes 
      -o 
    custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone'
    
    NAME                          ZONE
    ip-10-0-118-34.ec2.internal   us-east-1b
    ip-10-0-36-80.ec2.internal    us-east-1a
    ip-10-0-80-67.ec2.internal    us-east-1b

    See käsk on mugav, kui teie klaster asub avalikus pilves. See kuvab iga sõlme jaoks saadavustsooni.

    Saadavustsoon on pilve mõisted, mis piiritleb replikatsioonitsooni geograafilise piirkonnaga.

    Iga sõlme saadavustsooni määrab eriti märgis — failure-domain.beta.kubernetes.io/zone. Kui klaster on avalikus pilves, luuakse see märk automaatselt ja täidetakse iga sõlme jaoks saadavustsoonide nimedega.

    Märgid ei kuulu Kubernetes'i ressursside spetsifikatsioonidesse, seega ei leia te teavet nende kohta API käsiraamatust. Kuid neid saab näha (nagu ka muid märke), kui küsida sõlmede kohta teavet YAML või JSON formaadis:

    $ kubectl get nodes -o yaml
    # või
    $ kubectl get nodes -o json

    See on suurepärane viis, kuidas rohkem teada saada ressurssidest, lisaks ressursi spetsifikatsioonide uurimisele.

4. Lihtne vahetada klastrite ja nimede vahel

Kui kubectl teeb päringu Kubernetes API-le, loeb ta enne seda faili kubeconfig, et saada kõik vajalikud ühenduse parameetrid.

Vaikimisi on faili kubeconfig nimi ~/.kube/config. Tavaliselt luuakse või uuendatakse see fail spetsiaalse käsuga.

Kui töötate mitme klastri kallal, sisaldab teie kubeconfigi fail ühenduse parameetreid kõigi nende klastrite jaoks. Teil on vajalik viisi anda kubectl käsule, millise täpselt klastri kallal töötate.

Klastri sees saate luua mitu nimede ruumi — sorteeritud virtuaalne klaster füüsilise klastriga. Kubectl määrab, millist nimede ruumi kasutada, samuti kubeconfigi faili andmete põhjal. Seega vajate ka viisi, kuidas kubectl käsule öelda, millise nimede ruumiga töötada.

Selles peatükis räägime, kuidas see toimib ja kuidas saavutada tõhus töö.

Pange tähele, et teil võib olla mitu kubeconfigi faili, mis on loetletud keskkonnamuutuja KUBECONFIG all. Sellisel juhul koondatakse kõik need failid üheks ühiseks konfiguratsiooniks käitamise ajal. Samuti saate muuta vaikimisi rakendatavat kubeconfigi faili, käivitades kubectl koos parameetriga --kubeconfig. Vaata ametlikku dokumentatsiooni.

Kubeconfigi failid

Vaatame, mida täpselt sisaldab kubeconfigi fail:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Nagu näete, sisaldab kubeconfigi fail kontekste. Kontekst koosneb kolmest osast:

  • Cluster — klastriserveri API URL.
  • User — kasutaja autentimisandmed klastris.
  • Namespace — nimeserver, mida kasutatakse klastrisse ühendamisel.

Praktikas kasutatakse sageli ühte konteksti iga klastri jaoks oma kubeconfigi failis. Siiski võib teil olla ka mitu konteksti klastrite jaoks, mis erinevad kasutaja või nimeserveri poolest. Siiski on mitme konteksti konfiguratsioon haruldane, nii et tavaliselt on klastrite ja kontekstide vahel üheselt mõistetav seos.

Igal hetkel on üks kontekst aktiivne:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Kui kubectl loeb konfiguratsioonifaili, võetakse alati teave praegsest kontekstist. Ülaltoodud näites ühineb kubectl klastriga Hare.

Seega, et lülituda teisele klastrile, peate muutma praegust konteksti kubeconfigi failis:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Nüüd ühineb kubectl klastriga Fox.

Teise nime ruumi vahetamiseks samas klastris tuleb muuta elemendi namespace väärtust praeguses kontekstis:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Ülaltoodud näites kasutab kubectl klastrite Fox nime ruumi Prod (varem oli seadistatud nime ruum Test).

Pange tähele, et kubectl pakub ka valikuid --cluster, --user, --namespace ja --context, mis võimaldavad üle kirjutada individuaalseid elemente ja isegi praegust konteksti, sõltumata sellest, mis on seadistatud kubeconfig failis. Vaata kubectl options.

Teoreetiliselt võite käsitsi muuta parameetreid kubeconfig failis. Kuid see on ebamugav. Nende toimingute lihtsustamiseks on olemas erinevad utiliidid, mis võimaldavad parameetreid automaatsetes režiimides muuta.

Kasutage kubectx

Väga populaarne utiliit klastrite ja nime ruumide vahetamiseks.

Utiliit pakub käskusid kubectx ja kubens vastavalt praeguse konteksti ja nime ruumi muutmiseks.

Nagu juba mainitud, tähendab praeguse konteksti muutmine klastrite vahetamist, kui teil on ainult üks kontekst iga klastipea jaoks.

Siin on näide nende käskude täitmisest:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Põhimõtteliselt redigeerivad need käsklused lihtsalt kubeconfig faili, nagu eespool kirjeldatud.

Selle installimiseks kubectx, järgige juhiseid lehelt Github.

Mõlemad käsklused toetavad konteksti ja nimespetsiifiliste nimede automaatset täiendamist, mis võimaldab neid täielikult mitte sisestada. Juhised automaatse täiendamise seadistamiseks siin.

Teine kasulik funktsioon on kubectx on interaktiivne režiim. See töötab koos tööriistaga fzf, mille peab eraldi installima. Fzf paigaldamine muudab automaatselt interaktiivse režiimi saadavaks kubectx. Interaktiivses režiimis saate valida konteksti ja nimespetsiifi interaktiivse otsinguliidese kaudu, mille pakub fzf.

Käskluste aliaside kasutamine

Te ei vaja eraldi tööriistu praeguse konteksti ja nimespetsiifi muutmiseks, kuna kubectl pakub ka selleks käsklusi. Nii et käsk kubectl config pakub subkäskyse kubeconfig failide redigeerimiseks.

Mõned neist on:

  • kubectl config get-contexts: kuvada kõik kontekstid;
  • kubectl config current-context: saada praegune kontekstid;
  • kubectl config use-context: muuta praegust konteksti;
  • kubectl config set-context: muuta konteksti elementi.

Siiski ei ole nende käskude otse kasutamine väga mugav, sest need on pikad. Saate luua nende jaoks shell'i aliasid, mis on kergesti teostatavad.

Olen loonud komplekti aliaste, mis põhinevad nende käskudel ja pakuvad funktsionaalsust, mis sarnaneb kubectx-iga. Siit saate näha nende tegevust:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Pange tähele, et aliasid kasutavad fzf interaktiivse vabaltotsimise liidese pakkumiseks (nagu kubectx interaktiivses režiimis). See tähendab, et peate installima fzf, et neid aliasid kasutada.

Siin on aliaste määratlused:

# Получить текущий контекст
alias krc='kubectl config current-context'
# Список всех контекстов
alias klc='kubectl config get-contexts -o name | sed "s/^/  /;|^  $(krc)$|s/ /*/"'
# Изменить текущий контекст
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'

# Получить текущее пространство имен
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print $5}" | sed "s/^$/default/"'
# Список всех пространств имен
alias kln='kubectl get -o name ns | sed "s|^.*/|  |;|^  $(krn)$|s/ /*/"'
# Изменить текущее пространство имен
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"'

Aliasite seadistamiseks peate lisama eespool toodud määratlused oma faili ~/.bashrc või ~/.zshrc ja laadima oma shell'i uuesti.

Pluginate kasutamine

Kubectl võimaldab laadida pluginaid, mis töötavad nagu põhi- käskude. Näiteks võite installida plugina kubectl-foo ja käivitada seda, kasutades käsku kubectl foo.

Oleks mugav vahetada konteksti ja nimespetsiifilisust sellisel viisil, näiteks käivitades kubectl ctx konteksti muutmiseks ja kubectl ns nimespetsiifilisuse muutmiseks.

Olen kirjutanud kaks pluginat, mis teevad seda:

Pluginate töö põhineb eelmise jaotise aliasetel.

Nii need töötavad:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Pange tähele, et pluginate kasutamiseks on fzf, mis pakub interaktiivset otsingu liidest (nagu interaktiivses režiimis kubectxis). See tähendab, et peate installima fzf, et neid aliasid kasutada.

Pluginate installimiseks peate laadima alla skriptid, mille nimed kubectl-ctx ja kubectl-ns igal teel, mis on teie PATHis, ja tegema need täidesaatevaks, näiteks kasutades chmod +x. Pärast seda saate kasutada kubectl ctx ja kubectl ns.

5. Sisendi lühendamine automaataliastega

Shelli aliased on suurepärane võimalus sisendi kiirendamiseks. Projekt kubectl-aliases sisaldab umbes 800 lühendit peamistele kubectl käskudele.

Võite imestada — kuidas mäletada 800 alias? Kuid neid ei pea kõiki meeles pidama, kuna need kummarduvad lihtsa mustri järgi, nagu on allpool toodud:

Kuidas kasutada kubectli tõhusamalt: põhjalik juhend
Näiteks:

  1. kgpooyaml — kubectl get pods oyaml
  2. ksysgsvcw — kubectl -n kube-system get svc w
  3. ksysrmcm — kubectl -n kube-system rm cm
  4. kgdepallsl — kubectl get deployment all sl

Nagu näete, koosnevad aliased komponentidest, millest igaühel on kindel tähendus kubectl käsu jaoks. Igal aliasel võib olla üks komponent põhikäsu, operatsiooni ja ressursi jaoks ning mitu komponenti parameetrite jaoks. Lihtsalt „täidate” need komponendid vasakult paremale, järgides ülalkirjeldatud skeemi.

Praegune üksikasjalik skeem asub GitHub. Sealt leiate ka täieliku aliaste loendi.

Näiteks alias kgpooyamlall on samaväärne käsuga kubectl get pods -o yaml --all-namespaces.

Valikute suhteline järjekord ei oma tähtsust: käsk kgpooyamlall on ekvivalentne käsuga kgpoalloyaml.

Te ei pea kasutama kõiki komponente aliasteks. Näiteks k, kg, klo, ksys, kgpo saab samuti kasutada. Veelgi enam, käsurida võimaldab aliaste ja tavaliste käskude või valikute kombineerimist:

Näiteks:

  1. Asetame kubectl proxy võib kirjutada k proxy.
  2. Asetame kubectl get roles võib kirjutada kg roles (hetkel ei ole aliast ressursile Roles).
  3. Konkreetse podi andmete saamiseks saate kasutada käsku kgpo my-pod — kubectl get pod my-pod.

Pidage meeles, et mõned aliaste nõuavad argumenti käsureal. Näiteks alias kgpol tähendab kubectl get pods -l. Valik -l nõuab argumenti — sildistamise spetsiifikatsiooni. Kui kasutate alias't, näeb see välja nagu kgpol app=ui.

Kuna osa alias'test nõuab argumente, tuleb alias'e a, f ja l kasutada viimastena.

Üldiselt, niipea kui olete selle skeemi selgeks õppinud, suudate intuitiivselt välja mõelda aliased käskudest, mida soovite täita, ja säästa palju aega sisestamisel.

Paigaldamine

Kuna kubectl-aliasesid paigaldada, tuleb faili alla laadida .kubectl_aliases GitHubist ja lisada see faili ~/.bashrc või ~/.zshrc:

source ~/.kubectl_aliases

Autotäiendamine

Kuidas juba mainitud, lisate sageli alias’le täiendavaid sõnu käsureal. Näiteks:

$ kgpooyaml test-pod-d4b77b989

Kui kasutate kubectl'i käsu autotäiendamist, siis tõenäoliselt olete kasutanud autotäiendust selliste asjade jaoks nagu ressursside nimed. Aga kas seda on võimalik teha, kui kasutatakse alias'e?

See on väga oluline küsimus, sest kui autotäiendamine ei tööta, kaotate osa alias'ide eeliseid.

Vastus sõltub sellest, millist käsurea tõlki kasutate:

  1. Zsh'i jaoks töötab autotäiendamine alias'e puhul "karbist välja".
  2. Bashi jaoks on kahjuks vajalikud mõned toimingud, et autotäiendamine tööle saada.

Bashi aliasite automaatse täitmise lubamine

Bashi probleem seisneb selles, et see üritab iga kord, kui vajutate Tab, täiendada alias't, mitte käsku, millele alias viitab (nagu Zsh teeb). Kuna teil ei ole täitmisskripte kõigi 800 aliasi jaoks, ei toimi automaatne täitmine.

Projekt complete-alias pakub sellele probleemile üldlahendust. See ühendub aliaste täitmise mehhanismiga, täidab alias't käsuks ja tagastab täiendatud käsku täitmiseks valikud. See tähendab, et aliaste täitmine käitub täpselt nagu täispika käsu puhul.

Esiteks selgitan, kuidas installida complete-alias, seejärel, kuidas seda seadistada, et lubada täitmist kõigi kubectl aliaste jaoks.

complete-aliasi installimine

Esiteks sõltub complete-alias bash-completion. Seetõttu tuleb enne complete-aliasi installimist veenduda, et bash-completion on paigaldatud. Installimise juhised on antud varem Linuxi ja MacOS-i jaoks.

Oluline märkus MacOS-i kasutajatele: nagu kubectl autocompletion skript, ei tööta complete-alias Bash 3.2-ga, mis on vaikimisi MacOS-is. Täpsemalt sõltub complete-alias bash-completion v2-st (brew install bash-completion@2), mille jaoks on vajalik vähemalt Bash 4.1. See tähendab, et MacOS-s complete-alias'i kasutamiseks tuleb installida uuem Bash versioon.

Teil on vaja alla laadida skript bash_completion.sh kohast GitHubi repositoriumist ja lisada see oma faili ~/.bashrc:

source ~/bash_completion.sh

Pärast käsurea taaslaadimist on complete-alias täielikult installitud.

Autotäienduse lubamine kubectl alias'ide jaoks

Tehniliselt tarjoaa complete-alias shell'i funktsiooni _complete_alias. See funktsioon kontrollib alias'i ja annab autotäienduse vihjeid alias'e käsu jaoks.

Funktsiooni sidumiseks teatud alias'iga peate kasutama Bash'i sisseehitatud mehhanismi complete, et määrata _complete_alias alias'e autotäienduse funktsiooniks.

Üheks näiteks võtame alias'e k, mis tähistab käsku kubectl. Selle määramiseks _complete_alias antud alias'e autotäienduse funktsiooniks peate käitama järgmist käsku:

$ complete -F _complete_alias k

Tulemuseks on see, et iga kord, kui te autotäiendate alias'e k, kutsutakse funktsioon _complete_alias, mis kontrollib alias't ja annab autotäienduse vihjeid käsu kohta kubectl.

Teiseks näiteks võtame alias'e kg, mis tähistab kubectl get:

$ complete -F _complete_alias kg

Nagu eelnevas näites, kui täiendate kg, saate samu täiendamise soovitusi, nagu oleksite saanud kubectl get.

Pange tähele, et complete-alias’i saab kasutada igasuguste aliaste jaoks teie süsteemis.

Seega, et lubada automaatset täiendamist kõigi kubectl aliaste jaoks, tuleb ülaltoodud käsk täita igaühe puhul. Järgmine fragment teeb just seda, tingimusel et olete installinud kubectl-aliases ~/.kubectl-aliases:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases); 
do
  complete -F _complete_alias "$_a"
done

See koodijupp tuleb panna oma ~/.bashrc, laadige käsurea interpretator uuesti ja automaatne täiendamine on saadaval kõigile 800 kubectl aliastele.

6. kubectl laiendamine pistikprogrammide abil

Alates versioonist 1.12, kubectl toetab pistikprogrammi mehhanismi, mis võimaldab laiendada selle funktsioone lisakomandodega.

Kui olete tuttav Git pistikprogrammide mehhanismidega, siis kubectl pistikprogrammid on koostatud sama põhimõtte järgi.

Käesolevas peatükis räägime, kuidas pistikprogramme installida, kust neid leida ja kuidas luua oma pistikprogramme.

Pistikprogrammide installimine

kubectl pistikprogrammid jagatakse lihtsate täidetavate failidena, mille nimi on kujul kubectl-x. The prefix kubectl- on kohustuslik, millele järgneb uus kubectl alamees, mis võimaldab käivitada pistikprogrammi.

Näiteks pistikprogramm hello jagatakse faili nimega kubectl-hello.

Pistikprogrammi installimiseks tuleb fail kopeerida kubectl-x igal kataloogis teie PATH muutuja ja teha see täidetavaks, näiteks kasutades chmod +x. Pärast seda saate pistikprogrammi kutsuda kasutades kubectl x.

Saate kasutada järgmist käsku, et kuvada loend kõigist pistikprogrammidest, mis on hetkel teie süsteemis installitud:

$ kubectl plugin list

See käsk kuvab ka hoiatuse, kui teil on mitu pistikprogrammi sama nimega või kui on pistikprogrammifail, mis ei ole täidetav.

Pistikprogrammide otsimine ja installimine Krew abil

Kubectl pistikprogrammid on sobilikud jagamiseks või uuesti kasutamiseks nagu tarkvarapaketid. Aga kust leida pistikprogramme, mida teised on jaganud?

Krew projekt on suunatud ühtse lahenduse pakkumisele kubectl pluginate jagamiseks, otsimiseks, installimiseks ja haldamiseks. Projekt nimetab end "kubectl pluginate paketihalduriks" (Krew on sarnane Brew).

Krew on nimekiri kubectl pluginatest, mida saate valida ja installida. Lisaks on Krew ka kubectl plugin.

See tähendab, et Krew installimine töötab sisuliselt nagu iga teise kubectl plugina installimine. Täiendavad juhised leiate GitHubi lehelt.

Krew kõige olulisemad käsud:

# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>

Pange tähele, et Krew abil pluginite installimine ei takista pluginate installimist standardsete meetoditega, nagu eespool kirjeldatud.

Märge, et käsk kubectl krew list näitab ainult neid pluginaid, mis on installitud Krew abil, samas kui käsk kubectl plugin list loetleb kõik pluginaid, sealhulgas need, mis on installitud Krew abil ja need, mis on installitud muude meetoditega.

Otsi pluginaid mujalt

Krew on noor projekt, hetkel sisaldab tema nimekiri umbes 30 pluginaid. Kui te ei leia vajalikku, võite otsida pluginaid mujalt, näiteks GitHubist.

Soovitan vaadata GitHubi sektsiooni kubectl-plugins. Siit leiate mitmeid tosin jääkplugine, mida tasub uurida.

Oma pluginade loomine

Saate ise luua pluginaid — see pole keeruline. Peate looma täidetava faili, mis teeb vajalikku, andes sellele nime nagu kubectl-x ja installima, nagu eespool kirjeldatud.

Fail võib olla bash-skript, python-skript või kompileeritud go-rakendus — ei ole oluline. Ainus tingimus on, et see peab olema tühi operatsioonisüsteemis.

Loome nüüd kohe plugina näite. Eelmises jaos kasutasite käsku kubectl, et väljastada konteinerite loend iga podi jaoks. Selle käsu saab lihtsasti muuta pluginaks, mida saate kutsuda näiteks koos kubectl img.

Looge fail kubectl-img järgnevate sisu:

#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'

Nüüd tehke fail täidetavaks, kasutades chmod +x kubectl-img ja viige see mõnesse katalooge, mis on teie PATH-is. Pärast seda saate kohe kasutada pluginat kubectl img.

Nagu juba mainitud, võivad kubectl pistikud olla kirjutatud mis tahes programmeerimiskeeles või skriptikeeles. Kui kasutate käsureas skripte, siis on eeliseks kerge võimalus kutsuda kubectl üles pistikust. Siiski võite kirjutada keerukamaid pistikuid tõelistes programmeerimiskeeltes, kasutades Kubernetes klienditeeki. Kui kasutate Go-d, siis saate samuti kasutada cli-runtime teeki, mis on loodud spetsiaalselt kubectl pistikute kirjutamiseks.

Kuidas oma pistikuid jagada

Kui arvate, et teie pistikud võivad olla teistele kasulikud, ärge kartke neid GitHubis jagada. Lisage need kindlasti teema kubectl-plugins.

Samuti võite paluda oma pistiku lisamist Krew nimekirja. Juhised selle kohta, kuidas seda teha, leiate GitHubi hoidlast.

Käsu automaatne täiendamine

Praegu ei toeta pistikud automaatset täiendamist. See tähendab, et peate sisestama pistiku täispika nime ja argumendi täispika nime.

GitHubi kubectl hoidlas on selle funktsiooni jaoks avatud päring. Seega on võimalik, et see funktsioon viiakse kunagi ellu.

Edu!!!

Mida veel teemast lugeda:

  1. Kuberneteses on kolm taset automaatset skaleerimist ja kuidas neid tõhusalt kasutada.
  2. Kubernetes piraatluses juurutamise malliga.
  3. Meie kanal Kubernetesest Telegramis.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster