
Kui töötate Kubernetesega, on kubectl tõenäoliselt üks kõige rohkem kasutatavaid tööriistu. Ja iga kord, kui te kulutate palju aega konkreetse tööriistaga töötamisele, on mõistlik seda hästi õppida ja tõhusalt kasutada.
Meeskond Tõlkis Daniel Weibel, kus leiate nõuandeid ja näpunäiteid kubectliga tõhusaks töötamiseks. Samuti aitab see sügavamalt mõista Kubernetes, tööpõhimõtteid.
Autori sõnul on artikli eesmärk muuta teie igapäevane töö Kubernetesega mitte ainult tõhusamaks, vaid ka meeldivamaks!
Sissejuhatus: mis on kubectl
Enne kubectli tõhusama kasutamise õppimist on vajalik mõista, mis see on ja kuidas see töötab.
Kasutaja vaatenurgast on kubectl Kubernetes juhtpaneel, mis võimaldab teostada Kubernetes operatsioone.
Tehnilisest vaatest on kubectl Kubernetes API klient.
Kubernetes API — see HTTP REST API. See API on Kubernetes, mille kaudu see täielikult kontrollitakse. See tähendab, et iga Kubernetes'i operatsioon esindab API lõpp-punkte ja seda saab teostada HTTP päringu kaudu sellele lõpp-punktile.
Seega, kubectl peamine ülesanne on saata HTTP päringud Kubernetes API-le:

Kubernetes on täielikult ressursipõhine süsteem. See tähendab, et see toetab baasressursside olekut ja kõik Kubernetes'e operatsioonid on CRUD operatsioonid.
Te kontrollite Kubernetes't täielikult, hallates neid ressursse, ning Kubernetes määrab, mida teha, lähtudes ressursi hetkeolukorrast. Seetõttu on Kubernetes'i API lingid organiseeritud ressursitüüpide loendina, millel on seotud operatsioonid.
Vaadakem näidet.
Oletame, et soovite luua ReplicaSet'i ressursi. Selleks kirjeldage ReplicaSet'i failis nimega replicaset.yaml, siis käivitage käsk:
$ kubectl create -f replicaset.yamlTulemusena luuakse ReplicaSet'i ressurs. Aga mis toimub kulisside taga?
Kubernetesis on ReplicaSet loomise operatsioon. Nagu iga teine operatsioon, on see saadaval API lõpppunktina. Antud operatsiooni API lõpppunkt näeb välja järgmine:
POST /apis/apps/v1/namespaces/{namespace}/replicasetsKubernetes kõigi operatsioonide API lõpppunkte saab leida (sealhulgas ). Et teha tegelik päring lõpppunti, tuleb eelnevalt lisada API serveri URL lõpppunktide teedele, mis on loetletud API käsiraamatus.
Seega, kui täidate eelnevalt nimetatud käsku, saadab kubectl HTTP POST päringu eelnevalt mainitud API lõpppunkti. ReplicaSeti määratlemine, mille olete määranud failis replicaset.yaml, edastatakse päringu kehas.
Just nii töötab kubectl kõigi käskudega, mis suhtlevad Kubernetes klastriga. Kõigis nendes olukordades saadab kubectl lihtsalt HTTP-päringud vastavatesse Kubernetes API lõpppunktidesse.
Pange tähele, et Kubernetesit saab täielikult hallata sellise tööriista kaudu nagu curl, saates käsitsi HTTP-päringud Kubernetes API-sse. Kubectl lihtsalt lihtsustab Kubernetes API kasutamist.
See, mis on kubectl ja kuidas see töötab. Kuid on veel üks asi Kubernetes API-st, mille kohta peab iga kubectl kasutaja teadma. Vaatame lühidalt Kubernetes'e sisemaailma.
Kubernetes'e sisemaailm
Kubernetes koosneb sõltumatute komponentide kogumist, mis töötavad eraldi protsessidena klastrite sõlmedes. Mõned komponendid töötavad peasalvadel, teised tööalustel, iga komponent täidab oma erilist ülesannet.
Siin on mõned kõige olulisemad komponendid peasalvadel:
- Salvestus — hoiab ressursi määratlemisi ().
- API server — pakub API-d ja haldab hoidlat.
- Kontrolleri hallitseja — tagab, et ressursside olekud vastavad spetsifikatsioonidele.
- Ajakava — planeerib pod'id tööalustel.
Ja siin on üks kõige olulisem komponent tööalustel:
- Kubelet — haldab konteinerite käivitamist tööalusel.
Et mõista, kuidas need komponendid koos töötavad, vaadake näiteks.
Eeldame, et olete just käivitanud kubectl create -f replicaset.yaml, pärast mida kubectl tegi HTTP POST päringu (edastades ReplicaSet'i ressursi määratluse).
Mis toimub klastris?
- Pärast täitmist
kubectl create -f replicaset.yamlAPI-server salvestab teie ReplicaSeti ressursi määratluse hoidlas:
- Seejärel käivitatakse ReplicaSeti kontroller kontrolleri halduris, mis haldab ReplicaSeti ressursside loomist, muutmist ja kustutamist:

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

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

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

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

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

Allpool on selle kirjelduse tekstiversioon.
API päring ReplicaSeti loomise lõpp-punkti töötab üles API-server. API-server autentib päringu ja salvestab ReplicaSeti ressursi määratluse hoidlas.
See sündmus aktiveerib ReplicaSeti kontrolleri, mis on kontrolleri halduri alamprotsess. ReplicaSeti kontroller jälgib ReplicaSeti ressursside loomist, uuendamist ja kustutamist salvestuses ning saab teate, kui see juhtub.
ReplicaSeti kontrolleri ülesanne on tagada, et kasutatav arv ReplicaSeti repliikide pod'e on olemas. Meie näites ei ole pod'e seni loodud, seega loob ReplicaSeti kontroller need pod'i määratlused (vastavalt ReplicaSeti määratlusele) ja salvestab need salvestuses.
Uute pod'ide loomine käivitab planeerija, mis jälgib määratlemata pod'ide määratlusi, mis veel ei ole töö sõlmedes planeeritud. Planeerija valib igale pod'ile sobiva töö sõlme ja värskendab määratlusi salvestuses.
Pange tähele, et seni ei ole klastris üheski kohas töökoormuse koodi täidetud. Kõik, mis siiani tehtud on, — on ressursside loomine ja värskendamine salvestuses peameses sõlmes.
Viimases sündmuses käivitab Kubelet, mis jälgib pod'e, mis on planeeritud nende töönõuetele. Kubelet'i töönõu, kuhu on paigaldatud teie ReplicaSet pod'id, peab andma konteinerikeskkonnale, nagu Docker, käsu laadida vajalikud konteineripildid ja need käivitada.
Sel hetkel on teie ReplicaSet rakendus lõpuks käivitunud!
Kubernetes API roll
Kuidas te juba eelnevas näites nägite, jälgivad Kubernetes'i komponendid (välja arvatud API server ja andmehoidla) ressursside muutusi andmehoidlas ja muudavad ressursside teavet andmehoidlas.
Muidugi, need komponendid ei suhtle andmehoidla vahetult, vaid ainult Kubernetes API kaudu.
Vaatame järgmisi näiteid:
- ReplicaSet kontroller kasutab API lõpp-punkti parameetriga
watchet jälgida ReplicaSet ressursside muutusi. - ReplicaSet kontroller kasutab API lõpp-punkti (loo pod) pod'ide loomiseks.
- Planeerija kasutab API lõpp-punkti (muuda pod) pod'ide uuendamiseks valitud töönõue teabega.
Nagu näete, on see sama API, mida kasutab kubectl. Ühe ja sama API kasutamine nii sisemiste komponentide kui ka välistes süsteemides on Kubernetes'i disainifilosoofia võtmeelement.
Nüüd saame kokkuvõtvalt määratleda, kuidas Kubernetes töötab:
- Salvestuskoht säilitab oleku, st Kubernetes'i ressursid.
- API server pakub salvestusele juurdepääsu Kubernetes API kujul.
- Kõik teised Kubernetes'i komponendid ja kasutajad loevad, jälgivad ja manipuleerivad Kubernetes'i olekuga (ressurssidega) läbi API.
Sellel kontseptsioonide tundmisel on oluline roll, et paremini mõista kubectli kasutamist ja maksimeerida selle efektiivsust.
Nüüd vaatame üle mõned konkreetsed näpunäited ja trikid, mis aitavad parandada kubectli kasutamise tõhusust.
1. Sisendi kiirus käsu täiendamise abil
Üks kasulikest, kuid sageli tähelepanuta jäävaid nippe, mis toob kasu kubectli kasutamisel, on käsu täiendamine.
Käsu täiendamine võimaldab automaatselt täita kubectli käskude erinevaid osi klahviga Tab. See töötab alameetodite, valikute ja argumentide puhul, sealhulgas keerulisemate, nagu ressursi nimed.
Vaata, kuidas kubectl'i käsu täiendamine töötab:

Käsu täiendamine töötab Bash ja Zsh käsirežiimides.
sisaldab üksikasjalikke juhiseid automaatse täiendamise seadistamiseks, kuid allpool toome lühikese ülevaate.
Kuidas käsu täiendamine töötab
Käsu täiendamine on shell'i funktsioon, mis töötab täiendusskriptiga. Täiendusskript on shell'i skript, mis määratleb täiendamise käitumise konkreetse käsu jaoks.
Kubectl genereerib ja väljastab automaatselt Bash ja Zsh-i täiendusskriptid järgmiste käskude abil:
$ kubectl completion bashVõi:
$ kubectl completion zshTeoreetiliselt on piisav, kui suunata nende käskude väljund vastavasse käsirežiimi, et kubectl saaks käske täiendada.
Praktiliselt erineb ühendamisviis Bash'i (sealhulgas erinevused Linuxi ja MacOS-i vahel) ning Zsh-i puhul. Allpool vaatame neid kõiki variante.
Bash Linuxis
Bash'i täiendusskript sõltub bash-completion paketist, seega tuleb see kõigepealt installida:
$ sudo apt-get install bash-completionVõi:
$ yum install bash-completionSaate testida, kas pakett on edukalt installitud järgmise käsuga:
$ type _init_completion Kui shelli funktsiooni kood kuvatakse, siis on bash-completion õigesti installitud. Kui käsk annab vea "Leitud ei ole", peate oma faili lisama järgmise reavahe ~ / .bashrc:
$ source /usr/share/bash-completion/bash_completion Kas see rida peab faili lisama ~ / .bashrc või mitte, sõltub pakihaldurist, mida kasutasite bash-completioni installimiseks. APT puhul on see vajalik, YUM-i puhul mitte.
Pärast bash-completioni installimist tuleb kõik seadistada nii, et kubectl täiendamis skript oleks aktiivne kõigis shelli seanssides.
Üks võimalus selleks on lisada järgmine rida faili ~ / .bashrc:
source <(kubectl completion bash) Teine võimalus on lisada kubectl täiendamis skript kausta /etc/bash_completion.d (loodage see, kui see ei eksisteeri):
$ kubectl completion bash >/etc/bash_completion.d/kubectl Kõik kaustas olevad täiendamis skriptid /etc/bash_completion.d kaasa arvatud bash-completioni.
Mõlemad variandid on võrdselt kasutatavad.
Pärast käsurea taaskäivitamist hakkab kubectl käskude automaatne täiendamine tööle.
Bash MacOS-is
MacOS-is on seadistus veidi keerulisem. Probleem on selles, et MacOS-is on vaikimisi Bash versioon 3.2, kuid kubectl automaatse täiendamise skript nõuab vähemalt 4.1 versiooni Bashist ja ei tööta versioonis 3.2.
Bashi vanema versiooni kasutamine MacOS-is on seotud litsentsimise küsimustega. Bash versioon 4 levitatakse GPLv3 litsentsi alusel, mida Apple ei toeta.
Kubuntu autode lõpetamise seadistamiseks MacOS-is peate installima uuema versiooni Bashist. Samuti võite installida uuendatud Bash'i vaikimisi käsurea tõlgina, mis kaitseb teid tuleviku probleemide eest. See pole keeruline, detailid on toodud artiklis „».
Enne jätkamist kontrollige, et kasutate uuemat versiooni Bashist (kontrollige väljundit bash --version).
Bashi autode lõpetamise skript sõltub projektist , seega tuleb see esmalt installida.
Saate installida bash-completion'i :
$ brew install bash-completion@2 Siit @2 tähendab bash-completion versiooni 2. Kubuntu autode lõpetamine nõuab bash-completion v2 ja bash-completion v2 nõuab vähemalt versiooni Bash 4.1.
Käskluse väljund brew-install sisaldab sektsiooni Caveats, kus on öeldud, et tuleb lisada faili ~/.bash_profile:
export BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && .
"/usr/local/etc/profile.d/bash_completion.sh" Kuid soovitan, et need read ei oleks ~/.bash_profile, ja seejärel määratleme selle, takistades seeläbi kasutajal selgelt selle väljaid muuta. See on üks andmete peitmise mustritest ~/.bashrc. Sellest tulenevalt on automaatne täiendamine saadaval mitte ainult põhikomandotes, vaid ka alakomandotes.
Pärast käsurea taaskäivitamist saate installatsiooni õigsust kontrollida järgmise käsu abil:
$ type _init_completionKui väljundis näete shell-funktsiooni, siis on kõik korrektselt seadistatud.
Nüüd tuleb teha nii, et kubectl automaatne täiendamine oleks kõigis sessioonides aktiivne.
Üks võimalus on lisada järgmine rida teie ~/.bashrc:
source <(kubectl completion bash) Teine võimalus on lisada automaatse täiendamise skript kausta /usr/local/etc/bash_completion.d:
$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectlSee meetod töötab ainult siis, kui olete bash-completion'i installinud Homebrew abil. Sellisel juhul laadib bash-completion kõik skriptid sellest kataloogist.
Kui olete installinud , siis ei pea te eelmist sammu tegema, sest automaatse täiendamise skript on automaatselt paigutatud kausta /usr/local/etc/bash_completion.d paigaldamise ajal. Sellisel juhul hakkab kubectl automaatne täiendamine tööle kohe, kui olete bash-completion'i installinud.
Kokkuvõttes on kõik need variantid ekvivalentsed.
Zsh
Zsh automaatse täiendamise skriptid ei nõua mingeid sõltuvusi. Kõik, mis on vajalik — on need laadida käsurea käivitamisel.
Saate seda teha, lisades rea oma ~/.zshrc faili:
source <(kubectl completion zsh) Kui saate vea not found: compdef pärast oma puutumise taaskäivitamist, tuleb aktiveerida sisseehitatud funktsioon compdef. Selle saab aktiveerida, lisades teie faili algusesse ~/.zshrc järgmise:
autoload -Uz compinit
compinit2. Kiire ülevaade ressursispetsifikatsioonidest
Kui loote YAML ressursi definitsioone, peate teadma nende väljade ja väärtuste kohta. Üks koht, kust seda teavet leida, on API juhend, mis sisaldab täielikke spetsifikatsioone kõikide ressursside kohta.
Kuid iga kord veebibrauserisse lülitumine on ebamugav. Seetõttu pakub kubectl käsku kubectl explain, mis näitab kõikide ressursside spetsifikatsioone otse teie terminalis.
Käsu formaat on järgmine:
$ kubectl explain resource[.field]...Käsk väljastab taotletud ressursi või välja spetsifikatsiooni. Väljastatud teave on identne selle, mis on API juhendis.
Vaikimisi kubectl explain näitab ainult esimese taseme väljade pesastamist.
Vaata, kuidas see välja näeb .
Kogu puu saab kuvada, kui lisada valik --recursive:
$ kubectl explain deployment.spec --recursiveKui te ei tea täpselt, milliseid ressursse vajate, saate need kõik näha järgmise käsu abil:
$ kubectl api-resources See käsk kuvab ressursside nimed mitmuses, näiteks, deployments asetatakse deployment. Samuti näitab see lühinime, näiteks deploy, nende ressursside jaoks, kus see on olemas. Ärge muretsege nende erinevuste pärast. Kõik need nimevariandid on kubectl jaoks ekvivalentsetes. See tähendab, et võite kasutada mõnda neist kubectl explain.
Kõik järgmised käsklused on võrdsed:
$ kubectl explain deployments.spec
# või
$ kubectl explain deployment.spec
# või
$ kubectl explain deploy.spec3. Kasutage kohandatud veeru väljundiformaati
Vaikimisi on käsu kubectl get:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
engine-544b6b6467-22qr6 1/1 Running 0 78d
engine-544b6b6467-lw5t8 1/1 Running 0 78d
engine-544b6b6467-tvgmg 1/1 Running 0 78d
web-ui-6db964458-8pdw4 1/1 Running 0 78dSee formaat on mugav, kuid see sisaldab piiratud teavet. Võrreldes täisressursi määratlemise formaadiga, kuvatakse siin vaid mõned väljad.
Selle puhul saate kasutada kohandatud veeru väljundvormingut, mis võimaldab määrata, milliseid andmeid kuvada. Saate välja tuua ükskõik millise ressursi välja eraldi veeruna.
Kohandatud vormingu kasutamine määratakse valikute kaudu:
-o custom-columns=:[,:]... Iga veeru väljundit saate määrata paari abil , kus — veeru nimi ja <jsonpath> — väljend, mis määratleb ressursi välja.
Vaadakem lihtsat näidet:
$ kubectl get pods -o custom-columns='NAME:metadata.name'
NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4Väljund sisaldab ühte veergu, mis näitab pod'ide nimesid.
Valiku väljend valib pod'ide nimed väljalt metadata.name. See on sellepärast, et pod'i nimi määratakse välja nimetus all olevas väljas metadata ressursi pod'i kirjelduse juures. Lisainfot leiate või tippige käsk kubectl explain pod.metadata.name.
Nüüd oletame, et soovite väljundile lisada täiendava veeru, näiteks näidates, millisel sõlmel iga pod töötab. Sel eesmärgil võite lihtsalt lisada vastava veeru spetsifikatsiooni kohandatud veergude valikusse:
$ kubectl get pods
-o custom-columns='NAME:metadata.name,NODE:spec.nodeName'
NAME NODE
engine-544b6b6467-22qr6 ip-10-0-80-67.ec2.internal
engine-544b6b6467-lw5t8 ip-10-0-36-80.ec2.internal
engine-544b6b6467-tvgmg ip-10-0-118-34.ec2.internal
web-ui-6db964458-8pdw4 ip-10-0-118-34.ec2.internal Väljendus valib nodi nime spec.nodeName — kui pod omistatakse nodile, siis selle nimi kirjutatakse podi ressursside eritingimuste valdkonda. spec.nodeName Rohkem teavet saab vaadata väljatoonist kubectl selgitab pod.spec.nodeName.
Pange tähele, et Kubernetes'i ressursside väljad on suuruse suhtes tundlikud.
Saate vaadata mis tahes ressurssi välja veeruna. Lihtsalt vaadake ressurssi eritingimusi ja proovige neid kõigi väljadega, mis teile meeldivad.
Aga esiteks vaatame lähemalt väljavalimise väljendite kohta.
JSONPath väljendid
Ressursside valimiseks mõeldud väljendid põhinevad .
JSONPath on keel andmete valimiseks JSON-dokumentidest. Ühe välja valimine on kõige lihtsam JSONPath kasutusjuht. Tal on palju , sealhulgas valida, filtreerida ja nii edasi.
Kubectl selgitab toetab piiratud arvu JSONPath omadusi. Allpool on toodud omadused ja nende kasutamise näited:
# Выбрать все элементы списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[*].image'
# Выбрать специфический элемент списка
$ kubectl get pods -o custom-columns='DATA:spec.containers[0].image'
# Выбрать элементы списка, попадающие под фильтр
$ kubectl get pods -o custom-columns='DATA:spec.containers[?(@.image!="nginx")].image'
# Выбрать все поля по указанному пути, независимо от их имени
$ kubectl get pods -o custom-columns='DATA:metadata.*'
# Выбрать все поля с указанным именем, вне зависимости от их расположения
$ kubectl get pods -o custom-columns='DATA:..image'Operator [] has special significance. Many fields of Kubernetes resources are lists, and this operator allows you to select elements from these lists. It is often used with a wildcard like [*] to select all elements of the list.
Rakenduse näited
The possibilities for using a custom output format for columns are limitless, as you can display any field or combination of fields of the resource in the output. Here are a few application examples, but feel free to explore them on your own and find useful applications for you.
- Displaying container images for pods:
$ kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image' NAME IMAGES engine-544b6b6467-22qr6 rabbitmq:3.7.8-management,nginx engine-544b6b6467-lw5t8 rabbitmq:3.7.8-management,nginx engine-544b6b6467-tvgmg rabbitmq:3.7.8-management,nginx web-ui-6db964458-8pdw4 wordpressThis command displays the container image names for each pod.
Remember that a pod can contain multiple containers, so the image names will be output on one line separated by commas.
- Displaying availability zones of nodes:
$ kubectl get nodes -o custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone' NAME ZONE ip-10-0-118-34.ec2.internal us-east-1b ip-10-0-36-80.ec2.internal us-east-1a ip-10-0-80-67.ec2.internal us-east-1bSee käsk on mugav, kui teie klaster asub avalikus pilves. See kuvab iga sõlme jaoks saadavustsooni.
Saadavustsoon on pilve mõisted, mis piiritleb replikatsioonitsooni geograafilise piirkonnaga.
Iga sõlme saadavustsooni määrab eriti märgis — . Kui klaster on avalikus pilves, luuakse see märk automaatselt ja täidetakse iga sõlme jaoks saadavustsoonide nimedega.
Märgid ei kuulu Kubernetes'i ressursside spetsifikatsioonidesse, seega ei leia te teavet nende kohta . Kuid neid saab näha (nagu ka muid märke), kui küsida sõlmede kohta teavet YAML või JSON formaadis:
$ kubectl get nodes -o yaml # või $ kubectl get nodes -o jsonSee on suurepärane viis, kuidas rohkem teada saada ressurssidest, lisaks ressursi spetsifikatsioonide uurimisele.
4. Lihtne vahetada klastrite ja nimede vahel
Kui kubectl teeb päringu Kubernetes API-le, loeb ta enne seda faili kubeconfig, et saada kõik vajalikud ühenduse parameetrid.
Vaikimisi on faili kubeconfig nimi ~/.kube/config. Tavaliselt luuakse või uuendatakse see fail spetsiaalse käsuga.
Kui töötate mitme klastri kallal, sisaldab teie kubeconfigi fail ühenduse parameetreid kõigi nende klastrite jaoks. Teil on vajalik viisi anda kubectl käsule, millise täpselt klastri kallal töötate.
Klastri sees saate luua mitu nimede ruumi — sorteeritud virtuaalne klaster füüsilise klastriga. Kubectl määrab, millist nimede ruumi kasutada, samuti kubeconfigi faili andmete põhjal. Seega vajate ka viisi, kuidas kubectl käsule öelda, millise nimede ruumiga töötada.
Selles peatükis räägime, kuidas see toimib ja kuidas saavutada tõhus töö.
Pange tähele, et teil võib olla mitu kubeconfigi faili, mis on loetletud keskkonnamuutuja KUBECONFIG all. Sellisel juhul koondatakse kõik need failid üheks ühiseks konfiguratsiooniks käitamise ajal. Samuti saate muuta vaikimisi rakendatavat kubeconfigi faili, käivitades kubectl koos parameetriga --kubeconfig. Vaata .
Kubeconfigi failid
Vaatame, mida täpselt sisaldab kubeconfigi fail:

Nagu näete, sisaldab kubeconfigi fail kontekste. Kontekst koosneb kolmest osast:
- Cluster — klastriserveri API URL.
- User — kasutaja autentimisandmed klastris.
- Namespace — nimeserver, mida kasutatakse klastrisse ühendamisel.
Praktikas kasutatakse sageli ühte konteksti iga klastri jaoks oma kubeconfigi failis. Siiski võib teil olla ka mitu konteksti klastrite jaoks, mis erinevad kasutaja või nimeserveri poolest. Siiski on mitme konteksti konfiguratsioon haruldane, nii et tavaliselt on klastrite ja kontekstide vahel üheselt mõistetav seos.
Igal hetkel on üks kontekst aktiivne:

Kui kubectl loeb konfiguratsioonifaili, võetakse alati teave praegsest kontekstist. Ülaltoodud näites ühineb kubectl klastriga Hare.
Seega, et lülituda teisele klastrile, peate muutma praegust konteksti kubeconfigi failis:

Nüüd ühineb kubectl klastriga Fox.
Teise nime ruumi vahetamiseks samas klastris tuleb muuta elemendi namespace väärtust praeguses kontekstis:

Ülaltoodud näites kasutab kubectl klastrite Fox nime ruumi Prod (varem oli seadistatud nime ruum Test).
Pange tähele, et kubectl pakub ka valikuid --cluster, --user, --namespace ja --context, mis võimaldavad üle kirjutada individuaalseid elemente ja isegi praegust konteksti, sõltumata sellest, mis on seadistatud kubeconfig failis. Vaata kubectl options.
Teoreetiliselt võite käsitsi muuta parameetreid kubeconfig failis. Kuid see on ebamugav. Nende toimingute lihtsustamiseks on olemas erinevad utiliidid, mis võimaldavad parameetreid automaatsetes režiimides muuta.
Kasutage kubectx
Väga populaarne utiliit klastrite ja nime ruumide vahetamiseks.
Utiliit pakub käskusid kubectx ja kubens vastavalt praeguse konteksti ja nime ruumi muutmiseks.
Nagu juba mainitud, tähendab praeguse konteksti muutmine klastrite vahetamist, kui teil on ainult üks kontekst iga klastipea jaoks.
Siin on näide nende käskude täitmisest:

Põhimõtteliselt redigeerivad need käsklused lihtsalt kubeconfig faili, nagu eespool kirjeldatud.
Selle installimiseks kubectx, järgige juhiseid lehelt
Mõlemad käsklused toetavad konteksti ja nimespetsiifiliste nimede automaatset täiendamist, mis võimaldab neid täielikult mitte sisestada. Juhised automaatse täiendamise seadistamiseks .
Teine kasulik funktsioon on kubectx on . See töötab koos tööriistaga , mille peab eraldi installima. Fzf paigaldamine muudab automaatselt interaktiivse režiimi saadavaks kubectx. Interaktiivses režiimis saate valida konteksti ja nimespetsiifi interaktiivse otsinguliidese kaudu, mille pakub fzf.
Käskluste aliaside kasutamine
Te ei vaja eraldi tööriistu praeguse konteksti ja nimespetsiifi muutmiseks, kuna kubectl pakub ka selleks käsklusi. Nii et käsk kubectl config pakub subkäskyse kubeconfig failide redigeerimiseks.
Mõned neist on:
kubectl config get-contexts: kuvada kõik kontekstid;kubectl config current-context: saada praegune kontekstid;kubectl config use-context: muuta praegust konteksti;kubectl config set-context: muuta konteksti elementi.
Siiski ei ole nende käskude otse kasutamine väga mugav, sest need on pikad. Saate luua nende jaoks shell'i aliasid, mis on kergesti teostatavad.
Olen loonud komplekti aliaste, mis põhinevad nende käskudel ja pakuvad funktsionaalsust, mis sarnaneb kubectx-iga. Siit saate näha nende tegevust:

Pange tähele, et aliasid kasutavad fzf interaktiivse vabaltotsimise liidese pakkumiseks (nagu kubectx interaktiivses režiimis). See tähendab, et peate , et neid aliasid kasutada.
Siin on aliaste määratlused:
# Получить текущий контекст
alias krc='kubectl config current-context'
# Список всех контекстов
alias klc='kubectl config get-contexts -o name | sed "s/^/ /;|^ $(krc)$|s/ /*/"'
# Изменить текущий контекст
alias kcc='kubectl config use-context "$(klc | fzf -e | sed "s/^..//")"'
# Получить текущее пространство имен
alias krn='kubectl config get-contexts --no-headers "$(krc)" | awk "{print $5}" | sed "s/^$/default/"'
# Список всех пространств имен
alias kln='kubectl get -o name ns | sed "s|^.*/| |;|^ $(krn)$|s/ /*/"'
# Изменить текущее пространство имен
alias kcn='kubectl config set-context --current --namespace "$(kln | fzf -e | sed "s/^..//")"' Aliasite seadistamiseks peate lisama eespool toodud määratlused oma faili ~/.bashrc või ~/.zshrc ja laadima oma shell'i uuesti.
Pluginate kasutamine
Kubectl võimaldab laadida pluginaid, mis töötavad nagu põhi- käskude. Näiteks võite installida plugina kubectl-foo ja käivitada seda, kasutades käsku kubectl foo.
Oleks mugav vahetada konteksti ja nimespetsiifilisust sellisel viisil, näiteks käivitades kubectl ctx konteksti muutmiseks ja kubectl ns nimespetsiifilisuse muutmiseks.
Olen kirjutanud kaks pluginat, mis teevad seda:
Pluginate töö põhineb eelmise jaotise aliasetel.
Nii need töötavad:

Pange tähele, et pluginate kasutamiseks on fzf, mis pakub interaktiivset otsingu liidest (nagu interaktiivses režiimis kubectxis). See tähendab, et peate, et neid aliasid kasutada.
Pluginate installimiseks peate laadima alla skriptid, mille nimed ja igal teel, mis on teie PATHis, ja tegema need täidesaatevaks, näiteks kasutades chmod +x. Pärast seda saate kasutada kubectl ctx ja kubectl ns.
5. Sisendi lühendamine automaataliastega
Shelli aliased on suurepärane võimalus sisendi kiirendamiseks. Projekt sisaldab umbes 800 lühendit peamistele kubectl käskudele.
Võite imestada — kuidas mäletada 800 alias? Kuid neid ei pea kõiki meeles pidama, kuna need kummarduvad lihtsa mustri järgi, nagu on allpool toodud:

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 aliased komponentidest, millest igaühel on kindel tähendus kubectl käsu jaoks. Igal aliasel võib olla üks komponent põhikäsu, operatsiooni ja ressursi jaoks ning mitu komponenti parameetrite jaoks. Lihtsalt „täidate” need komponendid vasakult paremale, järgides ülalkirjeldatud skeemi.
Praegune üksikasjalik skeem asub . Sealt leiate ka.
Näiteks alias kgpooyamlall on samaväärne käsuga kubectl get pods -o yaml --all-namespaces.
Valikute suhteline järjekord ei oma tähtsust: käsk kgpooyamlall on ekvivalentne käsuga kgpoalloyaml.
Te ei pea kasutama kõiki komponente aliasteks. Näiteks k, kg, klo, ksys, kgpo saab samuti kasutada. Veelgi enam, käsurida võimaldab aliaste ja tavaliste käskude või valikute kombineerimist:
Näiteks:
- Asetame
kubectl proxyvõib kirjutadak proxy. - Asetame
kubectl get rolesvõib kirjutadakg roles(hetkel ei ole aliast ressursile Roles). - Konkreetse podi andmete saamiseks saate kasutada käsku
kgpo my-pod — kubectl get pod my-pod.
Pidage meeles, et mõned aliaste nõuavad argumenti käsureal. Näiteks alias kgpol tähendab kubectl get pods -l. Valik -l nõuab argumenti — sildistamise spetsiifikatsiooni. Kui kasutate alias't, näeb see välja nagu kgpol app=ui.
Kuna osa alias'test nõuab argumente, tuleb alias'e a, f ja l kasutada viimastena.
Üldiselt, niipea kui olete selle skeemi selgeks õppinud, suudate intuitiivselt välja mõelda aliased käskudest, mida soovite täita, ja säästa palju aega sisestamisel.
Paigaldamine
Kuna kubectl-aliasesid paigaldada, tuleb faili alla laadida GitHubist ja lisada see faili ~/.bashrc või ~/.zshrc:
source ~/.kubectl_aliasesAutotäiendamine
Kuidas juba mainitud, lisate sageli alias’le täiendavaid sõnu käsureal. Näiteks:
$ kgpooyaml test-pod-d4b77b989Kui kasutate kubectl'i käsu autotäiendamist, siis tõenäoliselt olete kasutanud autotäiendust selliste asjade jaoks nagu ressursside nimed. Aga kas seda on võimalik teha, kui kasutatakse alias'e?
See on väga oluline küsimus, sest kui autotäiendamine ei tööta, kaotate osa alias'ide eeliseid.
Vastus sõltub sellest, millist käsurea tõlki kasutate:
- Zsh'i jaoks töötab autotäiendamine alias'e puhul "karbist välja".
- Bashi jaoks on kahjuks vajalikud mõned toimingud, et autotäiendamine tööle saada.
Bashi aliasite automaatse täitmise lubamine
Bashi probleem seisneb selles, et see üritab iga kord, kui vajutate Tab, täiendada alias't, mitte käsku, millele alias viitab (nagu Zsh teeb). Kuna teil ei ole täitmisskripte kõigi 800 aliasi jaoks, ei toimi automaatne täitmine.
Projekt pakub sellele probleemile üldlahendust. See ühendub aliaste täitmise mehhanismiga, täidab alias't käsuks ja tagastab täiendatud käsku täitmiseks valikud. See tähendab, et aliaste täitmine käitub täpselt nagu täispika käsu puhul.
Esiteks selgitan, kuidas installida complete-alias, seejärel, kuidas seda seadistada, et lubada täitmist kõigi kubectl aliaste jaoks.
complete-aliasi installimine
Esiteks sõltub complete-alias . Seetõttu tuleb enne complete-aliasi installimist veenduda, et bash-completion on paigaldatud. Installimise juhised on antud varem Linuxi ja MacOS-i jaoks.
Oluline märkus MacOS-i kasutajatele: nagu kubectl autocompletion skript, ei tööta complete-alias Bash 3.2-ga, mis on vaikimisi MacOS-is. Täpsemalt sõltub complete-alias bash-completion v2-st (brew install bash-completion@2), mille jaoks on vajalik vähemalt Bash 4.1. See tähendab, et MacOS-s complete-alias'i kasutamiseks tuleb installida uuem Bash versioon.
Teil on vaja alla laadida skript kohast ja lisada see oma faili ~/.bashrc:
source ~/bash_completion.shPärast käsurea taaslaadimist on complete-alias täielikult installitud.
Autotäienduse lubamine kubectl alias'ide jaoks
Tehniliselt tarjoaa complete-alias shell'i funktsiooni _complete_alias. See funktsioon kontrollib alias'i ja annab autotäienduse vihjeid alias'e käsu jaoks.
Funktsiooni sidumiseks teatud alias'iga peate kasutama Bash'i sisseehitatud mehhanismi , et määrata _complete_alias alias'e autotäienduse funktsiooniks.
Üheks näiteks võtame alias'e k, mis tähistab käsku kubectl. Selle määramiseks _complete_alias antud alias'e autotäienduse funktsiooniks peate käitama järgmist käsku:
$ complete -F _complete_alias k Tulemuseks on see, et iga kord, kui te autotäiendate alias'e k, kutsutakse funktsioon _complete_alias, mis kontrollib alias't ja annab autotäienduse vihjeid käsu kohta kubectl.
Teiseks näiteks võtame alias'e kg, mis tähistab kubectl get:
$ complete -F _complete_alias kg Nagu eelnevas näites, kui täiendate kg, saate samu täiendamise soovitusi, nagu oleksite saanud kubectl get.
Pange tähele, et complete-alias’i saab kasutada igasuguste aliaste jaoks teie süsteemis.
Seega, et lubada automaatset täiendamist kõigi kubectl aliaste jaoks, tuleb ülaltoodud käsk täita igaühe puhul. Järgmine fragment teeb just seda, tingimusel et olete installinud kubectl-aliases ~/.kubectl-aliases:
for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases);
do
complete -F _complete_alias "$_a"
done See koodijupp tuleb panna oma ~/.bashrc, laadige käsurea interpretator uuesti ja automaatne täiendamine on saadaval kõigile 800 kubectl aliastele.
6. kubectl laiendamine pistikprogrammide abil
Alates , kubectl toetab , mis võimaldab laiendada selle funktsioone lisakomandodega.
Kui olete tuttav , siis kubectl pistikprogrammid on koostatud sama põhimõtte järgi.
Käesolevas peatükis räägime, kuidas pistikprogramme installida, kust neid leida ja kuidas luua oma pistikprogramme.
Pistikprogrammide installimine
kubectl pistikprogrammid jagatakse lihtsate täidetavate failidena, mille nimi on kujul kubectl-x. The prefix kubectl- on kohustuslik, millele järgneb uus kubectl alamees, mis võimaldab käivitada pistikprogrammi.
Näiteks pistikprogramm hello jagatakse faili nimega kubectl-hello.
Pistikprogrammi installimiseks tuleb fail kopeerida kubectl-x igal kataloogis teie PATH muutuja ja teha see täidetavaks, näiteks kasutades chmod +x. Pärast seda saate pistikprogrammi kutsuda kasutades kubectl x.
Saate kasutada järgmist käsku, et kuvada loend kõigist pistikprogrammidest, mis on hetkel teie süsteemis installitud:
$ kubectl plugin listSee käsk kuvab ka hoiatuse, kui teil on mitu pistikprogrammi sama nimega või kui on pistikprogrammifail, mis ei ole täidetav.
Pistikprogrammide otsimine ja installimine Krew abil
Kubectl pistikprogrammid on sobilikud jagamiseks või uuesti kasutamiseks nagu tarkvarapaketid. Aga kust leida pistikprogramme, mida teised on jaganud?
on suunatud ühtse lahenduse pakkumisele kubectl pluginate jagamiseks, otsimiseks, installimiseks ja haldamiseks. Projekt nimetab end "kubectl pluginate paketihalduriks" (Krew on sarnane ).
Krew on nimekiri kubectl pluginatest, mida saate valida ja installida. Lisaks on Krew ka kubectl plugin.
See tähendab, et Krew installimine töötab sisuliselt nagu iga teise kubectl plugina installimine. Täiendavad juhised leiate .
Krew kõige olulisemad käsud:
# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>Pange tähele, et Krew abil pluginite installimine ei takista pluginate installimist standardsete meetoditega, nagu eespool kirjeldatud.
Märge, et käsk kubectl krew list näitab ainult neid pluginaid, mis on installitud Krew abil, samas kui käsk kubectl plugin list loetleb kõik pluginaid, sealhulgas need, mis on installitud Krew abil ja need, mis on installitud muude meetoditega.
Otsi pluginaid mujalt
Krew on noor projekt, hetkel sisaldab tema umbes 30 pluginaid. Kui te ei leia vajalikku, võite otsida pluginaid mujalt, näiteks GitHubist.
Soovitan vaadata GitHubi sektsiooni . Siit leiate mitmeid tosin jääkplugine, mida tasub uurida.
Oma pluginade loomine
Saate ise — see pole keeruline. Peate looma täidetava faili, mis teeb vajalikku, andes sellele nime nagu kubectl-x ja installima, nagu eespool kirjeldatud.
Fail võib olla bash-skript, python-skript või kompileeritud go-rakendus — ei ole oluline. Ainus tingimus on, et see peab olema tühi operatsioonisüsteemis.
Loome nüüd kohe plugina näite. Eelmises jaos kasutasite käsku kubectl, et väljastada konteinerite loend iga podi jaoks. Selle käsu saab lihtsasti muuta pluginaks, mida saate kutsuda näiteks koos kubectl img.
Looge fail kubectl-img järgnevate sisu:
#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image' Nüüd tehke fail täidetavaks, kasutades chmod +x kubectl-img ja viige see mõnesse katalooge, mis on teie PATH-is. Pärast seda saate kohe kasutada pluginat kubectl img.
Nagu juba mainitud, võivad kubectl pistikud olla kirjutatud mis tahes programmeerimiskeeles või skriptikeeles. Kui kasutate käsureas skripte, siis on eeliseks kerge võimalus kutsuda kubectl üles pistikust. Siiski võite kirjutada keerukamaid pistikuid tõelistes programmeerimiskeeltes, kasutades . Kui kasutate Go-d, siis saate samuti kasutada , mis on loodud spetsiaalselt kubectl pistikute kirjutamiseks.
Kuidas oma pistikuid jagada
Kui arvate, et teie pistikud võivad olla teistele kasulikud, ärge kartke neid GitHubis jagada. Lisage need kindlasti teema .
Samuti võite paluda oma pistiku lisamist . Juhised selle kohta, kuidas seda teha, leiate .
Käsu automaatne täiendamine
Praegu ei toeta pistikud automaatset täiendamist. See tähendab, et peate sisestama pistiku täispika nime ja argumendi täispika nime.
GitHubi kubectl hoidlas on selle funktsiooni jaoks . Seega on võimalik, et see funktsioon viiakse kunagi ellu.
Edu!!!
Mida veel teemast lugeda:
- .
- .
- .
Allikas: habr.com







