Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Kui töötate Kubernetesega, on tõenäoliselt kubectl üks teie enimkasutatavaid tööriistu. Iga kord, kui raiskate palju aega teatud tööriistaga töötamiseks, tasub see hästi selgeks õppida ja õppida, kuidas seda tõhusalt kasutada.

Meeskond Kubernetes aaS Mail.ru-lt tõlkis Daniel Weibel artikli, milles leiate näpunäiteid ja nippe kubectliga tõhusaks töötamiseks. Samuti aitab see sügavamalt mõista Kubernetesega töötamist.

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 kui õpite kubectli tõhusamalt kasutama, peate saama põhilise arusaama sellest, mis see on ja kuidas see töötab.

Kasutaja seisukohalt on kubectl juhtpaneel, mis võimaldab teostada Kubernetesega seotud toiminguid.

Tehniliselt on kubectl Kubernetes API klient.

Kubernetes API on HTTP REST API. See API on Kubernetes tõeline kasutajaliides, mille kaudu seda täielikult juhitakse. See tähendab, et iga Kubernetes toiming esitatakse kui API lõpp-punkt ja selle käivitamine toimub HTTP-päringu kaudu sellele lõpp-punktile.

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

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Kubernetes on täielikult ressursikeskne süsteem. See tähendab, et see toetab ressursside sisemist olekut ning kõik Kubernetesega seotud toimingud on CRUD operatsioonid.

Te kontrollite täielikult Kuberneteset, hallates neid ressursse, ning Kubernetes määrab, mida teha, põhinedes ressursside praegusele olekule. Selle tõttu on Kubernetes API link korraldatud ressursside tüüpide nimekirjana koos seotud toimingutega.

Vaatame näidet.

Oletame, et soovite luua ReplicaSeti ressursi. Selleks kirjeldate ReplicaSeti faili nimega replicaset.yaml, seejärel käivitate käsu:

$ kubectl create -f replicaset.yaml

Tulemuseks luuakse ReplicaSeti ressurss. Kuid mis juhtub kulisside taga?

Kuberneteses on ReplicaSeti loomise toiming. Nagu iga teine toiming, on see saadaval kui API lõpp-punkt. Konkreetne API lõpp-punkt selle operatsiooni jaoks näeb välja selline:

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

Kubernetes API kõigi toimingute lõpp-punkte saab leida API käsiraamatust (sealhulgas üles loetletud lõpp-punkt). Ette, et tegelikku päringut lõpp-punktile teha, peate eelnevalt lisama API-serveri URL lõpp-punktide teedele, mis on loetletud API dokumentatsioonis.

Seetõttu, kui täidate ülaltoodud käsku, saadab kubectl HTTP POST päringu ülaltoodud API lõpp-punktile. ReplicaSeti määratlemine, mille määrasite failis replicaset.yaml, edastatakse päringu kehas.

Just nii töötab kubectl kõikide käskude jaoks, mis suhtlevad Kubernetes klastriga. Kõigil nendel juhtudel saadab kubectl lihtsalt HTTP päringud vastavatesse Kubernetes API lõpp-punktidesse.

Pange tähele, et Kubernetesit saab täielikult hallata selliste utiliitide abil nagu curl, käsitsi saates HTTP päringud Kubernetes API-le. Kubectl lihtsalt lihtsustab Kubernetes API kasutamist.

Need on alused sellest, mis on kubectl ja kuidas see töötab. Kuid on veel midagi Kubernetes API-st, mida iga kubectl kasutaja peaks teadma. Vaatame lühidalt lähemale Kubernetes'i sisemaailmale.

Kubernetes'i sisemaailm

Kubernetes koosneb sõltumatute komponentide kogumist, mis töötavad klastris sõlmede eraldiseisvate protsessidena. Mõned komponendid töötavad peamistes sõlmedes, teised töösõlmedes, iga komponent täidab oma erilist ülesannet.

Siin on kõige olulisemad komponendid peamistel sõlmedel:

  1. Salvestus — salvestab ressursside määratlusi (tavaliselt on see etcd).
  2. API-server — pakub API-d ja haldab salvestust.
  3. Kontrollerelementide haldur — tagab, et ressursside staatused vastavad spetsifikatsioonidele.
  4. Planeerija — plaanib podid töösõlmedes.

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

  1. on hakanud kasutama — haldab konteinerite käivitamist töösõlmes.

Et mõista, kuidas need komponendid koos töötavad, vaatame näidet.

Eeldame, et olete just käivitanud kubectl create -f replicaset.yaml, pärast mida tegi kubectl HTTP POST päringu ReplicaSet API lõpp-punktile (edastades ReplicaSeti ressurssi määratlemise).

Mis toimub klastris?

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

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

  2. Seejärel käivitatakse ReplicaSeti kontrollerelement kontrollerelementide halduris, mis teenindab ReplicaSeti ressursside loomist, muutmist ja kustutamist:

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

  3. ReplicaSeti kontrollerelement loob podi määratlemise iga ReplicaSeti koopia jaoks (vastavalt podi malli määratlemisele ReplicaSeti määratluses) ja salvestab need salvestusse:

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

  4. Käivitub planeerija, mis jälgib pods'e, mis pole veel määratud ühele töönodele:

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

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

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

  6. Töönode'l, kellele pod on määratud, käivitub Kubelet, mis jälgib sellele node'ile määratud pod'e:

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

  7. Kubelet loeb pod'i määratlust andmehoidmisest ja annab konteinerite käitamiseks käsud konteinerite käitamise keskkonnale, näiteks Docker:

    Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend

Allpool on selle kirjelduse tekstiversioon.

API päring ReplicaSet'i loomisekohta töödeldakse API serveri poolt. API server autentib päringu ja salvestab ReplicaSet'i ressursi määratlust andmehoidmisse.

See sündmus käivitab ReplicaSet'i kontrolleri, mis on kontrollprotsessori alamprotsess. ReplicaSet'i kontroller jälgib ReplicaSet'i ressursside loomist, uuendamist ja kustutamist andmehoidmises ning saab teate sündmuse kohta, kui see toimub.

ReplicaSet'i kontrolleri ülesanne on veendelda, et ReplicaSet'i soovitud arvu pod'e on olemas. Meie näites pod'e veel ei ole, seega loodud ReplicaSet'i määratlused (vastavalt ReplicaSet'i määratluse pod'i mallile) ja salvestatakse andmehoidmisse.

Uute pod'ide loomine käivitab planeerija, mis jälgib pod'i määratlusi, mis pole veel töönode'le planeeritud. Planeerija valib igale pod'ile sobiva töönode ja uuendab pod'i määratlusi andmehoidmises.

Pange tähele, et siiani ei ole klastris kusagil koormuse koodi executed. Kõik, mis on seni tehtud, on andmete loomine ja uuendamine andmehoidmises peamises node's.

Viimane sündmus käivitab Kubelet'i, mis jälgib nende töönode'ite pod'e. Kubelet töönode'l, kuhu teie ReplicaSet'i pod'id on määratud, peab andma käsu konteinerite käitamise keskkonnale, näiteks Docker, laadida vajalikud konteineri pildid ja käivitada need.

Sel hetkel on lõpuks teie ReplicaSet'i rakendus käivitatud!

Kubernetes API roll

Nagu nägite eelnevas näites, jälgivad Kubernetes'i komponendid (välja arvatud API server ja andmehoidmine) andmehoidmises ressursside muutusi ja muudavad andmehoidmises ressursside teavet.

Muidugi ei suhtle need komponendid otse salvestusega, vaid ainult läbi Kubernetes API.

Vaadakem järgmisi näiteid:

  1. ReplicaSeti kontroller kasutab API lõpp-punkti list ReplicaSets c parameetriga watch resursside ReplicaSet muutuste jälgimiseks.
  2. ReplicaSeti kontroller kasutab API lõpp-punkti create Pod (loo pod) podide loomiseks.
  3. Planeerija kasutab API lõpp-punkti patch Pod (muuda pod) podide värskendamiseks valitud töönode teabega.

Kuidas näete, on see sama API, mida kasutab kubectl. Sama API kasutamine sisemistest komponentidest ja välistest kasutajatest on Kubernetes'i disaini põhikontseptsioon.

Nüüd võime kokku võtta, kuidas Kubernetes töötab:

  1. Salvestus hoiab olekut, st Kubernetes ressursse.
  2. API server pakub liidese salvestusele Kubernetes API kujul.
  3. Kõik muud Kubernetes'i komponendid ja kasutajad loevad, jälgivad ja manipuleerivad Kubernetes'i olekuga (resurssidega) läbi API.

Nende kontseptsioonide tundmine aitab paremaks mõista kubectl'i ja kasutada seda maksimaalselt.

Nüüd vaatame rida konkreetseid nõuandeid ja nippe, mis aitavad tõsta kubectl'i kasutamise efektiivsust.

1. Sisendi kiirus käsu täiendamise abil

Üks kõige kasulikumaid, kuid sageli tähelepanuta jäetud nippe, mis aitavad suurendada kubectl'i töö efektiivsust, on käsu täiendamine.

Käsku täiendamine võimaldab automaatselt täita üksikuid osi kubectl'i käskudest Tab klahviga. See töötab alamkäskude, valikute ja argumentide jaoks, sealhulgas keeruliste, nagu ressursside nimed.

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

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Käsku täiendamine töötab Bash ja Zsh käsurea tõlgendajate jaoks.

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

Kuidas käsu täiendamine töötab

Käsku täiendamine on käsurea funktsioon, mis töötab täiendusskripti abil. Täiendusskript on käsurea skript, mis määrab täiendamise käitumise konkreetse käsu jaoks.

Kubectl genereerib automaatselt ja väljastab täiendusskriptid Bash ja Zsh jaoks järgmiste käskudega:

$ kubectl completion bash

Või:

$ kubectl completion zsh

Teoreetiliselt piisab nende käskude väljundi liitmisest vastava käsurea tõlgendajaga, et kubectl saaks käske täiendama.

Praktiliselt erineb ühendamise viis Bash'i (sealhulgas erinevused Linuxi ja MacOS-i vahel) ning Zsh-i puhul. Allpool vaatleme kõiki neid 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

Sa saad testida, kas paket on edukalt installitud, kasutades järgmist käsku:

$ type _init_completion

Kui selle käigus kuvatakse shelli funktsiooni kood, siis on bash-completion õigesti installitud. Kui käsk annab vea «Ei leitud», on vajalik lisada järgmine rida oma faili ~ /.bashrc:

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

Kas tuleb see rida faili lisada ~ /.bashrc või mitte, sõltub kasutatud paketihaldurist, millega bash-completion installiti. APT puhul on see vajalik, YUM-i puhul mitte.

Pärast bash-completion'i installimist tuleb kõik seadistada nii, et kubectl täiendusskript oleks kõikides shelli seanssides aktiveeritud.

Üks viis seda teha on lisada järgmine rida faili ~ /.bashrc:

source <(kubectl completion bash)

Teine viis on lisada kubectl täiendusskript katalooge /etc/bash_completion.d (looge see, kui see ei eksisteeri):

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

Katalooge olevad kõik täiendusskriptid /etc/bash_completion.d aktsepteeritakse automaatselt bash-completion'is.

Mõlemad variandid kehtivad võrdselt.

Pärast terminali taaskäivitamist töötab kubectl käskude automaatne täiendamine.

Bash MacOS-is

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

Vanema Bash'i versiooni kasutamine MacOS-is on seotud litsentsimise küsimustega. Bash versioon 4 levitatakse GPLv3 litsentsi all, mida Apple ei toeta.

Et seadistada kubectl automaatset täiendamist MacOS-is, tuleb installida uuem Bash'i versioon. Samuti saad installida värskendatud Bash'i vaikeshelliks, mis säästab sind tulevikus paljusid probleeme. See ei ole keeruline, üksikasjad on artiklis "Bash'i värskendamine MacOS-is».

Enne jätkamist kontrolli, et kasutad värsket Bash'i versiooni (kontrolli väljundit bash --version).

Automaatse täiendamise skript Bash'is sõltub projektist bash-completion, seega tuleb seda kõigepealt installida.

Sa saad installida bash-completion'i, kasutades Homebrew:

$ brew install bash-completion@2

Siin @2 tähendab bash-completion versiooni 2. kubectl-i automaatne täiendamine nõuab bash-completion v2, kuid bash-completion v2 nõuab, et Bash versioon oleks vähemalt 4.1.

Käskluse väljund brew-install sisaldab jaotist Caveats, kus on märgitud, 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 neid ridu lisada mitte ~/.bash_profiletoob kaasa selle, et "saadetamise" hetkel server ei ole veel käivitatud ja kõik läheb katki. ~/bashrc. Sel juhul on automaatne täiendamine saadaval mitte ainult põhiterminalis, vaid ka alamterminalides.

Pärast terminali taaskäivitamist saate installatsiooni õigsust kontrollida järgmist käsku kasutades:

$ type _init_completion

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

Nüüd tuleb teha nii, et kubectl-i automaatne täiendamine oleks kõigis sessioonides sisse lülitatud.

Üks viis on lisada järgmine rida teie ~/bashrc:

source <(kubectl completion bash)

Teine viis 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 juhul, kui olete bash-completioni installinud Homebrew abil. Sel juhul laadib bash-completion kõik skriptid sellest kataloogist.

Kui olete installinud kubectl Homebrew abil, siis ei pea te eelmist etappi tegema, kuna automaatse täiendamise skript paigutatakse automaatselt kausta /usr/local/etc/bash_completion.d installimise ajal. Sel juhul hakkab kubectl-i automaatne täiendamine tööle kohe, kui olete bash-completioni installinud.

Kokkuvõttes on kõik need variandid ekvivalentsete.

Zsh

Zsh-i automaatse täiendamise skriptid ei vaja mingeid sõltuvusi. Kõik, mida on vaja, on nende sisselülitamine terminali laadimisel.

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

source <(kubectl completion zsh)

Kui pärast terminali taaskäivitamist saate vea not found: compdef , peate lubama sisseehitatud funktsiooni compdef. Selle saate lubada, lisades faili algusesse ~/.zshrc järgmist:

autoload -Uz compinit
compinit

2. Kiire ülevaade ressursi spetsifikatsioonidest

Kui loote YAML-i ressursi määratlusi, peate teadma nende ressursside välju ja nende väärtusi. Üks koht, kust seda teavet leida, on API juhend, mis sisaldab kõikide ressursside täielikke spetsifikatsioone.

Kuid iga kord, kui peate midagi otsima, on veebibrauserisse vahetamine ebamugav. Seetõttu pakub kubectl käsku ), mis näitab kõiki ressursi spetsifikatsioone otse teie terminalis.

Käskude formaat on järgmine:

$ kubectl explain resource[.field]...

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

Vaikimisi ) näitab ainult väljade esimese taseme sisestusi.

Vaata, kuidas see välja näeb funktsioonide aktiveerimist tuleb kutsuda esile spetsiaalne nutikas virtuaalne funktsioon. Olemas on ka teised kaitsemehhanismid..

Kõik puu on võimalik kuvada, kui lisada valik --recursive:

$ kubectl selgita deployment.spec --recursive

Kui te ei tea täpselt, millised ressursid vajate, võite kuvada kõik järgmise käsu abil:

$ kubectl api-resources

See käsk kuvab ressursside nimed mitmuses, näiteks deployments asemel deployment. Samuti kuvab lühinime, näiteks deploy, nende ressursside jaoks, millel see on. Ärge muretsege nende erinevuste pärast. Kõik need nimevariandid on kubectl jaoks ekvivalentne. See tähendab, et saate igaüht neist kasutada ).

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

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

3. Kasutage kohandatud veergude väljundvormingut

Vaikimisi on käsu väljundvorming kubectl get:

$ kubectl get pods
NIME                     VALMIS    SEISUND    KORDUSED  VANUS
engine-544b6b6467-22qr6   1/1     Käivitamisel     0       78d
engine-544b6b6467-lw5t8   1/1     Käivitamisel     0       78d
engine-544b6b6467-tvgmg   1/1     Käivitamisel     0       78d
web-ui-6db964458-8pdw4    1/1     Käivitamisel     0       78d

See formaat on mugav, kuid sisaldab piiratud koguses teavet. Võrreldes ressursi täieliku määratlemise vorminguga, kuvatakse siin vaid mõned välja.

Sellisel juhul on võimalik kasutada kohandatud veergude väljundvormingut. See võimaldab määrata, milliseid andmeid kuvada. Saate kuvada iga ressursi välja eraldi veerus.

Kohandatud vormingu kasutamine määratakse valikute abil:

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

Saate määratleda iga väljundi veeru paariga

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

Vaadakem lihtsat näidet:

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

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

Väljund sisaldab ühte veergu podide nimedega.

Valem valikus valib podide nimed välja metadata.name. See on tingitud sellest, et podi nimi määratakse allolevas välja name ala metadata podide ressursi määratluses. Üksikasjalikumalt saab tutvuda API juhendis või sisestada käsk kubectl selgita pod.metadata.name.

Oletame nüüd, et soovite väljundisse lisada täiendava veeru, näiteks näidates, millisel sõlm korraldatakse iga pod. Selle saavutamiseks võite lihtsalt lisada vastava veeru määratluse 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äljend valib sõlme nime spec.nodeName — kui pod määratakse sõlmele, kirjutatakse selle nimi podi ressursi määratlemise väljal. spec.nodeName Ajakohast teavet saab vaadata väljundist kubectl explain pod.spec.nodeName.

Arvestage, et Kubernetes'i ressursiväljad on suuruse suhtes tundlikud.

Saate vaadata igat ressursivälja veeruna. Lihtsalt vaadake ressursi spetsifikatsiooni ja proovige seda igasuguste väljadega, mis teile meeldivad.

Enne kui vaatame kantavaid valikute väljendeid, uurime neid täpsemalt.

JSONPathi väljendid

Ressursiväljade valiku väljendid põhinevad JSONPathil.

JSONPath on keel andmete valimiseks JSON-dokumentidest. Ühevälja valimine on JSONPathi kõige lihtsam kasutusjuht. Sellel on paljurohkem võimalusi, sealhulgas valijad, filtrid jne.

Kubectl explain toetab piiratud arvu JSONPathi võimalusi. Allpool on kirjeldatud võimalusi ja näiteid nende kasutamisest:

# Выбрать все элементы списка
$ 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'

Eriline tähendus on operaatoril []. Paljusid Kubernetes'i ressursivälju loetakse loenditeks ja see operaator võimaldab valida nende loendite elemente. Seda kasutatakse sageli koos asendusmärgiga nagu [*], et valida kõik loendi elemendid.

Application examples

Kohandatud veeruväljundi kasutamise võimalused on piiramatu, kuna saate väljundisse kuvada mis tahes ressursi välja või väljade kombinatsiooni. Siin on mõned rakenduste näited, kuid ärge kartke neid ise uurida ja leida endale kasulikke kasutusviise.

  1. Konteinerite piltide kuvamine podide jaoks:
    $ 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

    See käsk kuvab konteinerite pildid iga podi jaoks.

    Pidage meeles, et all võib olla mitu konteinerit, seega kuvatakse pildite nimed ühes reas koma kaudu.

  2. Muutujate kättesaadavuse näitamine sõlmedes:
    $ 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 näitab iga sõlme kättesaadavuse tsooni.

    Kättesaadavuse tsoon on pilvetermin, mis piirab replikatsioonitsooni geograafilise piirkonnaga.

    Iga sõlme kättesaadavuse tsoon saadakse spetsiaalse sildiga — failure-domain.beta.kubernetes.io/zone. Kui klaster töötab avalikus pilves, luuakse see sild automaatselt ja täidetakse iga sõlme kättesaadavuse tsooni nimedega.

    Sildid ei ole Kubernetes'i ressursside spetsifikatsiooni osa, seega ei leidu teavet nende kohta API juhendis. Kuid neid on võimalik näha (nagu ka kõiki teisi silte), kui küsida sõlmede teavet YAML või JSON formaadis:

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

    See on suurepärane viis rohkemate ressursside tundmaõppimiseks, lisaks ressursside spetsifikatsioonide uurimisele.

4. Lihtne vahetamine klastrite ja nimedomeenide vahel

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

Kubeconfig faili vaikimisi nimi on ~/.kube/config. Üldjuhul luuakse või värskendatakse seda faili erilise käsuga.

Kui töötate mitme klastri juures, sisaldab teie kubeconfig fail nende kõikide klastrite ühendusparameetreid. Teil on vaja viisi, kuidas öelda kubectl käsule, millise konkreetselt klastri juures töötate.

Klastri sees saate luua mitu nimedoma — üks variant virtuaalse klassi loomise sees füüsilises klastris. Kubectl määrab, millist nimedoma kasutada, samuti kubeconfig faili andmete põhjal. See tähendab, et teil on samuti vaja viisi, kuidas öelda kubectl käsule, millise nimedoma juures töötada.

Selles peas räägime, kuidas see töötab ja kuidas saavutada tõhusat tööd.

Pange tähele, et teil võib olla mitu kubeconfigi faili, mis on loetletud keskkonna muutujas KUBECONFIG. Sellisel juhul koondatakse kõik need failid ühte üldisse konfigureerimise failisse täitmise ajal. Samuti saate muuta vaikimisi kasutatavat kubeconfigi faili, käivitades kubectl koos parameetriga --kubeconfig. Vaata ametlikku dokumentatsiooni.

Kubeconfigi failid

Vaadakem, mida täpselt sisaldab kubeconfigi fail:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Nagu näete, sisaldab kubeconfigi fail kontekste. Kontekst koosneb kolmest elemendist:

  • Klaster — API serveri URL klastrele.
  • Kasutaja — autentimise mandaadid klastris.
  • Nimi ruum — nimeruumi kasutamine klastrisse ühendamisel.

Praktiliselt kasutatakse sageli ühte konteksti iga klastre jaoks oma kubeconfigi failis. Siiski võib teil olla mitu konteksti klastrile, mis erinevad kasutaja või nimeruumi poolest. Siiski ei esine selline mitmekontextiline konfigureerimine sageli, mistõttu eksisteerib tavaliselt ühemõtteline seos klastrite ja kontekstide vahel.

Igal ajal on üks kontekst aktiivne:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Kui kubectl loeb konfigureerimisfaili, võetakse alati teavet aktiivsest kontekstist. Ülaltoodud näites ühendub kubectl klastriga Hare.

Seega, et vahetada teise klastrisse, tuleb muuta aktiivset konteksti kubeconfigi failis:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Nüüd ühendub kubectl klastriga Fox.

Et vahetada teise nimeruumi samas klastris, tuleb muuta aktiivse konteksti nimeruumi elemendi väärtust:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Ülaltoodud näites kasutab kubectl klastris Fox nimeruumi Prod (varem oli seadistatud nimeruumi Test).

Pange tähele, et kubectl pakub ka parameetreid --klaster, --kasutaja, --nimeruum ja --kontekst, mis võimaldavad üle kirjutada üksikute elementide ja aktiivse konteksti väärtuse, sõltumata sellest, mis on seadistatud kubeconfigi failis. Vaata kubectl valikud.

Teoreetiliselt võite käsitsi muuta parameetreid kubeconfigi failis. Kuid see on ebamugav. Nende operatsioonide lihtsustamiseks on olemas erinevad utiliidid, mis võimaldavad parameetreid automaatselt muuta.

Kasutage kubectx

Väga populaarne utiliit klastrite ja nimeruumide vahetamiseks.

Utiliit pakub käske kubectx ja kubens praeguste konteksti ja nime ruumi muutmiseks vastavalt.

Nagu juba öeldud, tähendab praeguse konteksti muutmine klastrite muutmist, kui teil on ainult üks kontekst klastris.

Siin on näide nende käskude käitamisest:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Sisuliselt redigeerivad need käsud lihtsalt kubeconfigi faili, nagu eespool kirjeldatud.

Kohandamiseks kubectx, järgige juhiseid lehelt Github.

Mõlemad käsud toetavad konteksti ja nime ruumide automaatset täiendamist, mis võimaldab neid täielikult mitte sisestada. Juhised automaatse täiendamise seadistamiseks siit.

Teine kasulik funktsioon kubectx on interaktiivne režiim. See töötab koos utiliidiga fzf, mille tuleb eraldi installida. Fzf installimine teeb automaatselt interaktiivse režiimi kergesti kättesaadavaks kubectx. Interaktiivses režiimis saate valida konteksti ja nime ruumi fzf poolt pakutava vaba otsingu interaktiivse liidese kaudu.

Käskude aliase kasutamine

Te ei vaja eraldi tööriistu praeguse konteksti ja nime ruumi muutmiseks, kuna kubectl pakub sellele ka käske. Seega käsk kubectl config pakub alamkäskusid kubeconfigi failide redigeerimiseks.

Siin on mõned neist:

  • kubectl config get-contexts: kõigi kontekstide väljastamine;
  • kubectl config current-context: praeguse konteksti saamine;
  • kubectl config use-context: praeguse konteksti muutmine;
  • kubectl config set-context: konteksti elemendi muutmine.

Kuid nende käskude otsene kasutamine pole väga mugav, kuna need on pikad. Nende jaoks saab luua käsuliidese aliase, mida on kerge kasutada.

Olen loonud komplekti aliaseid, mis põhinevad nendel käskudel, mis pakuvad funktsioone, mis sarnanevad kubectx-ile. Siin näete nende toimimist:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Pange tähele, et aliased kasutavad fzf-d, et pakkuda interaktiivset vaba otsingu liidest (nagu kubectx interaktiivne režiim). See tähendab, et peate installima fzf, et neid aliaseid kasutada.

Siin on aliase määratlemise 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/^..//")"'

Need aliased installimiseks peate ülaltoodud määratlused lisama oma faili ~/bashrc või ~/.zshrc ja oma shelli taaskäivitama.

Pluginade kasutamine

Kubectl võimaldab välja laadida pluginaid, mis töötavad samamoodi nagu põhikäsud. Näiteks võite installida plugina kubectl-foo ja käivitada selle, täites käsu kubectl foo.

Oleks, et see oleks mugav konteksti ja nimede ruumi sellisel viisil vahetada, näiteks käivitades kubectl ctx konteksti vahetamiseks ja kubectl ns nimede ruumi vahetamiseks.

Olen kirjutanud kaks plugina, mis seda teevad:

Pluginad põhinevad eelmisel jaotisel alias'eil.

Nii need töötavad:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik juhend
Pange tähele, et pluginad kasutavad fzf-d interaktiivse vabade otsingu liidese pakkumiseks (nagu interaktiivselt kubectx'is). See tähendab, et teil on vaja installima fzf, et neid aliaseid kasutada.

Pluginade installimiseks laadige alla skriptid nimega kubectl-ctx ja kubectl-ns mis tahes katalooge oma PATH'i muutujas ja tehke need täitmiseks kasutatavaks, näiteks kasutades chmod +x. Kohe pärast seda saate kasutada kubectl ctx ja kubectl ns.

5. Sisendi lühendamine automaatsete alias'idega

Käskude alias'id on hea võimalus sisendi kiirus. Projekt kubectl-aliases sisaldab umbes 800 lühendit peamistele kubectl käskudele.

Võite imestada - kuidas mäletada 800 alias't? Kuid pole vajalik neid kõiki mäletada, kuna need on üles ehitatud lihtsa skeemi järgi, mis on esitatud allpool:

Kuidas efektiivsemalt kasutada kubectl: üksikasjalik 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 alias'id komponentidest, millest igaüks tähistab teatud elementi kubectl käsust. Igal alias'il võib olla üks komponent põhikäsule, toimingule ja ressursile ning mitme komponendiga parameetrite jaoks. Täidate lihtsalt need komponendid vasakult paremale vastavalt ülaltoodud skeemile.

Praegune detailne skeem on aadressil GitHub. Sealt leiate ka täieliku nimekirja alias'itest.

Näiteks alias kgpooyamlall on võrdne käsuga kubectl get pods -o yaml --all-namespaces.

Valikute suhteline järjekord ei ole oluline: käsk kgpooyamlall on võrreldav käsuga kgpoalloyaml.

Te ei pea kõik komponente alias'idesse kasutama. Näiteks k, kg, klo, ksys, kgpo võib samuti kasutada. Rohkemgi veel, käsureal saate segada alias'e ja tavalisi käske või valikuid:

Näiteks:

  1. Asenda kubectl proxy saab kirjutada k proxy.
  2. Asenda kubectl get roles saab kirjutada kg roles (praegu ei ole alias't ressursside jaoks Roles).
  3. Et saada andmeid konkreetse poodi, saate kasutada käsku kgpo my-pod — kubectl get pod my-pod.

Pöörake tähelepanu, et mõned alias'id nõuavad käsureal argumenti. Näiteks alias kgpol tähendab kubectl get pods -l. Valik õpivad nõuab argumenti — märgiste spetsifikatsiooni. Kui kasutate alias't, näeb see välja nagu kgpol app=ui.

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

Üldiselt, kui olete selle skeemi omandanud, saate intuitiivselt genereerida alias'e käskudest, mida soovite täita, ja säästa palju aega sisendil.

Installatsioon

Kuna kubectl-aliases'i installimiseks peate alla laadima faili .kubectl_aliases GitHub'ist ja lisama selle faili ~/bashrc või ~/.zshrc:

source ~\ .kubectl_aliases

Autotäiendamine

Kuidas me enne ütlesime, lisate sageli käskudele, mida kirjutate käsureale, täiendavaid sõnu. Näiteks:

$ kgpooyaml test-pod-d4b77b989

Kui kasutate kubectl'i autotäiendamist, siis tõenäoliselt olete kasutanud autotäiendamist 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, jääte ilma mõnest alias'e eelisest.

Vastus sõltub sellest, millist käsurea ümbrust te kasutate:

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

Alias'ide autotäiendamise lubamine Bash'is

Probleem Bash'is seisneb selles, et see üritab alati täiendada (iga kord, kui vajutate Tab), alias't, mitte käsku, millele alias viitab (nagu näiteks teeb Zsh). Kuna teil ei ole täiendamise skripte kõigi 800 alias'i jaoks, ei tööta autotäiendamine.

Projekt complete-alias pakub sellele probleemile üldlahendust. See ühendub alias'ide täiendamise mehhanismiga, täiendab alias't käsuks ja tagastab täiendatud käsu täiendamise võimalused. See tähendab, et alias'e täiendamine käitub täpselt samamoodi nagu täieliku käsku täiendamine.

Edasi selgitan kõigepealt, kuidas complete-alias'it installida, ja seejärel, kuidas seda seadistada, et lubada täiendamine kõigi kubectl'i alias'ide jaoks.

complete-alias'i installimine

Esiteks sõltub complete-alias bash-completion. Seetõttu peate complete-alias'i installimise eel kindlasti veenduma, et bash-completion on installitud. Installimise juhised on varem antud Linuxi ja MacOSe jaoks.

Oluline märkus MacOS'i kasutajatele: nagu ka kubectl'i autotäiendamise skript, complete-alias ei tööta Bash 3.2-ga, mis on vaikimisi MacOS'is. Spetsiaalselt 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 complete-aliasi kasutamiseks MacOS-is tuleb installida uuem versioon Bashist.

Teil on vaja alla laadida skript bash_completion.sh API-s GitHubi hoidlast ja lisada see oma faili ~/bashrc:

source ~/bash_completion.sh

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

Autokomplekteerimise lubamine kubectl alias'ide jaoks

Tehniliselt pakub complete-alias shell-funktsiooni _complete_alias. See funktsioon kontrollib alias'e ja tagastab autokomplekteerimise soovitused alias'i käsule.

Funktsiooni sidumiseks kindla alias'iga tuleb kasutada sisseehitatud Bash-mekhanismi complete, et seadistada _complete_alias alias'i autokomplekteerimise funktsioonina.

Näiteks võtame alias'e k, mis tähistab käsu kubectl. Selle seadistamiseks _complete_alias autokomplekteerimise funktsioonina selle alias'ile peate käivitama järgmise käsu:

$ complete -F _complete_alias k

Tulemuseks on see, et iga kord, kui te autokomplekteerite alias'e k, kutsutakse funktsioon _complete_alias, mis kontrollib alias'e ja tagastab soovitused käsule. kubectl.

Teise näitena vaatame alias'e kg, mis tähistab kubectl get:

$ complete -F _complete_alias kg

Sarnaselt eelmisele näitele, kui te autokomplekteerite kg, saate samad autokomplekteerimise soovitused, mida saaksite. kubectl get.

Pidage meeles, et complete-aliasi saab kasutada igasuguste alias'ide jaoks teie süsteemis.

Seega, et lubada autokomplekteerimine kõigi kubectl alias'ide jaoks, tuleb ülaltoodud käsk igaühe jaoks käivitada. Järgmine fragment teeb just seda, eeldades, et olete installinud kubectl-aliased ~/ .kubectl-aliases:

for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//

Dear user, please place this piece of code in your ~/bashrc, taaskäivitage käsurea ja kõik 800 kubectl alias'ile on autokomplekteerimine saadaval.

6. kubectli laiendamine pluginatega

Alates versioonis 1.12, toetab kubectl pluginamehanismi, mis võimaldab laiendada selle funktsioone täiendavate käskudega.

Kui olete tuttav GitPliginamehanismidega, siis on kubectl pluginad üles ehitatud samamoodi.

Selles peatükis räägime, kuidas pluginaid installida, kust neid leida ja kuidas oma pluginaid luua.

Pluginate installimine

Kubectl lisasid on jagatud lihtsate käivitatavate failidena nimega kubectl-x. Eesliide kubectl- on kohustuslik ja sellele järgneb uus kubectl alamakäsk, mis võimaldab pluginat käivitada.

Näiteks, plugin hello jagatakse faili nimega kubectl-hello.

Pluginat installimiseks peate faili kopeerima kubectl-x oma PATH muutuja igasse katalooge ja tegema selle käivitatavaks, näiteks kasutades chmod +x. Juba peale seda saate pluginat käivitada järgmise käsuga kubectl x.

Kasutage järgmist käsku, et kuvada loetelu kõikidest pluginatest, mis on praegu teie süsteemis installitud:

$ kubectl plugin list

See käsk kuvab ka hoiatuseid, kui teil on mitu sama nimega pluginat või kui on olemas pluginafail, mis ei ole käivitatav.

Pluginate otsimine ja installimine Krew'i abil

Kubectl pluginad on jagatavad või taaskasutatavad nagu tarkvarapaketid. Kuid kust leida pluginaid, mida teised on jaganud?

Krew projekt on suunatud kubectl pluginate jagamise, otsimise, installationi ja haldamise ühtse lahenduse pakkumisele. Projekt nimetab end "kubectl pluginate paketihalduriks" (Krew on sarnane Brew).

Krew on kubectl pluginate loetelu, mida saate valida ja installida. Sellega on Krew ka kubectl plugin.

See tähendab, et Krew'i installimine toimib põhimõtteliselt nagu iga muu kubectl plugina installimine. Leiate üksikasjalikud juhised GitHub'i lehelt.

Krew'i kõige olulisemad käsklused:

# Поиск в списке плагинов
$ 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 pluginate installimine Krew'i abil ei takista pluginate installimist tavalisel viisil, nagu eespool kirjeldatud.

Pange tähele, et käsk kubectl krew list kuvab ainult need pluginad, mis on installitud Krew'i kaudu, samas kui käsk kubectl plugin list loetleb kõik pluginaid, st need, mis on installitud Krew'i kaudu ja need, mis on installitud muul viisil.

Pluginate otsimine muudest kohtadest

Krew on noor projekt, praegu on selle loendis kokku umbes 30 pluginat. Kui te ei leia vajalikke, võite leida pluginaid mujalt, näiteks GitHub'ist.

Soovitan vaadata GitHub'i jaotist kubectl-plugins. Sealt leiate mitukümmend saadaval olevat pluginat, mida tasub vaadata.

Oma pluginite kirjutamine

Sa saad ise pluginte loomine — see ei ole keeruline. Pead looma käivitust faili, mis teeb vajalikku, nimetama selle kubectl-x ja paigaldama, nagu eespool kirjeldatud.

Fail võib olla bash-skript, python-skript või kompileeritud Go rakendus — see ei oma tähtsust. Ainus tingimus on see, et see peab olema operatsioonisüsteemis otse käivitatav.

Lähme looma näidis pluginat kohe nüüd. Eelmisel jaosal kasutasite käsku kubectl konteinerite loendi kuvamiseks iga pods. Seda käsku on lihtne muuta pluginaks, mida saate kutsuda näiteks kubectl img.

Looge fail kubectl-img järgneva sisu:

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

Nüüd tehke fail käivitatavaks kasutades chmod +x kubectl-img ja liigutage see mõnda oma PATH kausta. Otse pärast seda saate kasutada pluginat kubectl img.

Nagu juba mainitud, võivad kubectl pluginad olla kirjutatud mis tahes programmeerimiskeeles või skriptis. Kui kasutate käsurea skripte, siis on eelis lihtne kutsuda kubectl-d pluginast. Siiski võite kirjutada keerukamaid pluginaid päris programmeerimiskeeltes, kasutades Kubernetes kliendi raamatukogu. Kui kasutate Go, saate ka kasutada cli-runtime raamatukogu, mis on loodud spetsiaalselt kubectl pluginite kirjutamiseks.

Kuidas jagada oma pluginaid

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

Samuti saate taotleda oma plugina lisamist Krew nimekirja. Juhised selle kohta, kuidas seda teha, leiate GitHubi hoidlas.

Käskude automaatne täiendamine

Praegu ei toeta pluginad automaatset täiendamist. See tähendab, et peate sisestama plugina täisnime ja kõik argumentide täisnimed.

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

Edu!!!

Mida veel selle kohta lugeda:

  1. Kubernetes'is on kolm automaatskaalumise taset ja kuidas neid tõhusalt kasutada.
  2. 🥇Kuidas rahulikult magada, kui teil on pilveteenus: peamised arhitektuuri nõuanded | ProHoster.
  3. Meie Tee Kuberneetes kanal Telegrmis.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster