Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Kui töötate Kubernetesiga, on kubectl tõenäoliselt üks utiliitidest, mida enim kasutate. Ja alati, kui veedate konkreetse tööriistaga töötades palju aega, tasub seda põhjalikult uurida ja õppida seda tõhusalt kasutama.

Meeskond Kubernetes aaS saidilt Mail.ru tõlkis Daniel Weibeli artikli, millest leiate näpunäiteid kubectliga tõhusaks töötamiseks. Samuti aitab see teil Kubernetest sügavamalt mõista.

Artikli eesmärk on autori sõnul muuta teie igapäevane töö Kubernetesega mitte ainult tõhusamaks, vaid ka nauditavamaks!

Sissejuhatus: Mis on kubectl

Enne kui saate õppida kubectli tõhusamalt kasutama, peate omandama põhiteadmised, mis see on ja kuidas see töötab.

Kasutaja seisukohast on kubectl juhtpaneel, mis võimaldab teha Kubernetese toiminguid.

Tehniliselt öeldes on kubectl Kubernetes API klient.

Kubernetes API on HTTP REST API. See API on tõeline Kubernetese kasutajaliides, mille kaudu seda täielikult juhitakse. See tähendab, et iga Kubernetese toiming avalikustatakse API lõpp-punktina ja seda saab teha HTTP-päringuga sellele lõpp-punktile.

Seetõttu on kubectli põhiülesanne Kubernetes API-le HTTP-päringute tegemine:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Kubernetes on täielikult ressurssidele orienteeritud süsteem. See tähendab, et see säilitab ressursside sisemise oleku ja kõik Kubernetese toimingud on CRUD-toimingud.

Neid ressursse haldades on teil Kubernetese üle täielik kontroll ja Kubernetes mõtleb ressursside hetkeseisu põhjal välja, mida teha. Sel põhjusel on Kubernetes API viide korraldatud ressursitüüpide loendina koos nendega seotud toimingutega.

Vaatame näidet.

Oletame, et soovite luua ReplicaSeti ressursi. Selleks kirjeldate failis ReplicaSeti nime järgi replicaset.yaml, seejärel käivitage käsk:

$ kubectl create -f replicaset.yaml

See loob ReplicaSeti ressursi. Aga mis toimub kulisside taga?

Kubernetesil on ReplicaSeti loomise toiming. Nagu iga teine ​​toiming, avaldatakse see API lõpp-punktina. Selle toimingu konkreetne API lõpp-punkt näeb välja järgmine:

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

Kõikide Kubernetese toimingute API lõpp-punktid leiate aadressilt API viide (Sh ülaltoodud lõpp-punkti). Lõpp-punktile tegeliku päringu esitamiseks peate esmalt lisama API-serveri URL-i lõpp-punkti teedele, mis on loetletud API viites.

Следовательно, когда вы выполняете указанную выше команду, kubectl отправляет HTTP-запрос POST к вышеуказанной конечной точке API. Определение ReplicaSet, которое вы указали в файле replicaset.yaml, saadetakse päringu sisuks.

Nii töötab kubectl kõigi Kubernetese klastriga suhtlevate käskude puhul. Kõigil neil juhtudel teeb kubectl lihtsalt HTTP-päringuid sobivatele Kubernetes API lõpp-punktidele.

Pange tähele, et saate Kubernetest täielikult hallata, kasutades utiliiti, näiteks curlsaates käsitsi HTTP-päringuid Kubernetes API-le. Kubectl teeb lihtsalt Kubernetes API kasutamise lihtsamaks.

See on kubectli põhitõed ja selle toimimine. Kuid Kubernetes API-s on veel midagi, mida iga kubectli kasutaja peaks teadma. Heidame kiire pilgu Kubernetese sisemaailma.

Kubernetese sisemaailm

Kubernetes koosneb sõltumatute komponentide komplektist, mis töötavad klastri sõlmedes eraldi protsessidena. Mõned komponendid töötavad põhisõlmedes, teised töösõlmedes, kusjuures iga komponent täidab oma konkreetset ülesannet.

Siin on peamiste sõlmede kõige olulisemad komponendid:

  1. hoidla - salvestab ressursside määratlused (tavaliselt on see jne).
  2. API server — pakub API-d ja haldab salvestusruumi.
  3. Диспетчер контроллеров — Tagab, et ressursside olekud vastavad spetsifikatsioonidele.
  4. Planeerija — ajastab kaustad töötajate sõlmedes.

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

  1. kubelet — haldab konteinerite käivitamist töösõlmel.

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

Oletame, et olete just lõpetanud kubectl create -f replicaset.yaml, mille järel kubectl tegi HTTP POST-i päringu aadressile конечной точке API-интерфейса ReplicaSet (ReplicaSeti ressursi määratluse läbimine).

Mis klastris toimub?

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

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

  2. Далее запускается контроллер ReplicaSet в диспетчере контроллеров, который обслуживает создание, изменение и удаление ресурсов ReplicaSet:

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

  3. ReplicaSeti kontroller loob iga ReplicaSeti koopia jaoks pod-definitsiooni (vastavalt ReplicaSeti definitsioonis olevale pod-mallile) ja salvestab need salvestusruumi:

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

  4. Käivitatakse ajakava, mis jälgib kaustasid, mida pole veel ühelegi töötaja sõlmele määratud:

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

  5. Planeerija valib igale kaustale sobiva töötaja sõlme ja lisab selle teabe poes olevale podi definitsioonile:

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

  6. На рабочей ноде, которой назначен под, запускается Kubelet, он отслеживает поды, назначенные этой ноде:

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

  7. Kubelet loeb salvestusruumist pod-definitsiooni ja annab konteineri käituskeskkonnale (nt Docker) käsu käivitada sõlmes konteinerid:

    Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend

Allpool on selle kirjelduse tekstiversioon.

API-päringut ReplicaSeti loomise lõpp-punktile töötleb API server. API-server autentib päringu ja salvestab ReplicaSeti ressursi määratluse salvestusruumi.

See sündmus käivitab kontrolleri ReplicaSet, mis on kontrollerihalduri alamprotsess. ReplicaSeti kontroller jälgib poes ReplicaSeti ressursside loomist, värskendamist ja kustutamist ning saab selle ilmnemisel sündmuse teatise.

ReplicaSeti kontrolleri ülesanne on tagada, et vajalik arv ReplicaSeti kaustasid oleks olemas. Meie näites ei ole veel ühtki podi olemas, seega loob ReplicaSeti kontroller need kaustade määratlused (vastavalt ReplicaSeti definitsioonis olevale pod mallile) ja salvestab need salvestusruumi.

Uute kaustade loomise käivitab planeerija, mis jälgib kaustade määratlusi, mis pole veel töötajate sõlmede jaoks ajastatud. Planeerija valib igale kaustale sobiva töötaja sõlme ja värskendab hoidlas olevaid pod-definitsioone.

Pange tähele, et kuni selle hetkeni ei töötanud klastris ühtegi töökoormuse koodi. Kõik, mis seni tehtud - see on ressursside loomine ja värskendamine põhisõlme hoidlas.

Viimane sündmus käivitab Kubeletid, mis jälgivad oma töötajate sõlmedele kavandatud kaustasid. Töötaja sõlme Kubelet, kuhu teie ReplicaSeti kaustad on installitud, peab andma konteineri käituskeskkonnale (nt Docker) käsu alla laadida nõutud konteineri kujutised ja neid käivitada.

Sel hetkel töötab teie rakendus ReplicaSet lõpuks!

Kubernetes API roll

Nagu eelmises näites nägite, jälgivad Kubernetese komponendid (välja arvatud API-server ja salvestusruum) salvestuses olevate ressursside muudatusi ja muudavad teavet salvestuses olevate ressursside kohta.

Loomulikult ei suhtle need komponendid salvestusruumiga otse, vaid ainult Kubernetes API kaudu.

Mõelge järgmistele näidetele:

  1. Kontroller ReplicaSet kasutab API lõpp-punkti loend ReplicaSets parameetriga watch ReplicaSeti ressursside muudatuste jälgimiseks.
  2. Kontroller ReplicaSet kasutab API lõpp-punkti loo Pod (loo kauna) kaunade loomiseks.
  3. Planeerija kasutab API lõpp-punkti patch pod (redigeeri kausta), et värskendada kaustasid teabega valitud töötaja sõlme kohta.

Nagu näete, on see sama API, millele kubectl pääseb juurde. Sama API kasutamine sisemiste komponentide ja väliste kasutajate jaoks on Kubernetese disaini põhikontseptsioon.

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

  1. Salvestuspoodides on kirjas, st Kubernetese ressursid.
  2. API сервер предоставляет интерфейс к хранилищу в виде Kubernetes API.
  3. Kõik muud Kubernetese komponendid ja kasutajad loevad, jälgivad ja manipuleerivad Kubernetese olekut (ressursse) API kaudu.

Nende mõistete tundmine aitab teil kubectli paremini mõista ja sellest maksimumi võtta.

Теперь давайте рассмотрим ряд конкретных советов и приемов, которые помогут повысить производительность работы с kubectl.

1. Kiirendage sisestamist käsu lõpetamise abil

Один из наиболее полезных, но часто упускаемых из виду приемов, позволяющих повысить производительность работы с kubectl, — дополнение команд.

Käskude täitmine võimaldab teil automaatselt täita kubectli käskude osi, kasutades tabeldusklahvi. See toimib alamkäskude, valikute ja argumentide puhul, sealhulgas millegi nii keerulise kui ressursside nimede puhul.

Vaadake, kuidas kubectl käsu täitmine töötab:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Bash ja Zsh kestade käsutäitmine töötab.

Ametlik juhend содержит детальные инструкции по настройке автодополнения, но ниже мы приведем краткую выдержку.

Kuidas käsu täitmine töötab

Käskude lõpetamine on kestafunktsioon, mis töötab lõpetamisskripti abil. Laiendusskript on shelliskript, mis määrab konkreetse käsu laienduse käitumise.

Kubectl genereerib ja väljastab automaatselt Bashi ja Zshi laiendusskriptid, kasutades järgmisi käske:

$ kubectl completion bash

Или:

$ kubectl completion zsh

Teoreetiliselt piisab nende käskude väljundi ühendamisest vastava käsukestaga, et kubectl saaks käske täiendada.

Praktikas on Bashi (sh Linuxi ja MacOS-i erinevused) ja Zshi ühendusviis erinev. Allpool vaatleme kõiki neid võimalusi.

Bash Linuxis

Bashi lõpetamisskript sõltub bash-completion paketist, seega peate selle esmalt installima:

$ sudo apt-get install bash-completion

Или:

$ yum install bash-completion

Saate testida, kas pakett on edukalt installitud, kasutades järgmist käsku:

$ type _init_completion

Kui see väljastab kesta funktsiooni koodi, on bash-completion installitud õigesti. Kui käsk annab veateate "Ei leitud", peate oma failile lisama järgmise rea ~ / .bashrc:

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

Kas seda rida on vaja faili lisada ~ / .bashrc või mitte, sõltub paketihaldurist, mida kasutasite bash-completioni installimiseks. See on vajalik APT jaoks, kuid mitte YUMi jaoks.

Pärast bash-completioni installimist peate kõik konfigureerima nii, et kubectli lõpetamisskript oleks kõigis shelliseanssides lubatud.

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

source <(kubectl completion bash)

Другой способ — добавить скрипт дополнения kubectl в каталог /etc/bash_completion.d (looge see, kui seda pole olemas):

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

Kõik kataloogis olevad lisandmoodulid /etc/bash_completion.d автоматически включаются в bash-completion.

Mõlemad variandid on võrdselt rakendatavad.

Pärast kesta taaskäivitamist töötab kubectli käsu lõpetamine.

Bash в MacOS

MacOS-is on seadistamine veidi keerulisem. Fakt on see, et vaikimisi kasutab MacOS Bashi versiooni 3.2 ja kubectli automaatse täitmise skript nõuab Bashi versiooni vähemalt 4.1 ja see ei tööta Bash 3.2-s.

Bashi vananenud versiooni kasutamisega MacOS-is on litsentsimisega seotud probleeme. Bashi versioon 4 on litsentsitud GPLv3 alusel, mida Apple ei toeta.

Kubectli automaatse täitmise konfigureerimiseks MacOS-is peate installima Bashi uuema versiooni. Värskendatud Bashi saate määrata ka vaikekestaks, mis säästab teid tulevikus paljudest probleemidest. See pole keeruline, üksikasjad on toodud artiklis "Bashi värskendamine MacOS-is'.

Перед тем как продолжить, убедитесь, что вы используете свежую версию Bash (проверьте вывод bash --version).

Bashi lõpetamise skript on projektiti erinev bash-lõpetamine, seega peate selle esmalt installima.

Bash- lõpetamise saate installida kasutades Homebrew:

$ brew install bash-completion@2

see on @2 tähistab bash-completion versiooni 2. kubectl automaatne lõpetamine nõuab bash-completion v2 ja bash-completion v2 nõuab minimaalselt Bash versiooni 4.1.

Käsu väljund brew-install sisaldab jaotist Hoiatused, mis määrab, mida failile lisada ~/.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"

Siiski soovitan neid ridu mitte lisada ~/.bash_profileja sisse ~/.bashrc. Sel juhul on automaatne täitmine saadaval mitte ainult põhi-, vaid ka alamkäskude kestades.

Pärast käsukesta taaskäivitamist saate kontrollida installi õigsust, kasutades järgmist käsku:

$ type _init_completion

Kui näete väljundis shelli funktsiooni, on kõik õigesti konfigureeritud.

Nüüd peame tagama, et kubectli automaatne lõpetamine oleks kõigis seanssides lubatud.

Üks võimalus on lisada omale järgmine rida ~/.bashrc:

source <(kubectl completion bash)

Teine võimalus on lisada kausta automaatse täitmise skript /usr/local/etc/bash_completion.d:

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

See meetod töötab ainult siis, kui installisite Homebrew'i abil bash-completion. Sel juhul laadib bash-completion kõik skriptid sellest kataloogist.

Если вы устанавливали kubectl, kasutades Homebrew'i, siis pole eelmist sammu vaja teha, kuna automaatse täitmise skript paigutatakse automaatselt kausta /usr/local/etc/bash_completion.d paigaldamise ajal. Sel juhul hakkab kubectli automaatne lõpetamine töötama kohe pärast bash-completioni installimist.

Selle tulemusena on kõik need valikud samaväärsed.

Zsh

Zsh-i automaatse täitmise skriptid ei vaja mingeid sõltuvusi. Kõik, mida pead tegema, on need käsukesta laadimisel lubama.

Вы можете сделать это, добавив строку в свой ~/.zshrc fail:

source <(kubectl completion zsh)

Kui saate veateate not found: compdef pärast kesta taaskäivitamist peate lubama sisseehitatud funktsiooni compdef. Saate selle lubada, lisades selle oma faili algusesse ~/.zshrc järgmine:

autoload -Uz compinit
compinit

2. Vaadake kiiresti ressursi spetsifikatsioone

YAML-i ressursside määratluste loomisel peate teadma välju ja nende tähendust nende ressursside jaoks. Üks koht, kust seda teavet otsida, on API viide, mis sisaldab kõigi ressursside täielikke spetsifikatsioone.

Veebibrauserile lülitumine iga kord, kui midagi otsima peaks, on aga ebamugav. Seetõttu annab kubectl käsu kubectl explain, mis näitab kõigi teie terminalis olevate ressursside spetsifikatsioone.

Käsu vorming on järgmine:

$ kubectl explain resource[.field]...

Команда выведет спецификацию запрошенного ресурса или поля. Выведенная информация идентична той, что содержится в руководстве API.

Vaikimisi kubectl explain näitab ainult põldude pesastumise esimest taset.

Vaata, kuidas see välja näeb Seejärel saab.

Можно отобразить все дерево, если добавить опцию --recursive:

$ kubectl explain deployment.spec --recursive

Kui te ei tea täpselt, milliseid ressursse vaja on, saate need kõik kuvada järgmise käsuga:

$ kubectl api-resources

See käsk kuvab ressursside nimed mitmuses, nt. deployments asemel deployment. See kuvab ka näiteks lühinime deploy, для тех ресурсов, у которых оно есть. Не беспокойтесь об этих различиях. Все эти варианты имен эквивалентны для kubectl. То есть вы можете использовать любой из них для kubectl explain.

Kõik järgmised käsud on samaväärsed:

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

3. Kasutage kohandatud veeru väljundvormingut

Vaikimisi käsu väljundvorming 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

See vorming on mugav, kuid sisaldab piiratud hulgal teavet. Võrreldes täieliku ressursimääratluse vorminguga, kuvatakse siin vaid mõned väljad.

Sel juhul saate kasutada kohandatud veeru väljundvormingut. See võimaldab teil määrata, milliseid andmeid väljastada. Saate kuvada mis tahes ressursivälja eraldi veeruna.

Kohandatud vormingu kasutamine määratakse järgmiste valikute abil:

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

Saate määratleda iga väljundi veeru paarina <header>:<jsonpath>Kus <header> on veeru nimi ja <jsonpath> — avaldis, mis määratleb ressursivälja.

Vaatame 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-8pdw4

Väljund sisaldab ühte veergu kaunade nimedega.

Suvandiavaldis valib väljalt kaustade nimed metadata.name. Selle põhjuseks on asjaolu, et kausta nimi on määratletud alamnime väljal metadata kauna ressursikirjelduses. Rohkem üksikasju leiate aadressilt API juhend või tippige käsk kubectl explain pod.metadata.name.

Oletame nüüd, et soovite väljundile lisada täiendava veeru, näiteks näidata sõlme, millel iga pod töötab. Selleks saate lihtsalt kohandatud veergude valikule lisada sobiva veeru spetsifikatsiooni:

$ 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

Avaldis valib sõlme nime spec.nodeName — kui sõlmele määratakse pod, kirjutatakse selle nimi väljale spec.nodeName ресурсной спецификации пода. Более подробную информацию можно посмотреть в выводе kubectl explain pod.spec.nodeName.

Pange tähele, et Kubernetese ressursiväljad on tõstutundlikud.

Вы можете посмотреть любое поле ресурса в виде столбца. Просто просмотрите спецификацию ресурса и попробуйте ее с любыми полями, которые вам нравятся.

Kuid kõigepealt vaatame lähemalt välja valiku avaldisi.

Выражения JSONPath

Ressursiväljade valimise avaldised põhinevad JSONPath.

JSONPath — это язык для выборки данных из JSON-документов. Выбор одного поля — самый простой случай использования JSONPath. У него гораздо suurem hääl, sealhulgas valijad, filtrid ja nii edasi.

Kubectl selgitus toetab piiratud arvu JSONPathi funktsioone. Nende kasutamise võimalusi ja näiteid kirjeldatakse allpool:

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

Eriti oluline on operaator []. Paljud Kubernetese ressursiväljad on loendid ja see operaator võimaldab teil valida nende loendite liikmeid. Seda kasutatakse sageli koos metamärgiga (nt [*]), et valida loendi kõik elemendid.

Rakenduse näited

Kohandatud veeru väljundvormingu kasutamise võimalused on lõputud, kuna saate väljundis kuvada mis tahes välja või ressursiväljade kombinatsiooni. Siin on mõned näidisrakendused, kuid võite neid ise uurida ja leida enda jaoks sobivad rakendused.

  1. Kaunade konteineri kujutiste kuvamine:
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    See käsk kuvab iga kausta jaoks konteineri kujutise nimed.

    Pidage meeles, et pod võib sisaldada mitut konteinerit, siis kuvatakse piltide nimed ühel real, eraldatuna komadega.

  2. Отображение зон доступности нод:
    $ kubectl get nodes 
      -o 
    custom-columns='NAME:metadata.name,ZONE:metadata.labels.failure-domain.beta.kubernetes.io/zone'
    
    NAME                          ZONE
    ip-10-0-118-34.ec2.internal   us-east-1b
    ip-10-0-36-80.ec2.internal    us-east-1a
    ip-10-0-80-67.ec2.internal    us-east-1b

    See käsk on kasulik, kui teie klaster on hostitud avalikus pilves. See kuvab iga sõlme saadavuse tsooni.

    Kättesaadavustsoon on pilvekontseptsioon, mis piirab replikatsioonitsooni geograafilise piirkonnaga.

    Iga sõlme saadavuse tsoonid saadakse spetsiaalse sildi kaudu - failure-domain.beta.kubernetes.io/zone. Kui klaster töötab avalikus pilves, luuakse see silt automaatselt ja täidetakse iga sõlme saadavustsoonide nimedega.

    Sildid ei kuulu Kubernetese ressursside spetsifikatsiooni alla, seega ei leia te nende kohta teavet API juhend. Однако их можно увидеть (как и любые другие метки), если запросить информацию о нодах в формате YAML или JSON:

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

    See on suurepärane võimalus lisaks ressursside spetsifikatsioonide õppimisele ressursside kohta rohkem teada saada.

4. Vahetage hõlpsalt klastrite ja nimeruumide vahel

Когда kubectl выполняет запрос к Kubernetes API, перед этим он читает файл kubeconfig, чтобы получить все необходимые параметры для коннекта.

Vaikimisi on kubeconfig fail ~/.kube/config. Tavaliselt luuakse või värskendatakse seda faili spetsiaalse käsuga.

Kui töötate mitme klastriga, sisaldab teie kubeconfigi fail sätteid kõigi nende klastritega ühenduse loomiseks. Teil on vaja viisi, kuidas öelda kubectli käsule, millise klastriga töötate.

Klastris saate luua mitu nimeruumi – virtuaalse klastri tüüp füüsilises klastris. Kubectl määrab ka kubeconfig-faili põhjal, millist nimeruumi kasutada. See tähendab, et vajate ka viisi, kuidas öelda kubectli käsule, millise nimeruumiga töötada.

Selles peatükis selgitame, kuidas see töötab ja kuidas seda tõhusalt toimima panna.

Pange tähele, et keskkonnamuutujas KUBECONFIG võib teil olla mitu kubeconfigi faili. Sel juhul ühendatakse kõik need failid käitusajal üheks ühiseks konfiguratsiooniks. Saate muuta ka vaikefaili kubeconfig, käivitades parameetriga kubectl --kubeconfig. Vaata ametlik dokumentatsioon.

kubeconfig failid

Vaatame, mida kubeconfigi fail täpselt sisaldab:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Nagu näete, sisaldab kubeconfigi fail kontekstide komplekti. Kontekst koosneb kolmest elemendist:

  • Klaster – klastri serveri API URL.
  • Kasutaja – kasutaja autentimise mandaadid klastris.
  • Nimeruum – klastriga liitumisel kasutatav nimeruum.

Praktikas kasutavad nad oma kubekonfiguratsioonis sageli ühte konteksti klastri kohta. Siiski võib klastri kohta olla mitu konteksti, mis on eristatud kasutaja või nimeruumi järgi. See mitme konteksti konfiguratsioon on aga haruldane, mistõttu klastrite ja kontekstide vahel on tavaliselt üks-ühele vastendamine.

Igal ajahetkel on üks kontekstidest praegune:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Kui kubectl loeb konfiguratsioonifaili, võtab see alati teavet praegusest kontekstist. Ülaltoodud näites loob kubectl ühenduse Hare klastriga.

Seetõttu peate teisele klastrile lülitumiseks muutma kubeconfig-failis praegust konteksti:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Nüüd loob kubectl ühenduse Foxi klastriga.

Samas klastris teisele nimeruumile lülitumiseks peate muutma praeguse konteksti nimeruumi elemendi väärtust.

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Ülaltoodud näites kasutab kubectl Fox-klastri Prod-nimeruumi (varem oli määratud nimeruum Test).

Pange tähele, et kubectl pakub ka valikuid --cluster, --user, --namespace и --context, mis võimaldavad teil üle kirjutada üksikud elemendid ja praegune kontekst ise, olenemata kubeconfig-i seadistustest. Vaata kubectl options.

Teoreetiliselt saate kubeconfigi sätteid käsitsi muuta. Aga see on ebamugav. Nende toimingute lihtsustamiseks on olemas erinevad utiliidid, mis võimaldavad parameetreid automaatselt muuta.

Kasutage kubectxi

Очень популярная утилита для переключения между кластерами и пространствами имен.

Utiliit pakub käske kubectx и kubens et muuta vastavalt praegust konteksti ja nimeruumi.

Nagu mainitud, tähendab praeguse konteksti muutmine klastri muutmist, kui teil on ainult üks kontekst klastri kohta.

Вот пример выполнения этих команд:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Põhimõtteliselt redigeerivad need käsud lihtsalt kubeconfigi faili, nagu ülalpool kirjeldatud.

paigaldama kubectx, järgige juhiseid Github.

Mõlemad käsud toetavad konteksti ja nimeruumi nimede automaatset lõpetamist, mis välistab vajaduse neid täielikult sisestada. Juhised automaatse täitmise seadistamiseks siin.

Veel üks kasulik funktsioon kubectx see on interaktiivne režiim. See töötab koos utiliidiga fzf, mis tuleb paigaldada eraldi. Fzf-i installimine muudab interaktiivse režiimi automaatselt kättesaadavaks kubectx. Interaktiivselt saate valida konteksti ja nimeruumi interaktiivse tasuta otsinguliidese kaudu, mida pakub fzf.

Shelli varjunimede kasutamine

Te ei vaja praeguse konteksti ja nimeruumi muutmiseks eraldi tööriistu, kuna kubectl pakub selleks ka käske. Jah, meeskond kubectl config pakub alamkäske kubeconfigi failide redigeerimiseks.

Siin on mõned neist:

  • kubectl config get-contexts: kuva kõik kontekstid;
  • kubectl config current-context: hankige praegune kontekst;
  • kubectl config use-context: muuda praegust konteksti;
  • kubectl config set-context: muutke kontekstielementi.

Nende käskude otsene kasutamine pole aga kuigi mugav, kuna need on pikad. Saate teha neile shell-aliaseid, mida on lihtne täita.

Lõin nende käskude põhjal varjunimede komplekti, mis pakuvad kubectx-ile sarnaseid funktsioone. Siin näete neid tegevuses:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Pange tähele, et varjunimed kasutavad interaktiivse tasuta otsinguliidese pakkumiseks fzf-i (nagu kubectxi interaktiivne režiim). See tähendab, et vajate installige fzfnende varjunimede kasutamiseks.

Siin on varjunimede endi 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/^..//")"'

Nende varjunimede määramiseks peate oma failile lisama ülaltoodud määratlused ~/.bashrc või ~/.zshrc и перезагрузить вашу оболочку.

Pluginate kasutamine

Kubectl võimaldab laadida pluginaid, mida käivitatakse samamoodi nagu põhikäske. Näiteks saate installida pistikprogrammi kubectl-foo ja käivitada selle käsuga kubectl foo.

Mugav oleks niimoodi konteksti ja nimeruumi muuta, näiteks käivitades kubectl ctx konteksti muutmiseks ja kubectl ns nimeruumi muutmiseks.

Я написал два плагина, которые делают это:

Pluginate töö põhineb eelmise jaotise varjunimedel.

Need toimivad järgmiselt.

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Pange tähele, et pistikprogrammid kasutavad interaktiivse tasuta otsinguliidese pakkumiseks fzf-i (nagu kubectxi interaktiivne režiim). See tähendab, et vajate installige fzfnende varjunimede kasutamiseks.

Pluginate installimiseks peate alla laadima shelliskriptid nimega kubectl-ctx и kubectl-ns mis tahes kataloogi teie PATH muutujas ja tehke need käivitatavaks nt. chmod +x. Kohe pärast seda saate seda kasutada kubectl ctx и kubectl ns.

5. Vähendage sisendit automaatsete varjunimedega

Shelli varjunimed on hea viis tippimise kiirendamiseks. Projekt kubectl-aliased sisaldab umbes 800 otseteed kubectli põhikäskude jaoks.

Võib tekkida küsimus – kuidas mäletate 800 varjunime? Kuid te ei pea neid kõiki meeles pidama, sest need on ehitatud lihtsa skeemi järgi, mis on toodud allpool:

Kuidas kubectli tõhusamalt kasutada: üksikasjalik juhend
Näiteks:

  1. kgpooyaml – kubectl get pods oyaml
  2. ksysgsvcw — kubectl -n kube-system get svc w
  3. ksysrmcm — kubectl -n kube-system rm cm
  4. kgdepallsl - kubectl hankige juurutamine kõik sl

Nagu näete, koosnevad varjunimed komponentidest, millest igaüks esindab kubectli käsu konkreetset elementi. Igal aliasel võib olla üks komponent põhikäsu, toimingu ja ressursi jaoks ning mitu komponenti parameetrite jaoks. Need komponendid lihtsalt "asustate" ülaltoodud diagrammi järgi vasakult paremale.

Praegune üksikasjalik diagramm on aadressil GitHub. Sealt saab ka leida varjunimede täielik loetelu.

Näiteks alias kgpooyamlall on samaväärne käsuga kubectl get pods -o yaml --all-namespaces.

Valikute suhteline järjekord pole oluline: käsk kgpooyamlall on samaväärne käsuga kgpoalloyaml.

Te ei pea kõiki komponente varjunimedena kasutama. Näiteks k, kg, klo, ksys, kgpo saab ka kasutada. Lisaks saate käsureal kombineerida varjunimesid ja tavalisi käske või suvandeid:

Näiteks:

  1. Selle asemel kubectl proxy sa võid kirjutada k proxy.
  2. Selle asemel kubectl get roles sa võid kirjutada kg roles (Praegu pole Rollide ressursi varjunime).
  3. Konkreetse kausta kohta andmete hankimiseks võite kasutada käsku kgpo my-pod — kubectl get pod my-pod.

Pange tähele, et mõned varjunimed nõuavad käsurea argumenti. Näiteks alias kgpol vahendid kubectl get pods -l. Võimalus -l nõuab argumenti – sildi spetsifikatsiooni. Kui kasutate varjunime, näeb see välja selline kgpol app=ui.

Kuna mõned varjunimed nõuavad argumente, tuleb varjunimesid a, f ja l kasutada viimasena.

В общем, как только вы освоите эту схему, то сможете интуитивно вывести алиасы из команд, которые хотите выполнить, и сэкономить много времени на вводе.

Paigaldamine

Kubectl-aliase installimiseks peate faili alla laadima .kubectl_aliases GitHubist ja lisage see faili ~/.bashrc või ~/.zshrc:

source ~/.kubectl_aliases

Automaatne täitmine

Nagu me varem ütlesime, lisate sageli käsureal olevale varjunimele täiendavaid sõnu. Näiteks:

$ kgpooyaml test-pod-d4b77b989

Kui kasutate kubectli käsu lõpetamist, olete tõenäoliselt kasutanud automaatset lõpetamist näiteks ressursside nimede jaoks. Kuid kas seda saab teha varjunimede kasutamisel?

See on väga oluline küsimus, sest kui automaatne täitmine ei tööta, kaotate osa varjunimede eelistest.

Vastus sõltub sellest, millist kesta te kasutate:

  1. Zsh puhul toimib aliase täitmine juba karbist välja.
  2. Kahjuks on Bashi jaoks automaatse täitmise toimimiseks vaja veidi tööd teha.

Bashis varjunimede automaatse täitmise lubamine

Bashi probleem seisneb selles, et see proovib täita (iga kord kui vajutate klahvi Tab) pseudonüümi, mitte käsku, millele pseudonüüm viitab (nagu teeb näiteks Zsh). Kuna teil pole kõigi 800 pseudonüümi jaoks lõpetamisskripte, ei tööta automaatne täitmine.

Projekt täielik-alias предоставляет общее решение этой проблемы. Он подключается к механизму дополнения для алиасов, внутри дополняет алиас до команды и возвращает варианты дополнения для дополненной команды. Это означает, что дополнение для алиаса ведет себя точно так же, как для полной команды.

Järgnevalt selgitan esmalt, kuidas installida täielikku pseudonüümi ja seejärel seda konfigureerida, et võimaldada kõigi kubectli varjunimede lõpetamist.

Täieliku aliase installimine

Esiteks sõltub täielik alias bash-lõpetamine. Seetõttu peate enne täieliku aliase installimist veenduma, et bash-completion on installitud. Installimisjuhised on Linuxi ja MacOS-i jaoks varem saadaval.

Oluline märkus MacOS-i kasutajatele: Sarnaselt kubectli automaatse täitmise skriptiga ei tööta täielik alias Bash 3.2-ga, mis on MacOS-i vaikeseade. Täpsemalt sõltub täielik pseudonüüm bash-completionist v2 (brew install bash-completion@2), mis nõuab vähemalt Bash 4.1. See tähendab, et täieliku varjunime kasutamiseks MacOS-is peate installima Bashi uuema versiooni.

Peate skripti alla laadima bash_completion.sh kohta GitHubi hoidla ja lisage see oma faili ~/.bashrc:

source ~/bash_completion.sh

Pärast kesta taaskäivitamist installitakse täielik alias täielikult.

Kubectli varjunimede automaatse täitmise lubamine

Tehniliselt täielik alias pakub ümbrisfunktsiooni _complete_alias. See funktsioon kontrollib pseudonüümi ja tagastab pseudonüümi käsu lõpetamise vihjed.

Funktsiooni seostamiseks konkreetse varjunimega peate kasutama sisseehitatud Bashi mehhanismi täitma, paigaldama _complete_alias aliase lõpetamise funktsioonina.

Näitena võtame pseudonüümi k, mis tähistab käsku kubectl. paigaldama _complete_alias Selle varjunime täiendusena peaksite käivitama järgmise käsu:

$ complete -F _complete_alias k

Selle tulemuseks on see, et kui täidate pseudonüümi k automaatselt, kutsutakse funktsioon välja _complete_alias, mis kontrollib varjunime ja tagastab käsu lõpetamise vihjed kubectl.

Teise näitena võtame varjunime kg, который обозначает kubectl get:

$ complete -F _complete_alias kg

Nii nagu eelmises näites, saate kg automaatsel täitmisel samad lõpetamisvihjed, mida saate kubectl get.

Pange tähele, et saate kasutada täielikku varjunime oma süsteemi mis tahes varjunime jaoks.

Seetõttu peate kõigi kubectli varjunimede automaatse täitmise lubamiseks nende kõigi jaoks käivitama ülaltoodud käsu. Järgmine koodilõik teeb täpselt seda eeldusel, et olete määranud kubectl-aliased ~/.kubectl-aliases:

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

See koodijupp tuleb sisestada teie ~/.bashrc, перезагрузить командную оболочку и для всех 800 алиасов kubectl станет доступным автодополнение.

6. Расширение kubectl при помощи плагинов

Kuna versioon 1.12, kubectl поддерживает pistikprogrammi mehhanism, mis võimaldab selle funktsioone täiendavate käskudega laiendada.

Kui olete tuttav Giti pistikprogrammide mehhanismid, siis on kubectli pistikprogrammid üles ehitatud samal põhimõttel.

Selles peatükis käsitleme pistikprogrammide installimist, nende leidmist ja oma pistikprogrammide loomist.

Pluginate installimine

Kubectli pistikprogrammid levitatakse lihtsate käivitatavate failidena, mille nimi on nagu kubectl-x. Eesliide kubectl- on nõutav, millele järgneb uus kubectli alamkäsk, mis võimaldab teil pluginale helistada.

Näiteks hello plugin levitatakse failina nimega kubectl-hello.

Pistikprogrammi installimiseks peate faili kopeerima kubectl-x mis tahes kataloogi teie PATH-is ja muutke see käivitatavaks, näiteks rakendusega chmod +x. Kohe pärast seda saate pluginale helistada kubectl x.

Kõigi praegu teie süsteemi installitud pistikprogrammide loetlemiseks saate kasutada järgmist käsku:

$ kubectl plugin list

See käsk kuvab hoiatusi ka siis, kui teil on mitu sama nimega pistikprogrammi või kui pluginate fail ei ole käivitatav.

Pluginate otsimine ja installimine Krew abil

Kubectli pistikprogramme saab jagada või uuesti kasutada nagu tarkvarapakette. Aga kust leida pistikprogramme, mida teised on jaganud?

Projekt Krew eesmärk on pakkuda ühtset lahendust kubectli pistikprogrammide jagamiseks, otsimiseks, installimiseks ja haldamiseks. Projekt nimetab end "kubectli pistikprogrammide paketihalduriks" (Krew on sarnane Pruulima).

Krew on kubectli pistikprogrammide loend, mida saate valida ja installida. Samal ajal on Krew ka kubectli pistikprogramm.

See tähendab, et Krew installimine toimib põhimõtteliselt nagu mis tahes muu kubectli pistikprogrammi installimine. Üksikasjalikud juhised leiate aadressilt GitHubi leht.

Kõige olulisemad Krew käsud on:

# Поиск в списке плагинов
$ 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 abil ei sega pluginate installimist ülalkirjeldatud standardmeetodil.

Pange tähele, et käsk kubectl krew list kuvab ainult Krew abil installitud pistikprogrammid, samas kui käsk kubectl plugin list loetleb kõik pluginad, st need, mis on installitud Krew abil ja mis on installitud muude meetoditega.

Pluginate otsimine mujalt

Krew on noor projekt, praegu selle pooleli nimekirja ainult umbes 30 pistikprogrammi. Kui te ei leia seda, mida vajate, leiate pistikprogrammid mujalt, näiteks GitHubist.

Soovitan vaadata GitHubi jaotist kubectl-pluginad. Sealt leiate kümneid saadaolevaid pistikprogramme, mida tasub üle vaadata.

Oma pluginate kirjutamine

Saate ise luua pluginaid - See ei ole raske. Peate looma käivitatava faili, mis teeb seda, mida vajate, pange sellele nimi kubectl-x ja installige ülalkirjeldatud viisil.

Fail võib olla bash-skript, pythoni skript või kompileeritud GO-rakendus – see pole oluline. Ainus tingimus on, et seda saab operatsioonisüsteemis otse käivitada.

Loome kohe näidisplugina. Eelmises jaotises kasutasite iga kausta konteinerite loetlemiseks käsku kubectl. Seda käsku on lihtne muuta pluginaks, mida saab nt. kubectl img.

Looge fail kubectl-img järgmine sisu:

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

Теперь сделайте файл исполняемым с помощью chmod +x kubectl-img ja teisaldage see oma PATH mis tahes kataloogi. Kohe pärast seda saate pistikprogrammi kasutada kubectl img.

Nagu mainitud, saab kubectli pluginaid kirjutada mis tahes programmeerimis- või skriptikeeles. Kui kasutate shelliskripte, on eeliseks võimalus pistikprogrammis hõlpsalt kutsuda kubectli. Kuid kasutades saate kirjutada keerukamaid pistikprogramme päris programmeerimiskeeltes Kubernetese klienditeek. Kui kasutate Go, saate ka kasutada Cli-runtime raamatukogu, mis on olemas spetsiaalselt kubectli pistikprogrammide kirjutamiseks.

Kuidas pistikprogramme jagada

Kui arvate, et teie pistikprogrammid võivad teistele kasulikud olla, jagage seda GitHubis. Lisage need kindlasti teemasse kubectl-pluginad.

Вы также можете запросить добавление вашего плагина в Krew nimekiri. Juhised, kuidas seda teha, on kirjas GitHubi hoidlad.

Käsu täitmine

Pluginad ei toeta praegu automaatset lõpetamist. See tähendab, et peate sisestama pistikprogrammi täisnime ja argumentide täisnimed.

Selle funktsiooni GitHubi kubectli hoidlas on avatud taotlus. Seega on võimalik, et seda funktsiooni hakatakse kunagi tulevikus rakendama.

Edu!!!

Mida muud selle teema kohta lugeda:

  1. Kolm automaatse skaleerimise taset Kubernetes ja kuidas neid tõhusalt kasutada.
  2. Kubernetes piraatluse vaimus koos rakenduse malliga.
  3. Meie kanal Kubernetese ümber Telegramis.

Allikas: www.habr.com

Lisa kommentaar