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

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.yamlTulemuseks 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}/replicasetsKubernetes API kõigi toimingute lõpp-punkte saab leida (sealhulgas ). 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:
- Salvestus — salvestab ressursside määratlusi ().
- API-server — pakub API-d ja haldab salvestust.
- Kontrollerelementide haldur — tagab, et ressursside staatused vastavad spetsifikatsioonidele.
- Planeerija — plaanib podid töösõlmedes.
Ja siin on üks kõige olulisem komponent töösõlmedes:
- 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 (edastades ReplicaSeti ressurssi määratlemise).
Mis toimub klastris?
- Pärast täitmist
kubectl create -f replicaset.yamlsalvestab API-server teie ReplicaSeti ressursi määratluse salvestusse:
- Seejärel käivitatakse ReplicaSeti kontrollerelement kontrollerelementide halduris, mis teenindab ReplicaSeti ressursside loomist, muutmist ja kustutamist:

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

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

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

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

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

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:
- ReplicaSeti kontroller kasutab API lõpp-punkti c parameetriga
watchresursside ReplicaSet muutuste jälgimiseks. - ReplicaSeti kontroller kasutab API lõpp-punkti (loo pod) podide loomiseks.
- Planeerija kasutab API lõpp-punkti (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:
- Salvestus hoiab olekut, st Kubernetes ressursse.
- API server pakub liidese salvestusele Kubernetes API kujul.
- 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:

Käsku täiendamine töötab Bash ja Zsh käsurea tõlgendajate jaoks.
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 bashVõi:
$ kubectl completion zshTeoreetiliselt 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-completionVõi:
$ yum install bash-completionSa 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 "».
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 , seega tuleb seda kõigepealt installida.
Sa saad installida bash-completion'i, kasutades :
$ 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_completionKui 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/kubectlSee 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 , 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
compinit2. 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 .
Kõik puu on võimalik kuvada, kui lisada valik --recursive:
$ kubectl selgita deployment.spec --recursiveKui 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.spec3. 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 78dSee 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-8pdw4Vä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 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 .
JSONPath on keel andmete valimiseks JSON-dokumentidest. Ühevälja valimine on JSONPathi kõige lihtsam kasutusjuht. rohkem 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.
- 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 wordpressSee 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.
- 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-1bSee 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 — . 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 . 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 jsonSee 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 .
Kubeconfigi failid
Vaadakem, mida täpselt sisaldab kubeconfigi fail:

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:

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:

Nüüd ühendub kubectl klastriga Fox.
Et vahetada teise nimeruumi samas klastris, tuleb muuta aktiivse konteksti nimeruumi elemendi väärtust:

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

Sisuliselt redigeerivad need käsud lihtsalt kubeconfigi faili, nagu eespool kirjeldatud.
Kohandamiseks kubectx, järgige juhiseid lehelt
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 .
Teine kasulik funktsioon kubectx on . See töötab koos utiliidiga , 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:

Pange tähele, et aliased kasutavad fzf-d, et pakkuda interaktiivset vaba otsingu liidest (nagu kubectx interaktiivne režiim). See tähendab, et peate , 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:

Pange tähele, et pluginad kasutavad fzf-d interaktiivse vabade otsingu liidese pakkumiseks (nagu interaktiivselt kubectx'is). See tähendab, et teil on vaja, et neid aliaseid kasutada.
Pluginade installimiseks laadige alla skriptid nimega ja 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 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:

Näiteks:
- kgpooyaml - kubectl get pods oyaml
- ksysgsvcw - kubectl -n kube-system get svc w
- ksysrmcm - kubectl -n kube-system rm cm
- 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 . Sealt leiate ka.
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:
- Asenda
kubectl proxysaab kirjutadak proxy. - Asenda
kubectl get rolessaab kirjutadakg roles(praegu ei ole alias't ressursside jaoks Roles). - 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 GitHub'ist ja lisama selle faili ~/bashrc või ~/.zshrc:
source ~\ .kubectl_aliasesAutotäiendamine
Kuidas me enne ütlesime, lisate sageli käskudele, mida kirjutate käsureale, täiendavaid sõnu. Näiteks:
$ kgpooyaml test-pod-d4b77b989Kui 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:
- Zsh'i puhul töötab autotäiendamine alias'ide jaoks "välja kastist".
- 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 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 . 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 API-s ja lisada see oma faili ~/bashrc:
source ~/bash_completion.shPä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 , 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 , toetab kubectl , mis võimaldab laiendada selle funktsioone täiendavate käskudega.
Kui olete tuttav , 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 listSee 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?
on suunatud kubectl pluginate jagamise, otsimise, installationi ja haldamise ühtse lahenduse pakkumisele. Projekt nimetab end "kubectl pluginate paketihalduriks" (Krew on sarnane ).
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 .
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 kokku umbes 30 pluginat. Kui te ei leia vajalikke, võite leida pluginaid mujalt, näiteks GitHub'ist.
Soovitan vaadata GitHub'i jaotist . Sealt leiate mitukümmend saadaval olevat pluginat, mida tasub vaadata.
Oma pluginite kirjutamine
Sa saad ise — 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 . Kui kasutate Go, saate ka kasutada , 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 .
Samuti saate taotleda oma plugina lisamist . Juhised selle kohta, kuidas seda teha, leiate .
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 . Seega on võimalik, et see funktsioon viiakse tulevikus ellu.
Edu!!!
Mida veel selle kohta lugeda:
- .
- .
- .
Allikas: habr.com







