Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Ja strādājat ar Kubernetes, iespējams, kubectl ir viena no visbiežāk izmantotajām utilītprogrammām. Un ikreiz, kad pavadāt daudz laika, strādājot ar konkrētu rīku, ir vērts to rūpīgi izpētīt un iemācīties to efektīvi izmantot.

Komanda Kubernetes aaS no Mail.ru iztulkojis Daniela Veibela rakstu, kurā atradīsit padomus un ieteikumus, kā efektīvi strādāt ar kubectl. Tas arī palīdzēs jums iegūt dziļāku izpratni par Kubernetes.

Kā norāda autors, raksta mērķis ir padarīt jūsu ikdienas darbu ar Kubernetes ne tikai efektīvāku, bet arī patīkamāku!

Ievads: Kas ir kubectl

Lai iemācītos efektīvāk lietot kubectl, jums ir jāiegūst pamatzināŔanas par to, kas tas ir un kā tas darbojas.

No lietotāja viedokļa kubectl ir vadības panelis, kas ļauj veikt Kubernetes darbības.

Tehniski runājot, kubectl ir Kubernetes API klients.

Kubernetes API ir HTTP REST API. Å Ä« API ir patiesā Kubernetes lietotāja saskarne, ar kuras palÄ«dzÄ«bu tā tiek pilnÄ«bā kontrolēta. Tas nozÄ«mē, ka katra Kubernetes darbÄ«ba ir pakļauta API galapunktam, un to var veikt ar HTTP pieprasÄ«jumu Å”im galapunktam.

Tāpēc kubectl galvenais uzdevums ir veikt HTTP pieprasījumus Kubernetes API:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Kubernetes ir pilnÄ«bā uz resursiem orientēta sistēma. Tas nozÄ«mē, ka tas uztur resursu iekŔējo stāvokli un visas Kubernetes darbÄ«bas ir CRUD darbÄ«bas.

Pārvaldot Å”os resursus, jÅ«s pilnÄ«bā kontrolējat Kubernetes, un Kubernetes izdomā, kā rÄ«koties, pamatojoties uz paÅ”reizējo resursu stāvokli. Å Ä« iemesla dēļ Kubernetes API atsauce ir sakārtota kā resursu tipu saraksts ar tiem saistÄ«tajām darbÄ«bām.

Apskatīsim piemēru.

Pieņemsim, ka vēlaties izveidot ReplicaSet resursu. Lai to izdarītu, failā ir jāapraksta ReplicaSet pēc nosaukuma replicaset.yaml, pēc tam palaidiet komandu:

$ kubectl create -f replicaset.yaml

Tādējādi tiks izveidots ReplicaSet resurss. Bet kas notiek aizkulisēs?

Kubernetes ir ReplicaSet izveides darbÄ«ba. Tāpat kā jebkura cita darbÄ«ba, tā tiek atklāta kā API galapunkts. Konkrētais API galapunkts Å”ai darbÄ«bai izskatās Ŕādi:

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

API galapunktus visām Kubernetes operācijām var atrast vietnē API atsauce (ieskaitot iepriekÅ” minētais beigu punkts). Lai veiktu faktisku pieprasÄ«jumu galapunktam, vispirms ir jāpievieno API servera URL galapunkta ceļiem, kas ir norādÄ«ti API atsaucē.

Tādējādi, izpildot iepriekÅ” minēto komandu, kubectl nosÅ«ta HTTP POST pieprasÄ«jumu iepriekÅ” minētajam API galapunktam. ReplicaSet definÄ«cija, ko norādÄ«jāt failā replicaset.yaml, tiek nosÅ«tÄ«ts pieprasÄ«juma pamattekstā.

Šādi kubectl darbojas visām komandām, kas mijiedarbojas ar Kubernetes klasteru. Visos Ŕajos gadījumos kubectl vienkārŔi veic HTTP pieprasījumus attiecīgajiem Kubernetes API galapunktiem.

LÅ«dzu, ņemiet vērā, ka jÅ«s varat pilnÄ«bā pārvaldÄ«t Kubernetes, izmantojot tādu utilÄ«tu kā curlmanuāli nosÅ«tot HTTP pieprasÄ«jumus uz Kubernetes API. Kubectl vienkārÅ”i atvieglo Kubernetes API lietoÅ”anu.

Å ie ir pamati tam, kas ir kubectl un kā tas darbojas. Taču Kubernetes API ir vēl kas, kas jāzina katram kubectl lietotājam. ÄŖsi ieskatÄ«simies Kubernetes iekŔējā pasaulē.

Kubernetes iekŔējā pasaule

Kubernetes sastāv no neatkarÄ«gu komponentu kopas, kas darbojas kā atseviŔķi procesi klasteru mezglos. Daži komponenti darbojas uz galvenajiem mezgliem, citi uz darba mezgliem, katrs komponents veic savu konkrēto uzdevumu.

Šeit ir norādīti svarīgākie galveno mezglu komponenti:

  1. Velvju - saglabā resursu definīcijas (parasti tas ir utt).
  2. API serveris — nodroÅ”ina API un pārvalda krātuvi.
  3. Kontroliera vadÄ«tājs — NodroÅ”ina, lai resursu statusi atbilstu specifikācijām.
  4. Plānotājs — ieplāno podi darbinieku mezglos.

Un Ŕeit ir viens vissvarīgākais darbinieku mezglu komponents:

  1. kubelet — pārvalda konteineru palaiÅ”anu darba mezglā.

Lai saprastu, kā Å”ie komponenti darbojas kopā, apskatÄ«sim piemēru.

Pieņemsim, ka esat tikko pabeidzis kubectl create -f replicaset.yaml, pēc kura kubectl veica HTTP POST pieprasījumu uz ReplicaSet API galapunkts (nododot ReplicaSet resursa definīciju).

Kas notiek klasterī?

  1. Pēc izdarīŔanas kubectl create -f replicaset.yaml API serveris saglabā jÅ«su ReplicaSet resursa definÄ«ciju krātuvē:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

  2. Pēc tam kontroliera pārvaldniekā tiek palaists ReplicaSet kontrolleris, kas apstrādā ReplicaSet resursu izveidi, modificēŔanu un dzēŔanu:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

  3. Kontrolieris ReplicaSet izveido aplikuma definīciju katrai ReplicaSet replikai (saskaņā ar apdaļa veidni ReplicaSet definīcijā) un saglabā tos krātuvē:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

  4. Tiek palaists plānotājs, kas izseko podi, kas vēl nav pieŔķirti nevienam darbinieka mezglam:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

  5. Plānotājs atlasa piemērotu darbinieka mezglu katram podam un pievieno Å”o informāciju pod definÄ«cijai veikalā:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

  6. Darbinieka mezglā, kuram ir pieŔķirts pods, tiek palaists Kubelet, tas izseko Ŕim mezglam pieŔķirtos aplikumus:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

  7. Kubelet nolasa pod definīciju no krātuves un uzdod konteinera izpildlaikam, piemēram, Docker, palaist konteinerus mezglā:

    Kā efektīvāk izmantot kubectl: detalizēts ceļvedis

Tālāk ir sniegta Ŕī apraksta teksta versija.

API pieprasījumu ReplicaSet izveides galapunktam apstrādā API serveris. API serveris autentificē pieprasījumu un saglabā ReplicaSet resursa definīciju krātuvē.

Å is notikums palaiž kontroliera ReplicaSet, kas ir kontrollera pārvaldnieka apakÅ”process. Kontrolieris ReplicaSet uzrauga ReplicaSet resursu izveidi, atjaunināŔanu un dzēŔanu veikalā un saņem paziņojumu par notikumu, kad tas notiek.

ReplicaSet kontrollera uzdevums ir nodroÅ”ināt, lai bÅ«tu nepiecieÅ”amais ReplicaSet podiņu skaits. MÅ«su piemērā vēl nepastāv aplikumu, tāpēc ReplicaSet kontrolleris izveido Ŕīs aplikumu definÄ«cijas (saskaņā ar ReplicaSet definÄ«cijas aplikumu veidni) un saglabā tās krātuvē.

Jaunu aplikumu izveidi aktivizē plānotājs, kas seko līdzi definīcijām, kas vēl nav ieplānotas darbinieku mezgliem. Plānotājs atlasa piemērotu darbinieka mezglu katram pod un atjaunina pod definīcijas repozitorijā.

Ņemiet vērā, ka lÄ«dz Å”im klasterÄ« nekur nedarbojās neviens darba slodzes kods. Viss, kas lÄ«dz Å”im ir izdarÄ«ts Sākot no tā ir resursu izveide un atjaunināŔana galvenā mezgla repozitorijā.

Pēdējais notikums aktivizē Kubelets, kas uzrauga to darbinieku mezgliem paredzētos aplikumus. Tā darbinieka mezgla Kubelet, kurā ir instalēti jÅ«su ReplicaSet podi, ir jānorāda konteinera izpildlaikam, piemēram, Docker, lejupielādēt nepiecieÅ”amos konteinera attēlus un palaist tos.

Šajā brīdī jūsu ReplicaSet lietojumprogramma beidzot darbojas!

Kubernetes API loma

Kā redzējāt iepriekŔējā piemērā, Kubernetes komponenti (izņemot API serveri un krātuvi) vēro izmaiņas krātuvē esoÅ”ajos resursos un maina informāciju par resursiem krātuvē.

Protams, Ŕie komponenti nesadarbojas ar krātuvi tieŔi, bet tikai caur Kubernetes API.

Apsveriet Ŕādus piemērus:

  1. ReplicaSet kontrolleris izmanto API galapunktu sarakstu ReplicaSets ar parametru watch lai pārraudzītu izmaiņas ReplicaSet resursos.
  2. ReplicaSet kontrolleris izmanto API galapunktu izveidot Pod (izveidot pāksti), lai izveidotu pākstis.
  3. Plānotājs izmanto API galapunktu ielāpu pods (rediģēt aplikumu), lai atjauninātu aplikumus ar informāciju par atlasīto darbinieka mezglu.

Kā redzat, Ŕī ir tā pati API, kurai piekļūst kubectl. Viena un tā paÅ”a API izmantoÅ”ana iekŔējiem komponentiem un ārējiem lietotājiem ir Kubernetes dizaina pamatjēdziens.

Tagad mēs varam apkopot, kā darbojas Kubernetes:

  1. Krātuves veikalos ir norādīts, tas ir, Kubernetes resursi.
  2. API serveris nodroŔina saskarni ar krātuvi Kubernetes API veidā.
  3. Visi pārējie Kubernetes komponenti un lietotāji lasa, novēro un manipulē ar Kubernetes stāvokli (resursiem), izmantojot API.

Zinot Å”os jēdzienus, varēsit labāk izprast kubectl un gÅ«t no tā maksimālu labumu.

Tagad apskatīsim dažus konkrētus padomus un trikus, kas palīdzēs uzlabot jūsu produktivitāti, izmantojot kubectl.

1. Paātriniet ievadi, izmantojot komandu pabeigŔanu

Viens no visnoderÄ«gākajiem, bet bieži vien ignorētajiem paņēmieniem veiktspējas uzlaboÅ”anai ar kubectl ir komandu pabeigÅ”ana.

Komandu pabeigÅ”ana ļauj automātiski pabeigt kubectl komandu daļas, izmantojot taustiņu Tab. Tas attiecas uz apakÅ”komandām, opcijām un argumentiem, tostarp kaut ko tik sarežģītu kā resursu nosaukumi.

Skatiet, kā darbojas kubectl komandas pabeigŔana:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Komandu pabeigŔanas darbi Bash un Zsh apvalkiem.

Oficiālais ceļvedis satur detalizētus norādÄ«jumus par automātiskās pabeigÅ”anas iestatīŔanu, bet tālāk mēs sniegsim Ä«su izrakstu.

Kā darbojas komandu pabeigŔana

Komandas pabeigÅ”ana ir čaulas lÄ«dzeklis, kas darbojas, izmantojot pabeigÅ”anas skriptu. PaplaÅ”inājuma skripts ir čaulas skripts, kas nosaka paplaÅ”inājuma darbÄ«bu konkrētai komandai.

Kubectl automātiski Ä£enerē un izvada paplaÅ”inājumu skriptus Bash un Zsh, izmantojot Ŕādas komandas:

$ kubectl completion bash

Или:

$ kubectl completion zsh

Teorētiski pietiek savienot Å”o komandu izvadi ar atbilstoÅ”o komandu apvalku, lai kubectl varētu papildināt komandas.

ŠŠ° практике — способ ŠæŠ¾Š“ŠŗŠ»ŃŽŃ‡ŠµŠ½ŠøŃ Š¾Ń‚Š»ŠøŃ‡Š°ŠµŃ‚ŃŃ Š“Š»Ń Bash (Š²ŠŗŠ»ŃŽŃ‡Š°Ń Ń€Š°Š·Š»ŠøŃ‡ŠøŃ межГу Linux Šø MacOS) Šø Zsh. ŠŠøŠ¶Šµ мы рассмотрим все ŃŃ‚Šø варианты.

Bash в Linux

Bash pabeigÅ”anas skripts ir atkarÄ«gs no bash pabeigÅ”anas pakotnes, tāpēc vispirms tas jāinstalē:

$ sudo apt-get install bash-completion

Или:

$ yum install bash-completion

Varat pārbaudÄ«t, vai pakotne ir veiksmÄ«gi instalēta, izmantojot Ŕādu komandu:

$ type _init_completion

Ja tas izvada čaulas funkcijas kodu, bash-completion ir instalēta pareizi. Ja komanda rada kļūdu ā€œNav atrastsā€, failam jāpievieno Ŕāda rinda ~ / .bashrc:

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

Vai ir nepiecieÅ”ams failam pievienot Å”o rindu ~ / .bashrc vai nē, ir atkarÄ«gs no pakotņu pārvaldnieka, kuru izmantojāt bash-completion instalēŔanai. Tas ir nepiecieÅ”ams APT, bet ne YUM.

Pēc bash-completion instalēŔanas viss ir jākonfigurē, lai kubectl pabeigÅ”anas skripts bÅ«tu iespējots visās čaulas sesijās.

Viens veids, kā to izdarīt, ir failam pievienot Ŕādu rindu ~ / .bashrc:

source <(kubectl completion bash)

Vēl viens veids ir pievienot direktorijam kubectl paplaÅ”inājuma skriptu /etc/bash_completion.d (izveidojiet to, ja tā neeksistē):

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

Visi pievienojumprogrammu skripti katalogā /etc/bash_completion.d tiek automātiski iekļauti bash pabeigŔanā.

Abas iespējas ir vienādi piemērojamas.

Pēc čaulas restartēŔanas darbosies kubectl komandas pabeigÅ”ana.

Bash operētājsistēmā MacOS

Operētājsistēmā MacOS iestatīŔana ir nedaudz sarežģītāka. Fakts ir tāds, ka pēc noklusējuma MacOS izmanto Bash versiju 3.2, un kubectl automātiskās pabeigÅ”anas skriptam ir nepiecieÅ”ama Bash versija vismaz 4.1, un tas nedarbojas Bash 3.2.

Pastāv licencēŔanas problēmas, kas saistÄ«tas ar novecojuÅ”as Bash versijas izmantoÅ”anu operētājsistēmā MacOS. Bash versija 4 ir licencēta saskaņā ar GPLv3, ko Apple neatbalsta.

Lai konfigurētu kubectl automātisko pabeigÅ”anu operētājsistēmā MacOS, jāinstalē jaunāka Bash versija. Varat arÄ« iestatÄ«t atjaunināto Bash kā noklusējuma apvalku, kas nākotnē ietaupÄ«s no daudzām problēmām. Tas nav grÅ«ti, sÄ«kāka informācija ir sniegta rakstā "Bash atjaunināŔana operētājsistēmā MacOS'.

Pirms turpināt, pārliecinieties, vai izmantojat jaunāko Bash versiju (pārbaudiet izvadi bash --version).

Bash pabeigÅ”anas skripts atŔķiras atkarÄ«bā no projekta bash-pabeigÅ”ana, tāpēc vispirms tas jāinstalē.

Jūs varat instalēt bash-completion, izmantojot Homebrew:

$ brew install bash-completion@2

Å eit @2 apzÄ«mē bash-completion versiju 2. kubectl automātiskajai pabeigÅ”anai ir nepiecieÅ”ama bash-completion v2, un bash-completion v2 nepiecieÅ”ama vismaz Bash versija 4.1.

Komandu izvade brew-install satur sadaļu Brīdinājumi, kas norāda, kas jāpievieno failam ~/.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"

Tomēr es iesaku Ŕīs rindas nepievienot ~/.bash_profileun ~/.bashrc. Å ajā gadÄ«jumā automātiskā pabeigÅ”ana bÅ«s pieejama ne tikai galvenajos, bet arÄ« bērnu komandu apvalkos.

Pēc komandu čaulas restartēŔanas varat pārbaudÄ«t, vai instalēŔana ir pareiza, izmantojot Ŕādu komandu:

$ type _init_completion

Ja izvadā redzat čaulas funkciju, tad viss ir pareizi konfigurēts.

Tagad mums ir jānodroÅ”ina, lai kubectl automātiskā pabeigÅ”ana bÅ«tu iespējota visās sesijās.

Viens veids ir pievienot Ŕādu rindiņu savai ~/.bashrc:

source <(kubectl completion bash)

Otrs veids ir pievienot mapei automātiskās pabeigŔanas skriptu /usr/local/etc/bash_completion.d:

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

Å Ä« metode darbosies tikai tad, ja instalējāt bash-completion, izmantojot Homebrew. Å ajā gadÄ«jumā bash-completion ielādē visus skriptus no Ŕī direktorija.

Ja instalējāt kubectl, izmantojot Homebrew, tad nav jāveic iepriekŔējā darbÄ«ba, jo automātiskās pabeigÅ”anas skripts tiks automātiski ievietots mapē /usr/local/etc/bash_completion.d uzstādīŔanas laikā. Å ajā gadÄ«jumā kubectl automātiskā pabeigÅ”ana sāks darboties, tiklÄ«dz bÅ«sit instalējis bash-completion.

Rezultātā visas Ŕīs iespējas ir lÄ«dzvērtÄ«gas.

Zsh

Zsh automātiskās pabeigÅ”anas skriptiem nav nepiecieÅ”amas nekādas atkarÄ«bas. Viss, kas jums jādara, ir jāiespējo tie, kad ielādējat komandas apvalku.

To var izdarīt, pievienojot rindiņu savam ~/.zshrc fails:

source <(kubectl completion zsh)

Ja tiek parādÄ«ta kļūda not found: compdef pēc čaulas restartēŔanas ir jāiespējo iebÅ«vētā funkcija compdef. Varat to iespējot, pievienojot to faila sākumā ~/.zshrc Ŕādi:

autoload -Uz compinit
compinit

2. Ātri apskatiet resursu specifikācijas

Veidojot YAML resursu definÄ«cijas, jums jāzina lauki un to nozÄ«me Å”iem resursiem. Viena vieta, kur meklēt Å”o informāciju, ir API atsauce, kurā ir ietvertas pilnÄ«gas visu resursu specifikācijas.

Tomēr pārslēgties uz tÄ«mekļa pārlÅ«kprogrammu katru reizi, kad jums kaut kas jāmeklē, ir neērti. Tāpēc kubectl nodroÅ”ina komandu kubectl explain, kas parāda visu resursu specifikācijas tieÅ”i jÅ«su terminālÄ«.

Komandas formāts ir Ŕāds:

$ kubectl explain resource[.field]...

Komanda izvadīs pieprasītā resursa vai lauka specifikāciju. Parādītā informācija ir identiska API rokasgrāmatā ietvertajai informācijai.

Pēc noklusējuma kubectl explain parāda tikai pirmo lauku ligzdoÅ”anas lÄ«meni.

Skatiet, kā tas izskatās Pēc tam varat.

Ja pievienojat opciju, varat parādīt visu koku --recursive:

$ kubectl explain deployment.spec --recursive

Ja precīzi nezināt, kuri resursi ir nepiecieŔami, varat tos visus parādīt ar Ŕādu komandu:

$ kubectl api-resources

Å Ä« komanda parāda resursu nosaukumus daudzskaitļa formā, piem. deployments nevis deployment. Tas parāda arÄ«, piemēram, Ä«so nosaukumu deploy, tiem resursiem, kuriem tas ir. Neuztraucieties par Ŕīm atŔķirÄ«bām. Visas Ŕīs nosaukÅ”anas opcijas ir lÄ«dzvērtÄ«gas kubectl. Tas ir, jÅ«s varat izmantot jebkuru no tiem kubectl explain.

Visas Ŕīs komandas ir lÄ«dzvērtÄ«gas:

$ kubectl explain deployments.spec
# или
$ kubectl explain deployment.spec
# или        
$ kubectl explain deploy.spec

3. Izmantojiet pielāgotu kolonnas izvades formātu

Noklusējuma komandas izvades formāts 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

Å is formāts ir ērts, taču tajā ir ierobežots informācijas apjoms. SalÄ«dzinot ar pilnas resursa definÄ«cijas formātu, Å”eit tiek parādÄ«ti tikai daži lauki.

Šajā gadījumā varat izmantot pielāgotu kolonnas izvades formātu. Tas ļauj jums noteikt, kādus datus izvadīt. Jebkuru resursu lauku var parādīt kā atseviŔķu kolonnu.

Pielāgota formāta izmantoŔana tiek noteikta, izmantojot Ŕādas opcijas:

-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]...

Katru izvades kolonnu var definēt kā pāri <header>:<jsonpath>Kur <header> ir kolonnas nosaukums un <jsonpath> — izteiksme, kas definē resursa lauku.

ApskatÄ«sim vienkārÅ”u piemēru:

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

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

Izvadā ir viena kolonna ar pākstu nosaukumiem.

Opcijas izteiksme no lauka atlasa aplikumu nosaukumus metadata.name. Tas ir tāpēc, ka aplikuma nosaukums ir definēts bērna nosaukuma laukā metadata pāksts resursa aprakstā. Sīkāku informāciju var atrast API rokasgrāmata vai ierakstiet komandu kubectl explain pod.metadata.name.

Tagad pieņemsim, ka vēlaties izvadei pievienot papildu kolonnu, piemēram, parādot mezglu, kurā darbojas katrs pods. Lai to izdarÄ«tu, pielāgoto kolonnu opcijai varat vienkārÅ”i pievienot atbilstoÅ”o kolonnu specifikāciju.

$ 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

Izteiksme atlasa mezgla nosaukumu no spec.nodeName — ja mezglam ir pieŔķirts pods, laukā tiek ierakstÄ«ts tā nosaukums spec.nodeName pod resursu specifikācija. SÄ«kāku informāciju var atrast izlaidumā kubectl explain pod.spec.nodeName.

Lūdzu, ņemiet vērā, ka Kubernetes resursu lauki ir reģistrjutīgi.

Jebkuru resursu lauku var skatÄ«t kā kolonnu. VienkārÅ”i pārskatiet resursa specifikāciju un izmēģiniet to ar jebkuru lauku, kas jums patÄ«k.

Bet vispirms tuvāk apskatīsim lauku atlases izteiksmes.

JSONPath izteiksmes

Izteiksmes resursu lauku atlasei ir balstītas uz JSONPath.

JSONPath ir valoda datu izgūŔanai no JSON dokumentiem. Viena lauka atlase ir vienkārŔākais JSONPath lietoÅ”anas gadÄ«jums. Viņam ir daudz vairāk iespēju, tostarp atlasÄ«tājus, filtrus un tā tālāk.

Kubectl paskaidrojums atbalsta ierobežotu skaitu JSONPath lÄ«dzekļu. Tālāk ir aprakstÄ«tas to izmantoÅ”anas iespējas un piemēri:

# Š’Ń‹Š±Ń€Š°Ń‚ŃŒ все ŃŠ»ŠµŠ¼ŠµŠ½Ń‚Ń‹ списка
$ 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'

ÄŖpaÅ”i svarÄ«gs ir operators []. Daudzi Kubernetes resursu lauki ir saraksti, un Å”is operators ļauj atlasÄ«t Å”o sarakstu dalÄ«bniekus. To bieži izmanto ar aizstājējzÄ«mi, piemēram, [*], lai atlasÄ«tu visus saraksta elementus.

Lietojumprogrammu piemēri

Pielāgota kolonnas izvades formāta izmantoÅ”anas iespējas ir bezgalÄ«gas, jo izvadē varat parādÄ«t jebkuru lauku vai resursu lauku kombināciju. Å eit ir daži lietotņu paraugi, taču izpētiet tās pats un atrodiet sev piemērotas lietojumprogrammas.

  1. Tiek rādīti konteineru attēli pākstīm:
    $ 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

    Šī komanda parāda konteinera attēla nosaukumus katram aplikumam.

    Atcerieties, ka podā var būt vairāki konteineri, tad attēlu nosaukumi tiks parādīti vienā rindā, atdalot tos ar komatiem.

  2. Tiek rādītas mezglu pieejamības zonas:
    $ 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

    Šī komanda ir noderīga, ja jūsu klasteris ir mitināts publiskā mākonī. Tas parāda katra mezgla pieejamības zonu.

    Pieejamības zona ir mākoņa koncepcija, kas ierobežo replikācijas zonu ar ģeogrāfisko reģionu.

    Katra mezgla pieejamības zonas tiek iegūtas, izmantojot īpaŔu etiķeti - failure-domain.beta.kubernetes.io/zone. Ja klasteris darbojas publiskā mākonī, Ŕī etiķete tiek izveidota automātiski un aizpildīta ar katra mezgla pieejamības zonu nosaukumiem.

    Etiķetes neietilpst Kubernetes resursu specifikācijā, tāpēc tajā jūs neatradīsit informāciju par tām API rokasgrāmata. Tomēr tās var redzēt (tāpat kā jebkuras citas etiķetes), ja pieprasāt informāciju par mezgliem YAML vai JSON formātā:

    $ kubectl get nodes -o yaml
    # или
    $ kubectl get nodes -o json

    Tas ir lielisks veids, kā papildus apgūt resursu specifikācijas, uzzināt vairāk par resursiem.

4. Ērti pārslēdzieties starp klasteriem un nosaukumvietām

Kad kubectl iesniedz pieprasījumu Kubernetes API, tas vispirms nolasa kubeconfig failu, lai iegūtu visus savienojumam nepiecieŔamos parametrus.

Pēc noklusējuma kubeconfig fails ir ~/.kube/config. Parasti Å”is fails tiek izveidots vai atjaunināts ar Ä«paÅ”u komandu.

Strādājot ar vairākiem klasteriem, jūsu kubeconfig failā ir iestatījumi savienojuma izveidei ar visiem Ŕiem klasteriem. Jums ir nepiecieŔams veids, kā kubectl komandai pateikt, ar kuru klasteru strādājat.

KlasterÄ« varat izveidot vairākas nosaukumvietas ā€” virtuāla klastera veidu fiziskā klasterÄ«. Kubectl arÄ« nosaka, kuru nosaukumvietu izmantot, pamatojoties uz kubeconfig failu. Tas nozÄ«mē, ka jums ir nepiecieÅ”ams arÄ« veids, kā komandai kubectl norādÄ«t, ar kādu nosaukumvietu strādāt.

Šajā nodaļā mēs izskaidrosim, kā tas darbojas un kā panākt, lai tas darbotos efektīvi.

Ņemiet vērā, ka jums var bÅ«t vairāki kubeconfig faili, kas norādÄ«ti vides mainÄ«gajā KUBECONFIG. Å ajā gadÄ«jumā visi Å”ie faili izpildes laikā tiks apvienoti vienā kopējā konfigurācijā. Varat arÄ« mainÄ«t noklusējuma kubeconfig failu, palaižot kubectl ar parametru --kubeconfig. Skaties oficiālā dokumentācija.

kubeconfig faili

Apskatīsim, kas tieŔi ir kubeconfig failā:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Kā redzat, kubeconfig fails satur kontekstu kopu. Konteksts sastāv no trim elementiem:

  • Klasteris — klastera servera API URL.
  • Lietotājs ā€” lietotāja autentifikācijas akreditācijas dati klasterÄ«.
  • Nosaukumtelpa — nosaukumvieta, kas tiek izmantota, pievienojoties klasterim.

Praksē viņi savā kubeconfig bieži izmanto vienu kontekstu katrai klasterim. Tomēr vienam klasterim var bÅ«t vairāki konteksti, kas atŔķiras pēc lietotāja vai nosaukumvietas. Tomēr Ŕī vairāku kontekstu konfigurācija ir retāk sastopama, tāpēc parasti starp klasteriem un kontekstiem ir savstarpēja kartēŔana.

Jebkurā brīdī aktuāls ir viens no kontekstiem:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Kad kubectl nolasa konfigurācijas failu, tas vienmēr ņem informāciju no paÅ”reizējā konteksta. IepriekÅ” minētajā piemērā kubectl izveidos savienojumu ar Hare kopu.

AttiecÄ«gi, lai pārslēgtos uz citu klasteru, kubeconfig failā ir jāmaina paÅ”reizējais konteksts:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Tagad kubectl izveidos savienojumu ar Fox klasteru.

Lai pārslēgtos uz citu nosaukumvietu tajā paŔā klasterÄ«, ir jāmaina paÅ”reizējā konteksta nosaukumvietas elementa vērtÄ«ba:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
IepriekÅ” minētajā piemērā kubectl izmantos Fox klastera Prod nosaukumvietu (iepriekÅ” tika iestatÄ«ta Testa nosaukumvieta).

Ņemiet vērā, ka kubectl nodroÅ”ina arÄ« opcijas --cluster, --user, --namespace Šø --context, kas ļauj pārrakstÄ«t atseviŔķus elementus un paÅ”u paÅ”reizējo kontekstu neatkarÄ«gi no tā, kas ir iestatÄ«ts kubeconfig. Skaties kubectl options.

Teorētiski kubeconfig iestatÄ«jumus var mainÄ«t manuāli. Bet tas ir neērti. Lai vienkārÅ”otu Ŕīs darbÄ«bas, ir dažādas utilÄ«tas, kas ļauj automātiski mainÄ«t parametrus.

Izmantojiet kubectx

Ä»oti populāra utilÄ«ta pārslēgÅ”anās starp klasteriem un nosaukumvietām.

LietderÄ«ba nodroÅ”ina komandas kubectx Šø kubens lai attiecÄ«gi mainÄ«tu paÅ”reizējo kontekstu un nosaukumvietu.

Kā minēts, paÅ”reizējā konteksta maiņa nozÄ«mē klastera maiņu, ja katrai klasterim ir tikai viens konteksts.

Å eit ir Å”o komandu izpildes piemērs:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
BÅ«tÄ«bā Ŕīs komandas vienkārÅ”i rediģē kubeconfig failu, kā aprakstÄ«ts iepriekÅ”.

lai instalētu kubectx, izpildiet norādījumus Github.

Abas komandas atbalsta konteksta un nosaukumvietas nosaukumu automātisko pabeigÅ”anu, kas novērÅ” nepiecieÅ”amÄ«bu tos ievadÄ«t pilnÄ«bā. NorādÄ«jumi automātiskās pabeigÅ”anas iestatīŔanai Å”eit.

Vēl viena noderÄ«ga funkcija kubectx ir interaktÄ«vais režīms. Tas darbojas kopā ar utilÄ«tu fzf, kas jāuzstāda atseviŔķi. Instalējot fzf, interaktÄ«vais režīms tiek automātiski pieejams kubectx. InteraktÄ«vi varat atlasÄ«t kontekstu un nosaukumvietu, izmantojot interaktÄ«vo bezmaksas meklēŔanas saskarni, ko nodroÅ”ina fzf.

Izmantojot čaulas aizstājvārdus

Jums nav nepiecieÅ”ami atseviŔķi rÄ«ki, lai mainÄ«tu paÅ”reizējo kontekstu un nosaukumvietu, jo kubectl nodroÅ”ina arÄ« komandas Å”im nolÅ«kam. Jā, komanda kubectl config nodroÅ”ina apakÅ”komandas kubeconfig failu rediģēŔanai.

Вот некоторые ŠøŠ· них:

  • kubectl config get-contexts: parādÄ«t visus kontekstus;
  • kubectl config current-context: iegÅ«t paÅ”reizējo kontekstu;
  • kubectl config use-context: mainÄ«t paÅ”reizējo kontekstu;
  • kubectl config set-context: mainiet konteksta elementu.

Tomēr Å”o komandu tieÅ”a izmantoÅ”ana nav Ä«paÅ”i ērta, jo tās ir garas. Viņiem varat izveidot čaulas aizstājvārdus, kurus ir viegli izpildÄ«t.

Es izveidoju aizstājvārdu kopu, pamatojoties uz Ŕīm komandām, kas nodroÅ”ina kubectx lÄ«dzÄ«gu funkcionalitāti. Å eit jÅ«s varat redzēt tos darbÄ«bā:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Ņemiet vērā, ka aizstājvārdi izmanto fzf, lai nodroÅ”inātu interaktÄ«vu bezmaksas uzmeklēŔanas saskarni (piemēram, kubectx interaktÄ«vo režīmu). Tas nozÄ«mē, ka jums ir nepiecieÅ”ams instalēt fzflai izmantotu Å”os aizstājvārdus.

Šeit ir paŔu aizstājvārdu definīcijas:

# ŠŸŠ¾Š»ŃƒŃ‡ŠøŃ‚ŃŒ Ń‚ŠµŠŗŃƒŃ‰ŠøŠ¹ контекст
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/^..//")"'

Lai iestatÄ«tu Å”os aizstājvārdus, failam jāpievieno iepriekÅ” minētās definÄ«cijas ~/.bashrc vai ~/.zshrc un restartējiet savu apvalku.

Izmantojot spraudņus

Kubectl ļauj ielādēt spraudņus, kas tiek izpildīti tāpat kā pamata komandas. Varat, piemēram, instalēt spraudni kubectl-foo un palaist to, izpildot komandu kubectl foo.

BÅ«tu ērti Ŕādā veidā mainÄ«t kontekstu un nosaukumvietu, piemēram, palaist kubectl ctx lai mainÄ«tu kontekstu un kubectl ns lai mainÄ«tu nosaukumvietu.

Esmu uzrakstījis divus spraudņus, kas to dara:

Spraudņu darbs ir balstÄ«ts uz aizstājvārdiem no iepriekŔējās sadaļas.

Lūk, kā tās darbojas:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Ņemiet vērā, ka spraudņi izmanto fzf, lai nodroÅ”inātu interaktÄ«vu bezmaksas meklēŔanas saskarni (piemēram, kubectx interaktÄ«vo režīmu). Tas nozÄ«mē, ka jums ir nepiecieÅ”ams instalēt fzflai izmantotu Å”os aizstājvārdus.

Lai instalētu spraudņus, jums ir jālejupielādē čaulas skripti ar nosaukumu kubectl-ctx Šø kubectl-ns uz jebkuru direktoriju jÅ«su PATH mainÄ«gajā un padariet tos izpildāmus ar piem. chmod +x. TÅ«lÄ«t pēc tam jÅ«s varēsiet izmantot kubectl ctx Šø kubectl ns.

5. Samaziniet ievadi, izmantojot automātiskos aizstājvārdus

Shell aizstājvārdi ir labs veids, kā paātrināt rakstīŔanu. Projekts kubectl-aliases satur aptuveni 800 saīsnes pamata kubectl komandām.

Jums varētu rasties jautājums – kā jÅ«s atceraties 800 aizstājvārdus? Bet jums tie visi nav jāatceras, jo tie ir veidoti pēc vienkārÅ”as shēmas, kas norādÄ«ta zemāk:

Kā efektīvāk izmantot kubectl: detalizēts ceļvedis
Piemēram:

  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 iegÅ«t izvietoÅ”anu visu sl

Kā redzat, aizstājvārdi sastāv no komponentiem, no kuriem katrs apzÄ«mē noteiktu komandas kubectl elementu. Katram aizstājvārdam var bÅ«t viens komponents pamata komandai, darbÄ«bai un resursam, un vairāki komponenti parametriem. JÅ«s vienkārÅ”i "aizpildiet" Å”os komponentus no kreisās puses uz labo saskaņā ar iepriekÅ” redzamo diagrammu.

PaÅ”reizējā detalizētā diagramma ir plkst GitHub. Tur arÄ« var atrast pilns pseidonÄ«mu saraksts.

Piemēram, aizstājvārds kgpooyamlall ir līdzvērtīgs komandai kubectl get pods -o yaml --all-namespaces.

Opciju relatīvā secība nav svarīga: komanda kgpooyamlall ir līdzvērtīga komandai kgpoalloyaml.

Jums nav jāizmanto visi komponenti kā aizstājvārdi. Piemēram k, kg, klo, ksys, kgpo var arī izmantot. Turklāt komandrindā varat kombinēt aizstājvārdus un parastās komandas vai opcijas:

Piemēram:

  1. Tā vietā, lai kubectl proxy tu vari rakstīt k proxy.
  2. Tā vietā, lai kubectl get roles tu vari rakstīt kg roles (Pagaidām lomas resursam nav aizstājvārda).
  3. Lai iegÅ«tu datus konkrētam podam, varat izmantot komandu kgpo my-pod — kubectl get pod my-pod.

LÅ«dzu, ņemiet vērā, ka dažiem aizstājvārdiem ir nepiecieÅ”ams komandrindas arguments. Piemēram, aizstājvārds kgpol nozÄ«mē kubectl get pods -l. Opcija -l nepiecieÅ”ams arguments - etiÄ·etes specifikācija. Ja izmantojat aizstājvārdu, tas izskatÄ«sies kgpol app=ui.

Tā kā dažiem aizstājvārdiem ir nepiecieÅ”ami argumenti, aizstājvārdi a, f un l ir jāizmanto pēdējie.

Kopumā, kad esat apguvis Å”o shēmu, varat intuitÄ«vi iegÅ«t aizstājvārdus no komandām, kuras vēlaties izpildÄ«t, un ietaupÄ«t daudz laika, kas nepiecieÅ”ams rakstīŔanai.

uzstādīŔana

Lai instalētu kubectl-aliases, jums ir nepiecieÅ”ams lejupielādēt failu .kubectl_aliases no GitHub un iekļaujiet to failā ~/.bashrc vai ~/.zshrc:

source ~/.kubectl_aliases

Automātiskā pabeigŔana

Kā jau teicām iepriekÅ”, jÅ«s bieži pievienojat papildu vārdus aizstājvārdam komandrindā. Piemēram:

$ kgpooyaml test-pod-d4b77b989

Ja izmantojat kubectl komandas pabeigÅ”anu, iespējams, esat izmantojis automātisko pabeigÅ”anu tādām lietām kā resursu nosaukumi. Bet vai to var izdarÄ«t, ja tiek izmantoti aizstājvārdi?

Å is ir ļoti svarÄ«gs jautājums, jo, ja automātiskā pabeigÅ”ana nedarbojas, jÅ«s zaudēsiet dažas aizstājvārdu priekÅ”rocÄ«bas.

Atbilde ir atkarīga no tā, kuru apvalku izmantojat:

  1. Attiecībā uz Zsh aizstājvārda pabeigŔana darbojas no kastes.
  2. Diemžēl BaÅ”am ir nepiecieÅ”ams zināms darbs, lai automātiskā pabeigÅ”ana darbotos.

Tiek iespējota aizstājvārdu automātiskā pabeigÅ”ana programmā Bash

Bash problēma ir tā, ka tas mēģina pabeigt (ikreiz, kad nospiežat taustiņu Tab) aizstājvārdu, nevis komandu, uz kuru atsaucas aizstājvārds (kā to dara, piemēram, Zsh). Tā kā jums nav pabeigÅ”anas skriptu visiem 800 aizstājvārdiem, automātiskā pabeigÅ”ana nedarbojas.

Projekts pilnÄ«gs aizstājvārds sniedz vispārÄ«gu Ŕīs problēmas risinājumu. Tas savienojas ar aizstājvārdu pabeigÅ”anas mehānismu, iekŔēji paplaÅ”ina aizstājvārdu lÄ«dz komandai un atgriež pabeigtās komandas pabeigÅ”anas opcijas. Tas nozÄ«mē, ka aizstājvārda polsterējums darbojas tieÅ”i tāpat kā pilnai komandai.

Tālāk es vispirms paskaidroÅ”u, kā instalēt pilnÄ«gu aizstājvārdu un pēc tam to konfigurēt, lai iespējotu visu kubectl aizstājvārdu pabeigÅ”anu.

Notiek pilnÄ«ga aizstājvārda instalēŔana

Pirmkārt, pilnÄ«gs aizstājvārds ir atkarÄ«gs no bash-pabeigÅ”ana. ŠŸŠ¾ŃŃ‚Š¾Š¼Ńƒ переГ ŃƒŃŃ‚Š°Š½Š¾Š²ŠŗŠ¾Š¹ complete-alias необхоГимо ŃƒŠ±ŠµŠ“ŠøŃ‚ŃŒŃŃ, что bash-completion ŃƒŃŃ‚Š°Š½Š¾Š²Š»ŠµŠ½. Š˜Š½ŃŃ‚Ń€ŃƒŠŗŃ†ŠøŠø по ŃƒŃŃ‚Š°Š½Š¾Š²ŠŗŠµ были Ганы ранее Š“Š»Ń Linux Šø MacOS.

SvarÄ«ga piezÄ«me MacOS lietotājiem: Tāpat kā kubectl automātiskās pabeigÅ”anas skripts, pilnÄ«gais aizstājvārds nedarbojas ar Bash 3.2, kas ir noklusējuma iestatÄ«jums operētājsistēmā MacOS. Jo Ä«paÅ”i pilnÄ«gs aizstājvārds ir atkarÄ«gs no bash-completion v2 (brew install bash-completion@2), kam nepiecieÅ”ama vismaz Bash 4.1. Tas nozÄ«mē, ka, lai izmantotu pilnÄ«gu aizstājvārdu operētājsistēmā MacOS, ir jāinstalē jaunāka Bash versija.

Jums ir nepiecieÅ”ams lejupielādēt skriptu bash_completion.sh no GitHub repozitorijs un iekļaujiet to savā failā ~/.bashrc:

source ~/bash_completion.sh

Pēc čaulas pārstartēŔanas pilnÄ«gais aizstājvārds tiks pilnÄ«bā instalēts.

Automātiskās pabeigÅ”anas iespējoÅ”ana kubectl aizstājvārdiem

Tehniski pilnÄ«gs aizstājvārds nodroÅ”ina iesaiņojuma funkciju _complete_alias. Å Ä« funkcija pārbauda aizstājvārdu un atgriež aizstājvārda komandas pabeigÅ”anas ieteikumus.

Lai saistÄ«tu funkciju ar noteiktu aizstājvārdu, ir jāizmanto iebÅ«vētais Bash mehānisms pilnÄ«gs, lai instalētu _complete_alias kā aizstājvārda pabeigÅ”anas funkcija.

Kā piemēru ņemsim aizstājvārdu k, kas apzÄ«mē komandu kubectl. lai instalētu _complete_alias Kā Ŕī aizstājvārda papildinājuma funkciju jums vajadzētu palaist Ŕādu komandu:

$ complete -F _complete_alias k

Tā rezultātā ikreiz, kad automātiski pabeidzat aizstājvārdu k, funkcija tiek izsaukta _complete_alias, kas pārbauda aizstājvārdu un atgriež komandas pabeigŔanas ieteikumus kubectl.

Kā otru piemēru ņemsim aizstājvārdu kg, kas apzīmē kubectl get:

$ complete -F _complete_alias kg

Tāpat kā iepriekŔējā piemērā, kad jÅ«s automātiski aizpildāt kg, jÅ«s saņemat tos paÅ”us pabeigÅ”anas ieteikumus, ko saņemtu kubectl get.

Ņemiet vērā, ka varat izmantot pilnu aizstājvārdu jebkuram aizstājvārdam savā sistēmā.

Tāpēc, lai iespējotu automātisko pabeigÅ”anu visiem kubectl aizstājvārdiem, katram no tiem ir jāpalaiž iepriekÅ” minētā komanda. Å is fragments dara tieÅ”i to, ja esat iestatÄ«jis kubectl-aliases uz ~/.kubectl-aliases:

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

Å is koda fragments ir jāievieto savā ~/.bashrc, restartējiet komandu apvalku, un automātiskā pabeigÅ”ana bÅ«s pieejama visiem 800 kubectl aizstājvārdiem.

6. Kubectl paplaÅ”ināŔana ar spraudņiem

Sākot no 1.12. versija, kubectl atbalsta spraudņa mehānisms, kas ļauj paplaÅ”ināt tā funkcijas ar papildu komandām.

Ja esat iepazinies ar Git spraudņu mehānismi, tad kubectl spraudņi tiek veidoti pēc tāda paÅ”a principa.

Šajā nodaļā mēs apskatīsim, kā instalēt spraudņus, kur tos atrast un kā izveidot savus spraudņus.

Spraudņu instalēŔana

Kubectl spraudņi tiek izplatÄ«ti kā vienkārÅ”i izpildāmi faili ar tādu nosaukumu kā kubectl-x. Priedēklis kubectl- ir nepiecieÅ”ama, kam seko jauna kubectl apakÅ”komanda, kas ļauj izsaukt spraudni.

Piemēram, spraudnis hello tiks izplatīts kā fails ar nosaukumu kubectl-hello.

Lai instalētu spraudni, fails ir jākopē kubectl-x uz jebkuru direktoriju jūsu PATH un padariet to izpildāmu, piemēram, ar chmod +x. Tūlīt pēc tam jūs varat izsaukt spraudni ar kubectl x.

Varat izmantot Å”o komandu, lai uzskaitÄ«tu visus jÅ«su sistēmā paÅ”laik instalētos spraudņus:

$ kubectl plugin list

Šī komanda parādīs arī brīdinājumus, ja jums ir vairāki spraudņi ar vienādu nosaukumu vai ja ir spraudņu fails, kas nav izpildāms.

Spraudņu atraÅ”ana un instalēŔana, izmantojot Krew

Kubectl spraudņus var koplietot vai izmantot atkārtoti kā programmatÅ«ras pakotnes. Bet kur var atrast spraudņus, kurus ir kopÄ«gojuÅ”i citi?

Projekts Krew mērÄ·is ir nodroÅ”ināt vienotu risinājumu kubectl spraudņu koplietoÅ”anai, meklēŔanai, instalēŔanai un pārvaldÄ«bai. Projekts sevi sauc par "kubectl spraudņu pakotņu pārvaldnieku" (Krew ir lÄ«dzÄ«gs brÅ«vēt).

Krew ir saraksts ar kubectl spraudņiem, kurus varat atlasÄ«t un instalēt. Tajā paŔā laikā Krew ir arÄ« kubectl spraudnis.

Tas nozÄ«mē, ka Krew instalēŔana bÅ«tÄ«bā darbojas tāpat kā jebkura cita kubectl spraudņa instalēŔana. Detalizētus norādÄ«jumus varat atrast vietnē GitHub lapa.

Vissvarīgākās Krew komandas ir:

# Поиск в списке плагинов
$ kubectl krew search [<query>]
# ŠŸŠ¾ŃŠ¼Š¾Ń‚Ń€ŠµŃ‚ŃŒ ŠøŠ½Ń„Š¾Ń€Š¼Š°Ń†ŠøŃŽ о плагине
$ kubectl krew info <plugin>
# Š£ŃŃ‚Š°Š½Š¾Š²ŠøŃ‚ŃŒ плагин
$ kubectl krew install <plugin>
# ŠžŠ±Š½Š¾Š²ŠøŃ‚ŃŒ все плагины Го послеГней версии
$ kubectl krew upgrade
# ŠŸŠ¾ŃŠ¼Š¾Ń‚Ń€ŠµŃ‚ŃŒ все плагины, ŃƒŃŃ‚Š°Š½Š¾Š²Š»ŠµŠ½Š½Ń‹Šµ через Krew
$ kubectl krew list
# Š”ŠµŠøŠ½ŃŃ‚Š°Š»Š»ŠøŃ€Š¾Š²Š°Ń‚ŃŒ плагин
$ kubectl krew remove <plugin>

LÅ«dzu, ņemiet vērā, ka spraudņu instalēŔana, izmantojot Krew, netraucē spraudņu instalēŔanu, izmantojot iepriekÅ” aprakstÄ«to standarta metodi.

Lūdzu, ņemiet vērā, ka komanda kubectl krew list parāda tikai spraudņus, kas tika instalēti, izmantojot Krew, savukārt komanda kubectl plugin list tiek uzskaitīti visi spraudņi, tas ir, tie, kas instalēti, izmantojot Krew, un tie, kas instalēti ar citām metodēm.

Spraudņu atraÅ”ana citur

Krew ir jauns projekts, kas paÅ”laik tiek Ä«stenots saraksts tikai aptuveni 30 spraudņi. Ja nevarat atrast vajadzÄ«go, varat atrast spraudņus citur, piemēram, GitHub.

Iesaku apskatīt GitHub sadaļu kubectl-spraudņi. Tur jūs atradīsiet desmitiem pieejamo spraudņu, kurus ir vērts pārbaudīt.

Savu spraudņu rakstīŔana

tu vari pats izveidot spraudņus – Tas nav grÅ«ti. Jums ir jāizveido izpildāmā programma, kas dara to, kas jums nepiecieÅ”ams, nosauciet to kā kubectl-x un instalējiet, kā aprakstÄ«ts iepriekÅ”.

Fails var bÅ«t bash skripts, python skripts vai kompilēta GO lietojumprogramma ā€” tam nav nozÄ«mes. VienÄ«gais nosacÄ«jums ir tas, ka to var tieÅ”i izpildÄ«t operētājsistēmā.

Tagad izveidosim spraudņa piemēru. IepriekŔējā sadaļā izmantojāt komandu kubectl, lai uzskaitÄ«tu konteinerus katram podam. Å o komandu ir viegli pārvērst par spraudni, kuru var izsaukt ar piem. kubectl img.

Izveidojiet failu kubectl-img Ŕādu saturu:

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

Tagad padariet failu izpildāmu ar chmod +x kubectl-img un pārvietojiet to uz jebkuru direktoriju savā PATH. Tūlīt pēc tam varat izmantot spraudni kubectl img.

Kā minēts, kubectl spraudņus var rakstÄ«t jebkurā programmēŔanas vai skriptu valodā. Ja izmantojat čaulas skriptus, priekÅ”rocÄ«ba ir iespēja viegli izsaukt kubectl no spraudņa. Tomēr jÅ«s varat rakstÄ«t sarežģītākus spraudņus reālās programmēŔanas valodās, izmantojot Kubernetes klientu bibliotēka. Ja izmantojat Go, varat arÄ« izmantot Cli-runtime bibliotēka, kas pastāv Ä«paÅ”i kubectl spraudņu rakstīŔanai.

Kā koplietot savus spraudņus

Ja uzskatāt, ka jūsu spraudņi varētu būt noderīgi citiem, kopīgojiet tos vietnē GitHub. Noteikti pievienojiet tos tēmai kubectl-spraudņi.

Varat arī pieprasīt, lai jūsu spraudnis tiktu pievienots Krew saraksts. Norādījumi, kā to izdarīt, ir atrodami GitHub krātuves.

Komandas izpilde

Spraudņi paÅ”laik neatbalsta automātisko pabeigÅ”anu. Tas ir, jums ir jāievada pilns spraudņa nosaukums un pilnie argumentu nosaukumi.

Å Ä«s funkcijas GitHub kubectl repozitorijā ir atklāts pieprasÄ«jums. Tāpēc ir iespējams, ka Ŕī funkcija tiks ieviesta kaut kad nākotnē.

Veiksmi!!!

Ko vēl lasīt par tēmu:

  1. TrÄ«s automātiskās mērogoÅ”anas lÄ«meņi programmā Kubernetes un to efektÄ«va izmantoÅ”ana.
  2. Kubernetes pirātisma garā ar veidni ievieŔanai.
  3. Mūsu kanāls Ap Kubernetes telegrammā.

Avots: www.habr.com

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster