
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 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:

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.yamlTÄ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}/replicasetsAPI galapunktus visÄm Kubernetes operÄcijÄm var atrast vietnÄ (ieskaitot ). 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:
- Velvju - saglabÄ resursu definÄ«cijas ().
- API serveris ā nodroÅ”ina API un pÄrvalda krÄtuvi.
- Kontroliera vadÄ«tÄjs ā NodroÅ”ina, lai resursu statusi atbilstu specifikÄcijÄm.
- PlÄnotÄjs ā ieplÄno podi darbinieku mezglos.
Un Å”eit ir viens vissvarÄ«gÄkais darbinieku mezglu komponents:
- 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 (nododot ReplicaSet resursa definÄ«ciju).
Kas notiek klasterī?
- PÄc izdarīŔanas
kubectl create -f replicaset.yamlAPI serveris saglabÄ jÅ«su ReplicaSet resursa definÄ«ciju krÄtuvÄ:
- PÄc tam kontroliera pÄrvaldniekÄ tiek palaists ReplicaSet kontrolleris, kas apstrÄdÄ ReplicaSet resursu izveidi, modificÄÅ”anu un dzÄÅ”anu:

- Kontrolieris ReplicaSet izveido aplikuma definÄ«ciju katrai ReplicaSet replikai (saskaÅÄ ar apdaļa veidni ReplicaSet definÄ«cijÄ) un saglabÄ tos krÄtuvÄ:

- Tiek palaists plÄnotÄjs, kas izseko podi, kas vÄl nav pieŔķirti nevienam darbinieka mezglam:

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

- Darbinieka mezglÄ, kuram ir pieŔķirts pods, tiek palaists Kubelet, tas izseko Å”im mezglam pieŔķirtos aplikumus:

- Kubelet nolasa pod definÄ«ciju no krÄtuves un uzdod konteinera izpildlaikam, piemÄram, Docker, palaist konteinerus mezglÄ:

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:
- ReplicaSet kontrolleris izmanto API galapunktu ar parametru
watchlai pÄrraudzÄ«tu izmaiÅas ReplicaSet resursos. - ReplicaSet kontrolleris izmanto API galapunktu (izveidot pÄksti), lai izveidotu pÄkstis.
- PlÄnotÄjs izmanto API galapunktu (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:
- KrÄtuves veikalos ir norÄdÄ«ts, tas ir, Kubernetes resursi.
- API serveris nodroÅ”ina saskarni ar krÄtuvi Kubernetes API veidÄ.
- 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:

Komandu pabeigŔanas darbi Bash un Zsh apvalkiem.
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 zshTeorÄ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-completionVarat 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Ä "'.
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 , tÄpÄc vispirms tas jÄinstalÄ.
JÅ«s varat instalÄt bash-completion, izmantojot :
$ 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_completionJa 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 , 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
compinit2. Ä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 .
Ja pievienojat opciju, varat parÄdÄ«t visu koku --recursive:
$ kubectl explain deployment.spec --recursiveJa 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.spec3. 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-8pdw4IzvadÄ 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 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 ir valoda datu izgūŔanai no JSON dokumentiem. Viena lauka atlase ir vienkÄrÅ”Äkais JSONPath lietoÅ”anas gadÄ«jums. ViÅam ir daudz , 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.
- 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.
- 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 - . 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 . 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 jsonTas 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 .
kubeconfig faili
ApskatÄ«sim, kas tieÅ”i ir kubeconfig failÄ:

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:

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:

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:

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:

BÅ«tÄ«bÄ Å”Ä«s komandas vienkÄrÅ”i rediÄ£Ä kubeconfig failu, kÄ aprakstÄ«ts iepriekÅ”.
lai instalÄtu kubectx, izpildiet norÄdÄ«jumus
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 .
VÄl viena noderÄ«ga funkcija kubectx ir . Tas darbojas kopÄ ar utilÄ«tu , 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Ä:

Å
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 lai 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:

Å
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Å”amslai izmantotu Å”os aizstÄjvÄrdus.
Lai instalÄtu spraudÅus, jums ir jÄlejupielÄdÄ Äaulas skripti ar nosaukumu Šø 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 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:

PiemÄram:
- kgpooyaml ā kubectl get pods oyaml
- ksysgsvcw ā kubectl -n kube-system get svc w
- ksysrmcm -kubectl -n kube-system rm cm
- 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 . Tur arÄ« var atrast.
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:
- TÄ vietÄ, lai
kubectl proxytu vari rakstÄ«tk proxy. - TÄ vietÄ, lai
kubectl get rolestu vari rakstÄ«tkg roles(PagaidÄm lomas resursam nav aizstÄjvÄrda). - 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 no GitHub un iekļaujiet to failÄ ~/.bashrc vai ~/.zshrc:
source ~/.kubectl_aliasesAutomÄ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-d4b77b989Ja 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:
- AttiecÄ«bÄ uz Zsh aizstÄjvÄrda pabeigÅ”ana darbojas no kastes.
- 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 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 . ŠŠ¾ŃŃŠ¾Š¼Ń ŠæŠµŃŠµŠ“ ŃŃŃŠ°Š½Š¾Š²ŠŗŠ¾Š¹ 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 no un iekļaujiet to savÄ failÄ ~/.bashrc:
source ~/bash_completion.shPÄ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 , 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 , kubectl atbalsta , kas ļauj paplaÅ”inÄt tÄ funkcijas ar papildu komandÄm.
Ja esat iepazinies ar , 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?
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 ).
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Ä .
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 tikai aptuveni 30 spraudÅi. Ja nevarat atrast vajadzÄ«go, varat atrast spraudÅus citur, piemÄram, GitHub.
Iesaku apskatÄ«t GitHub sadaļu . Tur jÅ«s atradÄ«siet desmitiem pieejamo spraudÅu, kurus ir vÄrts pÄrbaudÄ«t.
Savu spraudÅu rakstīŔana
tu vari pats ā 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 . Ja izmantojat Go, varat arÄ« izmantot , 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 .
Varat arÄ« pieprasÄ«t, lai jÅ«su spraudnis tiktu pievienots . NorÄdÄ«jumi, kÄ to izdarÄ«t, ir atrodami .
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 . TÄpÄc ir iespÄjams, ka Ŕī funkcija tiks ieviesta kaut kad nÄkotnÄ.
Veiksmi!!!
Ko vÄl lasÄ«t par tÄmu:
- .
- .
- .
Avots: www.habr.com







