Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Kung nagtrabaho ka sa Kubernetes, ang kubectl tingali usa sa mga utilities nga imong gigamit sa kadaghanan. Ug sa matag higayon nga mogugol ka ug daghang oras sa pagtrabaho gamit ang usa ka partikular nga himan, bayad nga tun-an kini pag-ayo ug mahibal-an kung giunsa kini magamit nga epektibo.

team Kubernetes aaS gikan sa Mail.ru gihubad ang usa ka artikulo ni Daniel Weibel diin makit-an nimo ang mga tip ug limbong alang sa epektibo nga pagtrabaho sa kubectl. Makatabang usab kini kanimo nga makabaton ug mas lawom nga pagsabot sa Kubernetes.

Sumala sa tagsulat, ang tumong sa artikulo mao ang paghimo sa imong adlaw-adlaw nga trabaho uban sa Kubernetes dili lamang mas episyente, apan mas makalingaw usab!

Pasiuna: Unsa ang kubectl

Sa dili ka pa makakat-on sa paggamit sa kubectl nga mas epektibo, kinahanglan nimo nga makakuha og sukaranan nga pagsabut kung unsa kini ug kung giunsa kini molihok.

Gikan sa perspektibo sa usa ka user, ang kubectl usa ka control panel nga nagtugot kanimo sa pagbuhat sa mga operasyon sa Kubernetes.

Sa teknikal nga pagsulti, ang kubectl usa ka kliyente sa Kubernetes API.

Ang Kubernetes API kay HTTP REST API. Kini nga API mao ang tinuod nga Kubernetes user interface, diin kini hingpit nga kontrolado. Kini nagpasabot nga ang matag operasyon sa Kubernetes gibutyag isip usa ka API endpoint ug mahimo nga usa ka HTTP nga hangyo sa maong endpoint.

Busa, ang nag-unang trabaho sa kubectl mao ang paghimo sa HTTP nga mga hangyo sa Kubernetes API:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Ang Kubernetes usa ka hingpit nga sistema nga gipunting sa kapanguhaan. Kini nagpasabot nga kini nagmintinar sa internal nga kahimtang sa mga kahinguhaan ug ang tanang operasyon sa Kubernetes mga operasyon sa CRUD.

Naa ka sa hingpit nga pagkontrol sa Kubernetes pinaagi sa pagdumala niini nga mga kahinguhaan, ug ang Kubernetes nagtino kung unsa ang buhaton base sa karon nga kahimtang sa mga kapanguhaan. Tungod niini, ang reference sa Kubernetes API giorganisar isip usa ka lista sa mga tipo sa kahinguhaan uban sa ilang mga kaubang operasyon.

Atong tan-awon ang usa ka pananglitan.

Ingnon ta nga gusto nimo maghimo usa ka kapanguhaan sa ReplicaSet. Aron mahimo kini, imong gihulagway ang ReplicaSet sa usa ka file pinaagi sa ngalan replicaset.yaml, dayon padagana ang sugo:

$ kubectl create -f replicaset.yaml

Makahimo kini usa ka kapanguhaan sa ReplicaSet. Apan unsay mahitabo sa luyo sa mga talan-awon?

Ang Kubernetes adunay operasyon sa paghimo sa ReplicaSet. Sama sa bisan unsang ubang operasyon, kini gibutyag isip usa ka endpoint sa API. Ang piho nga endpoint sa API alang niini nga operasyon ingon niini:

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

Ang mga endpoint sa API para sa tanang operasyon sa Kubernetes makita sa Reperensya sa API (apil sa ibabaw nga endpoint). Para makahimo ug aktuwal nga hangyo sa usa ka endpoint, kinahanglan una nimong idugang ang API server URL sa endpoint paths nga gilista sa API reference.

Busa, kung imong ipatuman ang sugo sa ibabaw, ang kubectl nagpadala ug HTTP POST nga hangyo sa ibabaw nga API endpoint. Ang kahulugan sa ReplicaSet nga imong gihatag sa file replicaset.yaml, gipadala sa lawas sa hangyo.

Ingon niini kung giunsa ang kubectl molihok alang sa tanan nga mga mando nga nakig-uban sa cluster sa Kubernetes. Sa tanan niini nga mga kaso, ang kubectl yano nga naghimo sa mga hangyo sa HTTP sa angay nga mga endpoint sa Kubernetes API.

Palihug timan-i nga mahimo nimong hingpit nga madumala ang Kubernetes gamit ang usa ka utility sama sa curlpinaagi sa mano-mano nga pagpadala sa mga hangyo sa HTTP sa Kubernetes API. Gipasayon ​​lang sa Kubectl ang paggamit sa Kubernetes API.

Kini ang sukaranan kung unsa ang kubectl ug kung giunsa kini molihok. Apan adunay lain bahin sa Kubernetes API nga kinahanglan mahibal-an sa matag kubectl user. Atong tan-awon dayon ang sulod nga kalibutan sa Kubernetes.

Ang sulod nga kalibutan sa Kubernetes

Ang Kubernetes gilangkuban sa usa ka set sa mga independente nga sangkap nga nagdagan ingon bulag nga mga proseso sa mga cluster node. Ang ubang mga sangkap nagdagan sa mga master node, ang uban sa mga worker node, ang matag sangkap naghimo sa kaugalingon nga piho nga buluhaton.

Ania ang labing hinungdanon nga mga sangkap sa panguna nga mga node:

  1. Vault - nagtipig mga kahulugan sa kapanguhaan (kasagaran etcd).
  2. API server - naghatag ug API ug nagdumala sa pagtipig.
  3. Tagdumala sa Controller - Pagsiguro nga ang mga kahimtang sa kapanguhaan nagsunod sa mga detalye.
  4. scheduler - mag-iskedyul pod sa mga worker node.

Ug ania ang usa ka labing hinungdanon nga sangkap sa mga node sa trabahante:

  1. kubelet - nagdumala sa paglansad sa mga sudlanan sa nagtrabaho node.

Aron masabtan kung giunsa kini nga mga sangkap nagtinabangay, tan-awon naton ang usa ka pananglitan.

Ibutang ta nga bag-o lang nimo nahuman kubectl create -f replicaset.yaml, human niana ang kubectl mihimo ug HTTP POST nga hangyo sa ReplicaSet API endpoint (pagpasa sa ReplicaSet resource definition).

Unsa ang nahitabo sa cluster?

  1. Human sa pagbuhat kubectl create -f replicaset.yaml Ang API server nagtipig sa imong ReplicaSet resource definition sa storage:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

  2. Sunod, ang ReplicaSet controller gilunsad sa controller manager, nga nagdumala sa paghimo, pagbag-o ug pagtangtang sa mga kapanguhaan sa ReplicaSet:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

  3. Ang ReplicaSet controller nagmugna og pod definition alang sa matag ReplicaSet replica (sumala sa pod template sa ReplicaSet definition) ug gitipigan kini sa storage:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

  4. Gilunsad ang scheduler, nagsubay sa mga pod nga wala pa ma-assign sa bisan unsang worker node:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

  5. Ang scheduler mopili ug angay nga worker node para sa matag pod ug idugang kini nga impormasyon sa pod definition sa tindahan:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

  6. Sa worker node diin ang pod gi-assign, ang Kubelet gilunsad, kini nagsubay sa mga pod nga gi-assign niini nga node:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

  7. Gibasa sa Kubelet ang kahulugan sa pod gikan sa pagtipig ug gimandoan ang usa ka runtime sa container, sama sa Docker, sa paglansad sa mga sudlanan sa node:

    Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya

Sa ubos usa ka bersyon sa teksto sa kini nga paghulagway.

Ang API request sa ReplicaSet creation endpoint giproseso sa API server. Ang API server nagpamatuod sa hangyo ug nagtipig sa ReplicaSet resource definition sa storage.

Kini nga panghitabo nagsugod sa ReplicaSet controller, nga usa ka subprocess sa controller manager. Ang ReplicaSet controller nagmonitor sa paghimo, pag-update, ug pagtangtang sa ReplicaSet nga mga kapanguhaan sa tindahan ug nakadawat og pahibalo sa panghitabo kung kini mahitabo.

Ang trabaho sa ReplicaSet controller mao ang pagsiguro nga ang gikinahanglan nga gidaghanon sa ReplicaSet pods anaa. Sa among pananglitan, wala pa ang mga pod, mao nga ang ReplicaSet controller nagmugna niini nga mga kahulugan sa pod (sumala sa pod template sa ReplicaSet definition) ug gitipigan kini sa storage.

Ang paghimo og bag-ong mga pod gi-trigger sa usa ka scheduler nga nagsubay sa mga depinisyon sa pod nga wala pa naka-iskedyul alang sa mga worker node. Ang scheduler mopili ug angay nga worker node para sa matag pod ug mag-update sa pod definitions sa repository.

Timan-i nga hangtod niining puntoha, walay workload code nga nagdagan bisan asa sa cluster. Ang tanan nga nahimo hangtod karon - kini ang paghimo ug pag-update sa mga kahinguhaan sa repository sa master node.

Ang katapusan nga panghitabo nagpalihok sa Kubelets, nga nagmonitor sa mga pod nga naka-iskedyul alang sa ilang mga worker node. Ang Kubelet sa worker node diin na-install ang imong ReplicaSet pods kinahanglan magtudlo sa container runtime, sama sa Docker, sa pag-download sa gikinahanglan nga container images ug pagpadagan niini.

Niini nga punto, ang imong ReplicaSet nga aplikasyon sa katapusan nagdagan!

Papel sa Kubernetes API

Sama sa imong nakita sa miaging pananglitan, ang mga sangkap sa Kubernetes (gawas sa API server ug pagtipig) nagbantay sa mga pagbag-o sa mga kapanguhaan sa pagtipig ug pagbag-o sa kasayuran bahin sa mga kapanguhaan sa pagtipig.

Siyempre, kini nga mga sangkap dili direktang makig-uban sa pagtipig, apan pinaagi lamang sa Kubernetes API.

Tagda ang mosunod nga mga pananglitan:

  1. Ang ReplicaSet controller naggamit sa API endpoint ilista ang mga ReplicaSets uban sa parameter watch aron mamonitor ang mga pagbag-o sa mga kapanguhaan sa ReplicaSet.
  2. Ang ReplicaSet controller naggamit sa API endpoint paghimo Pod (paghimo pod) sa paghimo pods.
  3. Ang scheduler naggamit sa API endpoint patch pod (edit pod) aron ma-update ang mga pod nga adunay impormasyon bahin sa pinili nga worker node.

Sama sa imong nakita, kini ang parehas nga API nga gi-access sa kubectl. Ang paggamit sa parehas nga API alang sa internal nga mga sangkap ug eksternal nga tiggamit usa ka sukaranan nga konsepto sa disenyo sa Kubernetes.

Karon mahimo natong i-summarize kung giunsa ang Kubernetes nagtrabaho:

  1. Ang mga tindahan sa pagtipig nag-ingon, nga mao, mga kapanguhaan sa Kubernetes.
  2. Ang API server naghatag ug interface sa storage sa porma sa Kubernetes API.
  3. Ang tanan nga ubang mga sangkap ug tiggamit sa Kubernetes nagbasa, nag-obserbar, ug nagmaniobra sa estado sa Kubernetes (mga kapanguhaan) pinaagi sa API.

Ang pagkahibalo niini nga mga konsepto makatabang kanimo nga mas masabtan ang kubectl ug makuha ang labing kaayo niini.

Karon atong tan-awon ang pipila ka piho nga mga tip ug mga limbong nga makatabang sa pagpalambo sa imong pagka-produktibo sa kubectl.

1. Paspas ang input gamit ang command completion

Usa sa labing mapuslanon, apan kanunay nga mataligam-an, mga teknik sa pagpaayo sa pasundayag sa kubectl mao ang pagkompleto sa sugo.

Ang pagkompleto sa command nagtugot kanimo nga awtomatiko nga makompleto ang mga bahin sa kubectl command gamit ang Tab key. Kini magamit alang sa mga subcommand, mga kapilian, ug mga argumento, lakip ang usa ka butang nga sama ka komplikado sa mga ngalan sa kapanguhaan.

Tan-awa kung giunsa ang pagkompleto sa kubectl command:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Ang pagkompleto sa command nagtrabaho alang sa Bash ug Zsh shells.

Opisyal nga Giya adunay mga detalyado nga panudlo alang sa pag-set up sa autocompletion, apan sa ubos maghatag kami usa ka mubo nga kinutlo.

Giunsa ang pagkompleto sa mando molihok

Ang pagkompleto sa command usa ka bahin sa shell nga magamit gamit ang script sa pagkompleto. Ang extension script usa ka shell script nga naghubit sa kinaiya sa usa ka extension alang sa usa ka piho nga sugo.

Ang Kubectl awtomatik nga naghimo ug nagpagawas sa mga script sa extension para sa Bash ug Zsh gamit ang mosunod nga mga sugo:

$ kubectl completion bash

O:

$ kubectl completion zsh

Sa teoriya, igo na ang pagkonektar sa output niini nga mga sugo ngadto sa angay nga command shell aron ang kubectl makadugang sa mga sugo.

Sa praktis, lahi ang pamaagi sa koneksyon alang sa Bash (lakip ang mga kalainan tali sa Linux ug MacOS) ug Zsh. Sa ubos atong tan-awon ang tanan niini nga mga kapilian.

Bash sa Linux

Ang script sa pagkompleto sa Bash nagdepende sa pakete sa pagkompleto sa bash, mao nga kinahanglan nimo kini i-install una:

$ sudo apt-get install bash-completion

O:

$ yum install bash-completion

Mahimo nimong sulayan nga malampuson nga na-install ang package gamit ang mosunud nga mando:

$ type _init_completion

Kung kini nagpagawas sa shell function code, nan ang bash-completion na-install sa husto. Kung ang sugo naghatag og "Not Found" error, kinahanglan nimong idugang ang mosunod nga linya sa imong file ~ / .bashrc:

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

Kinahanglan ba nga idugang kini nga linya sa file ~ / .bashrc o dili depende sa package manager nga imong gigamit sa pag-install sa bash-completion. Kinahanglan kini alang sa APT, apan dili alang sa YUM.

Human ma-install ang bash-completion, kinahanglan nimo nga i-configure ang tanan aron ang kubectl completion script ma-enable sa tanang shell session.

Usa ka paagi sa pagbuhat niini mao ang pagdugang sa mosunod nga linya sa file ~ / .bashrc:

source <(kubectl completion bash)

Ang laing paagi mao ang pagdugang sa kubectl extension script sa direktoryo /etc/bash_completion.d (himoa kini kung wala kini):

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

Tanan nga add-on nga mga script sa katalogo /etc/bash_completion.d awtomatik nga gilakip sa bash-completion.

Ang duha nga mga kapilian parehas nga magamit.

Human ma-restart ang shell, ang kubectl command completion molihok.

Bash sa MacOS

Sa MacOS ang pag-setup medyo mas komplikado. Ang tinuod mao nga pinaagi sa default, ang MacOS naggamit sa Bash nga bersyon 3.2, ug ang kubectl autocompletion script nanginahanglan usa ka Bash nga bersyon nga labing menos 4.1 ug dili molihok sa Bash 3.2.

Adunay mga isyu sa paglilisensya nga nalangkit sa paggamit sa usa ka outdated nga bersyon sa Bash sa MacOS. Ang Bash nga bersyon 4 lisensyado ubos sa GPLv3, nga wala gisuportahan sa Apple.

Aron ma-configure ang kubectl autocompletion sa MacOS, kinahanglan nimo nga i-install ang usa ka bag-o nga bersyon sa Bash. Mahimo usab nimo nga ibutang ang na-update nga Bash isip imong default shell, nga makaluwas kanimo og daghang mga problema sa umaabot. Dili kini lisud, ang mga detalye gihatag sa artikulo "Pag-update sa Bash sa MacOS".

Sa dili pa magpadayon, siguroha nga naggamit ka bag-o nga bersyon sa Bash (susiha ang output bash --version).

Ang script sa pagkompleto sa Bash magkalainlain sa proyekto bash-pagkompleto, mao nga kinahanglan nimo kini i-install una.

Mahimo nimong i-install ang bash-completion gamit ang Homebrew:

$ brew install bash-completion@2

kini mao ang @2 nagpasabot sa bash-completion version 2. kubectl autocompletion nagkinahanglan bash-completion v2, ug bash-completion v2 nagkinahanglan ug minimum nga Bash version 4.1.

Output sa mando brew-install adunay usa ka seksyon sa Caveats, nga nagtino kung unsa ang kinahanglan idugang sa file ~/.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"

Bisan pa, girekomenda ko nga idugang kini nga mga linya nga dili ~/.bash_profileug sa ~/.bashrc. Sa kini nga kaso, ang autocompletion magamit dili lamang sa panguna, kondili usab sa mga bata nga command shell.

Human ma-restart ang command shell, mahimo nimong mapamatud-an nga husto ang pag-install gamit ang mosunud nga mando:

$ type _init_completion

Kung nakakita ka usa ka function sa shell sa output, nan ang tanan na-configure sa husto.

Karon kinahanglan namong siguroon nga ang kubectl autocompletion ma-enable sa tanang sesyon.

Usa ka paagi mao ang pagdugang sa mosunod nga linya sa imong ~/.bashrc:

source <(kubectl completion bash)

Ang ikaduha nga paagi mao ang pagdugang usa ka autocomplete nga script sa folder /usr/local/etc/bash_completion.d:

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

Kini nga pamaagi magamit lamang kung imong gi-install ang bash-completion gamit ang Homebrew. Sa kini nga kaso, ang bash-completion nagkarga sa tanan nga mga script gikan sa kini nga direktoryo.

Kung imong gi-install kubectl gamit ang Homebrew, unya dili kinahanglan nga buhaton ang miaging lakang, tungod kay ang autocompletion script awtomatiko nga ibutang sa folder /usr/local/etc/bash_completion.d sa panahon sa pag-instalar. Sa kini nga kaso, ang kubectl autocompletion magsugod sa pagtrabaho sa diha nga imong i-install ang bash-completion.

Ingon usa ka sangputanan, ang tanan niini nga mga kapilian managsama.

Zsh

Ang mga autocompletion script para sa Zsh wala magkinahanglan ug bisan unsang dependency. Ang kinahanglan nimong buhaton mao ang pagpagana kanila kung imong gikarga ang command shell.

Mahimo nimo kini pinaagi sa pagdugang usa ka linya sa imong ~/.zshrc file:

source <(kubectl completion zsh)

Kung nakadawat ka og sayup not found: compdef pagkahuman sa pagsugod pag-usab sa imong kabhang, kinahanglan nimo nga i-enable ang builtin function compdef. Mahimo nimo kini pinaagi sa pagdugang niini sa sinugdanan sa imong file ~/.zshrc nagsunod:

autoload -Uz compinit
compinit

2. Dali nga tan-awa ang mga detalye sa kapanguhaan

Kung maghimo ka mga kahulugan sa kapanguhaan sa YAML, kinahanglan nimo mahibal-an ang mga natad ug ang kahulugan niini alang sa mga kapanguhaan. Usa ka dapit sa pagpangita niini nga impormasyon anaa sa API reference, nga naglangkob sa kompleto nga mga detalye alang sa tanan nga mga kapanguhaan.

Bisan pa, ang pagbalhin sa web browser matag higayon nga kinahanglan nimo pangitaon ang usa ka butang dili kombenyente. Busa ang kubectl naghatag sa sugo kubectl explain, nga nagpakita sa mga detalye sa tanang mga kahinguhaan diha mismo sa imong terminal.

Ang command format mao ang mosunod:

$ kubectl explain resource[.field]...

Ang mando magpagawas sa espesipikasyon sa gihangyo nga kapanguhaan o uma. Ang impormasyon nga gipakita susama sa anaa sa manwal sa API.

pinaagi sa default kubectl explain nagpakita lamang sa unang ang-ang sa nesting sa mga uma.

Tan-awa kung unsa ang hitsura niini mahimong naa dinhi.

Mahimo nimong ipakita ang tibuuk nga kahoy kung imong idugang ang kapilian --recursive:

$ kubectl explain deployment.spec --recursive

Kung wala ka mahibal-an kung unsang mga kapanguhaan ang gikinahanglan, mahimo nimong ipakita ang tanan gamit ang mosunud nga mando:

$ kubectl api-resources

Kini nga sugo nagpakita sa mga ngalan sa kapanguhaan sa plural nga porma, e.g. deployments imbis nga deployment. Gipakita usab niini ang mubo nga ngalan, pananglitan deploy, alang niadtong mga kahinguhaan nga aduna niini. Ayaw kabalaka bahin niini nga mga kalainan. Ang tanan niini nga mga kapilian sa pagngalan katumbas sa kubectl. Sa ato pa, mahimo nimong gamiton ang bisan kinsa niini alang sa kubectl explain.

Ang tanan nga mosunod nga mga sugo katumbas:

$ kubectl explain deployments.spec
# ΠΈΠ»ΠΈ
$ kubectl explain deployment.spec
# ΠΈΠ»ΠΈ        
$ kubectl explain deploy.spec

3. Gamit ug custom column output format

Default nga command output format 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

Kini nga pormat sayon, apan kini adunay limitado nga gidaghanon sa impormasyon. Kon itandi sa tibuok nga resource definition format, pipila lang ka field ang gipakita dinhi.

Sa kini nga kaso, mahimo nimong gamiton ang usa ka naandan nga format sa output sa kolum. Gitugotan ka niini nga mahibal-an kung unsang datos ang ma-output. Mahimo nimong ipakita ang bisan unsang natad sa kapanguhaan ingon usa ka lahi nga kolum.

Ang paggamit sa usa ka naandan nga pormat gitino gamit ang mga kapilian:

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

Mahimo nimong ipasabut ang matag kolum sa output ingon usa ka pares <header>:<jsonpath>diin <header> mao ang ngalan sa kolum, ug <jsonpath> β€” usa ka ekspresyon nga naghubit sa natad sa kahinguhaan.

Atong tan-awon ang usa ka yano nga pananglitan:

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

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

Ang output adunay usa ka kolum nga adunay mga ngalan sa mga pod.

Ang opsyon nga ekspresyon nagpili sa pod nga mga ngalan gikan sa field metadata.name. Kini tungod kay ang ngalan sa pod gihubit sa natad sa ngalan sa bata metadata sa resource description sa pod. Dugang nga mga detalye makita sa Giya sa API o i-type ang sugo kubectl explain pod.metadata.name.

Karon ingnon ta nga gusto nimong idugang ang dugang nga kolum sa output, pananglitan nga gipakita ang node nga ang matag pod nagdagan. Aron mahimo kini, mahimo nimong idugang ang angay nga detalye sa kolum sa kapilian nga naandan nga mga kolum:

$ 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

Gipili sa ekspresyon ang ngalan sa node gikan sa spec.nodeName - kung ang usa ka pod gi-assign sa usa ka node, ang ngalan niini gisulat sa uma spec.nodeName pod resource specification. Ang mas detalyado nga impormasyon makita sa output kubectl explain pod.spec.nodeName.

Palihug timan-i nga ang Kubernetes resource fields kay case sensitive.

Mahimo nimong tan-awon ang bisan unsang natad sa kapanguhaan ingon usa ka kolum. Ribyuha lang ang espesipikasyon sa kapanguhaan ug sulayi kini sa bisan unsang natad nga gusto nimo.

Apan una, atong tan-awon pag-ayo ang mga ekspresyon sa pagpili sa uma.

Mga Ekspresyon sa JSONPath

Ang mga ekspresyon sa pagpili sa mga natad sa kahinguhaan gibase sa JSONPath.

Ang JSONPath usa ka pinulongan alang sa pagkuha sa datos gikan sa mga dokumento sa JSON. Ang pagpili sa usa ka uma mao ang pinakasimple nga kaso sa paggamit alang sa JSONPath. Daghan siya dugang nga mga posibilidad, lakip ang mga tigpili, mga filter ug uban pa.

Gipatin-aw sa Kubectl nagsuporta sa limitado nga gidaghanon sa mga bahin sa JSONPath. Ang mga posibilidad ug mga pananglitan sa ilang paggamit gihulagway sa ubos:

# Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС элСмСнты списка
$ 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'

Ang [] operator labi ka importante. Daghang mga natad sa kapanguhaan sa Kubernetes ang mga lista, ug kini nga operator nagtugot kanimo sa pagpili sa mga miyembro sa mga lista. Kanunay kini nga gigamit sa usa ka wildcard sama sa [*] aron mapili ang tanan nga mga elemento sa usa ka lista.

Mga pananglitan sa aplikasyon

Ang mga posibilidad sa paggamit sa usa ka custom nga column output format walay katapusan, tungod kay mahimo nimong ipakita ang bisan unsa nga field o kombinasyon sa resource fields sa output. Ania ang pipila ka sampol nga mga app, apan ayaw pagduhaduha sa pagsuhid niini sa imong kaugalingon ug pagpangita sa mga aplikasyon nga mohaum kanimo.

  1. Pagpakita og mga hulagway sa sudlanan para sa mga pod:
    $ 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

    Kini nga sugo nagpakita sa mga ngalan sa hulagway sa sudlanan alang sa matag pod.

    Hinumdumi nga ang usa ka pod mahimong adunay daghang mga sudlanan, unya ang mga ngalan sa imahe ipakita sa usa ka linya, gibulag sa mga koma.

  2. Pagpakita sa node availability zones:
    $ 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

    Kini nga sugo mapuslanon kung ang imong cluster gi-host sa usa ka publiko nga panganod. Gipakita niini ang availability zone alang sa matag node.

    Ang Availability zone usa ka konsepto sa panganod nga naglimite sa replication zone sa usa ka geographic nga rehiyon.

    Ang mga lugar nga magamit alang sa matag node makuha pinaagi sa usa ka espesyal nga label - failure-domain.beta.kubernetes.io/zone. Kung ang cluster nagdagan sa usa ka publiko nga panganod, kini nga label awtomatiko nga gihimo ug napuno sa mga ngalan sa mga magamit nga sona alang sa matag node.

    Ang mga label dili bahin sa espesipikasyon sa kapanguhaan sa Kubernetes, mao nga dili nimo makit-an ang kasayuran bahin niini Giya sa API. Bisan pa, kini makita (sama sa ubang mga label) kung mangayo ka og impormasyon bahin sa mga node sa YAML o JSON nga format:

    $ kubectl get nodes -o yaml
    # ΠΈΠ»ΠΈ
    $ kubectl get nodes -o json

    Kini usa ka maayo nga paagi aron mahibal-an ang dugang bahin sa mga kapanguhaan, dugang sa mga detalye sa pagkat-on sa kapanguhaan.

4. Dali nga pagbalhin tali sa mga cluster ug namespaces

Kung ang kubectl mohimo ug hangyo sa Kubernetes API, kini una nga nagbasa sa kubeconfig file aron makuha ang tanang gikinahanglan nga mga parameter para sa koneksyon.

Sa kasagaran ang kubeconfig file mao ang ~/.kube/config. Kasagaran kini nga file gihimo o gi-update pinaagi sa usa ka espesyal nga mando.

Kung nagtrabaho ka sa daghang mga cluster, ang imong kubeconfig file adunay mga setting alang sa pagkonektar sa tanan nga mga cluster. Kinahanglan nimo ang usa ka paagi aron isulti ang kubectl command kung unsang cluster ang imong gitrabahoan.

Sulod sa usa ka cluster, makahimo ka og daghang namespacesβ€”usa ka matang sa virtual cluster sulod sa physical cluster. Gitino usab sa Kubectl kung unsang namespace ang gamiton base sa kubeconfig file. Kini nagpasabut nga kinahanglan nimo usab ang usa ka paagi aron isulti ang kubectl nga mando kung unsang namespace ang magamit.

Niini nga kapitulo atong ipasabut kung giunsa kini paglihok ug kung giunsa kini epektibo nga molihok.

Timan-i nga mahimo ka adunay daghang mga kubeconfig file nga gilista sa KUBECONFIG environment variable. Sa kini nga kaso, kining tanan nga mga file mahiusa sa usa ka sagad nga pagsulud sa oras sa pagdagan. Mahimo usab nimo usbon ang default kubeconfig file pinaagi sa pagpadagan sa kubectl gamit ang parameter --kubeconfig. Tan-awa opisyal nga dokumentasyon.

kubeconfig files

Atong tan-awon kon unsa gayud ang sulod sa kubeconfig file:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Sama sa imong makita, ang kubeconfig file adunay usa ka hugpong sa mga konteksto. Ang konteksto naglangkob sa tulo ka elemento:

  • Cluster β€” API URL sa cluster server.
  • User - user authentication credentials sa cluster.
  • Namespace - ang namespace nga gigamit sa pag-apil sa cluster.

Sa praktis, kanunay nilang gigamit ang usa ka konteksto matag cluster sa ilang kubeconfig. Bisan pa, mahimo kang adunay daghang konteksto matag cluster, nga lahi sa user o namespace. Bisan pa, kini nga pag-configure sa daghang konteksto dili kasagaran, mao nga kasagaran adunay usa-sa-usa nga pagmapa tali sa mga cluster ug konteksto.

Sa bisan unsang panahon, ang usa sa mga konteksto mao ang karon:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Sa diha nga ang kubectl nagbasa sa usa ka configuration file, kini kanunay nga nagkinahanglan og impormasyon gikan sa kasamtangan nga konteksto. Sa pananglitan sa ibabaw, ang kubectl magkonektar sa Hare cluster.

Busa, aron makabalhin sa laing cluster, kinahanglan nimo nga usbon ang kasamtangan nga konteksto sa kubeconfig file:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Karon ang kubectl magkonektar sa Fox cluster.

Aron makabalhin sa lain nga namespace sa parehas nga cluster, kinahanglan nimo nga usbon ang kantidad sa elemento sa namespace alang sa karon nga konteksto:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Sa pananglitan sa ibabaw, ang kubectl mogamit sa Fox cluster's Prod namespace (kaniadto ang Test namespace gitakda).

Timan-i nga ang kubectl naghatag usab mga kapilian --cluster, --user, --namespace ΠΈ --context, nga nagtugot kanimo sa pag-overwrite sa indibidwal nga mga elemento ug sa kasamtangan nga konteksto mismo, bisan unsa pa ang gibutang sa kubeconfig. Tan-awa kubectl options.

Sa teorya, mahimo nimong usbon ang mga setting sa kubeconfig. Apan dili kombenyente. Aron pasimplehon kini nga mga operasyon, adunay lainlaing mga utility nga nagtugot kanimo nga awtomatiko nga usbon ang mga parameter.

Gamit ug kubectx

Usa ka sikat kaayo nga gamit alang sa pagbalhin tali sa mga cluster ug namespaces.

Ang utility naghatag mga mando kubectx ΠΈ kubens aron usbon ang kasamtangang konteksto ug namespace matag usa.

Sama sa nahisgutan, ang pagbag-o sa karon nga konteksto nagpasabut sa pagbag-o sa cluster kung adunay usa ra ka konteksto matag cluster.

Ania ang usa ka pananglitan sa pagpadagan niini nga mga sugo:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Sa esensya, kini nga mga sugo yano nga i-edit ang kubeconfig file sama sa gihulagway sa ibabaw.

sa pagbutang kubectx, sunda ang mga instruksyon sa Gitub.

Ang duha ka mga sugo nagsuporta sa autocompletion sa konteksto ug namespace nga mga ngalan, nga nagwagtang sa panginahanglan sa pag-type niini sa hingpit. Mga panudlo alang sa pag-set up sa autocompletion dinhi.

Laing mapuslanon nga bahin kubectx Kini mao ang interactive nga paagi. Naglihok kini kauban ang utility fzf, nga kinahanglang i-install nga gilain. Ang pag-install sa fzf awtomatik nga naghimo sa interactive mode nga magamit sa kubectx. Sa interactive, mahimo nimong pilion ang konteksto ug namespace pinaagi sa interactive nga libre nga search interface nga gihatag sa fzf.

Paggamit sa shell alias

Dili nimo kinahanglan ang lahi nga mga himan aron mabag-o ang karon nga konteksto ug namespace tungod kay ang kubectl naghatag usab mga mando alang niini. Oo, team kubectl config naghatag og mga subcommand alang sa pag-edit sa mga file sa kubeconfig.

Ania ang pipila niini:

  • kubectl config get-contexts: ipakita ang tanang konteksto;
  • kubectl config current-context: pagkuha sa kasamtangan nga konteksto;
  • kubectl config use-context: usba ang kasamtangang konteksto;
  • kubectl config set-context: Usba ang elemento sa konteksto.

Bisan pa, ang paggamit niini nga mga sugo direkta dili kaayo kombenyente tungod kay kini taas. Makahimo ka og mga alyas sa kabhang alang kanila nga sayon ​​ipatuman.

Naghimo ako usa ka hugpong sa mga alyas base sa kini nga mga mando nga naghatag gamit nga parehas sa kubectx. Dinhi makita nimo sila nga naglihok:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Timan-i nga ang mga alyas naggamit og fzf aron paghatag og interactive nga libre nga lookup interface (sama sa interactive mode sa kubectx). Kini nagpasabut nga kinahanglan nimo instalar fzfsa paggamit niini nga mga alyas.

Ania ang mga kahulugan sa mga alias mismo:

# ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст
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/^..//")"'

Aron mabutang kini nga mga alyas kinahanglan nimo nga idugang ang mga kahulugan sa ibabaw sa imong file ~/.bashrc o ~/.zshrc ug i-reboot ang imong shell.

Paggamit sa mga plugins

Gitugotan ka sa Kubectl nga i-load ang mga plugins nga gipatuman sa parehas nga paagi sama sa sukaranan nga mga mando. Mahimo nimo, pananglitan, i-install ang kubectl-foo plugin ug ipadagan kini pinaagi sa pagpatuman sa mando kubectl foo.

Mahimong sayon ​​​​ang pag-usab sa konteksto ug namespace niining paagiha, pananglitan pinaagi sa pagdagan kubectl ctx sa pag-usab sa konteksto ug kubectl ns aron usbon ang namespace.

Nagsulat ako og duha ka mga plugins nga naghimo niini:

Ang trabaho sa mga plugins gibase sa mga alias gikan sa miaging seksyon.

Ania kung giunsa nila pagtrabaho:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Timan-i nga ang mga plugins naggamit sa fzf aron paghatag ug interactive nga libre nga search interface (sama sa interactive mode sa kubectx). Kini nagpasabut nga kinahanglan nimo instalar fzfsa paggamit niini nga mga alyas.

Aron ma-install ang mga plugin, kinahanglan nimo nga i-download ang mga script sa shell nga ginganlan kubectl-ctx ΠΈ kubectl-ns sa bisan unsang direktoryo sa imong PATH variable ug himoa kini nga ma-executable sa e.g. chmod +x. Diha-diha dayon human niini kamo makahimo sa paggamit kubectl ctx ΠΈ kubectl ns.

5. Bawasan ang input gamit ang mga autoaliases

Ang mga alyas sa Shell usa ka maayong paagi aron mapadali ang pag-input. Proyekto kubectl-aliases adunay mga 800 ka mga shortcut para sa mga batakang kubectl commands.

Tingali nahibulong ka - giunsa nimo paghinumdom ang 800 ka alyas? Apan dili nimo kinahanglan nga hinumdoman silang tanan, tungod kay kini gitukod sumala sa usa ka yano nga laraw, nga gihatag sa ubos:

Giunsa paggamit ang kubectl nga labi ka epektibo: usa ka detalyado nga giya
Pananglitan:

  1. kgpooyaml - kubectl makakuha pods oyaml
  2. ksysgsvcw - kubectl -n kube-system makakuha svc w
  3. ksysrmcm -kubectl -n kube-system rm cm
  4. kgdepallsl - kubectl makuha ang deployment sa tanan nga sl

Sama sa imong makita, ang mga alyas gilangkuban sa mga sangkap, nga ang matag usa nagrepresentar sa usa ka piho nga elemento sa kubectl command. Ang matag alyas mahimong adunay usa ka component para sa base command, operation, ug resource, ug daghang component para sa parameters. Imong "populate" lamang kini nga mga sangkap gikan sa wala ngadto sa tuo sumala sa dayagram sa ibabaw.

Ang kasamtangan nga detalyado nga diagram anaa sa GitHub. Didto sab nimo makit-an bug-os nga listahan sa mga alyas.

Pananglitan, ang alias kgpooyamlall katumbas sa sugo kubectl get pods -o yaml --all-namespaces.

Ang relatibong han-ay sa mga kapilian dili importante: sugo kgpooyamlall katumbas sa sugo kgpoalloyaml.

Dili nimo kinahanglan nga gamiton ang tanan nga mga sangkap ingon mga alyas. Pananglitan k, kg, klo, ksys, kgpo mahimo usab nga gamiton. Dugang pa, mahimo nimong ikombinar ang mga alias ug regular nga mga sugo o mga kapilian sa command line:

Pananglitan:

  1. Hinuon kubectl proxy makasulat ka k proxy.
  2. Hinuon kubectl get roles makasulat ka kg roles (karon walay alyas alang sa Role resource).
  3. Aron makakuha og datos alang sa usa ka piho nga pod, mahimo nimong gamiton ang sugo kgpo my-pod β€” kubectl get pod my-pod.

Palihug timan-i nga ang ubang mga alias nanginahanglan og argumento sa command line. Pananglitan, alyas kgpol paagi kubectl get pods -l. Opsyon -l nagkinahanglan og argumento - usa ka espesipikasyon sa label. Kung mogamit ka ug alyas kini tan-awon kgpol app=ui.

Tungod kay ang ubang mga alyas nanginahanglan ug mga argumento, ang mga alyas a, f, ug l kinahanglan nga gamiton sa katapusan.

Sa kinatibuk-an, sa higayon nga makuha nimo kini nga laraw, mahimo nimong makuha ang mga alias gikan sa mga sugo nga gusto nimong ipatuman ug makatipig daghang oras sa pag-type.

pag-instalar

Aron ma-install ang kubectl-aliases, kinahanglan nimo nga i-download ang file .kubectl_aliases gikan sa GitHub ug ilakip kini sa file ~/.bashrc o ~/.zshrc:

source ~/.kubectl_aliases

Autocompletion

Sama sa among giingon kaniadto, kanunay ka magdugang dugang nga mga pulong sa usa ka alyas sa linya sa mando. Pananglitan:

$ kgpooyaml test-pod-d4b77b989

Kung mogamit ka sa kubectl command completion, lagmit imong gigamit ang autocompletion alang sa mga butang sama sa mga ngalan sa kapanguhaan. Apan mahimo ba kini kung gigamit ang mga alyas?

Kini usa ka hinungdanon kaayo nga pangutana tungod kay kung dili molihok ang autocompletion, mawala nimo ang pipila ka mga benepisyo sa mga alias.

Ang tubag nagdepende kung unsang shell ang imong gigamit:

  1. Alang kang Zsh, ang pagkompleto sa alyas nagtrabaho sa gawas sa kahon.
  2. Alang sa Bash, sa walay palad, gikinahanglan ang pipila ka trabaho aron makatrabaho ang autocompletion.

Pag-enable sa autocompletion para sa mga alias sa Bash

Ang problema sa Bash mao nga kini mosulay sa pagkompleto (sa matag higayon nga imong ipadayon ang Tab) ang alyas, dili ang sugo nga gitumong sa alyas (sama sa gibuhat ni Zsh, pananglitan). Tungod kay wala kay mga script sa pagkompleto para sa tanang 800 ka alyas, ang autocompletion dili mogana.

Ang proyekto kompleto-alyas naghatag ug kinatibuk-ang solusyon niini nga problema. Nagdugtong kini sa mekanismo sa pagkompleto para sa mga alyas, gipalapdan sa sulod ang alyas ngadto sa usa ka sugo, ug gibalik ang mga opsyon sa pagkompleto para sa nakompletong sugo. Kini nagpasabot nga ang padding alang sa usa ka alyas molihok nga parehas sa usa ka bug-os nga sugo.

Sa musunod, una nakong ipasabot kung giunsa pag-install ang kompleto nga alyas ug dayon kung giunsa kini pag-configure aron makompleto ang tanan nga alyas sa kubectl.

Pag-instalar sa kompleto nga alyas

Una sa tanan, ang kompleto nga alyas nagdepende sa bash-pagkompleto. Busa, sa dili pa i-install ang kompleto nga alyas, kinahanglan nimo nga sigurohon nga ang bash-completion na-install. Ang mga panudlo sa pag-install gihatag kaniadto para sa Linux ug MacOS.

Importante nga Pahinumdom alang sa MacOS Users: Sama sa kubectl autocompletion script, ang complete-alias dili mogana sa Bash 3.2, nga maoy default sa MacOS. Sa partikular, ang kompleto nga alyas nagdepende sa bash-completion v2 (brew install bash-completion@2), nga nanginahanglan labing menos Bash 4.1. Nagpasabot kini nga aron magamit ang kompleto nga alyas sa MacOS kinahanglan nimo nga i-install ang usa ka bag-ong bersyon sa Bash.

Kinahanglan nimo nga i-download ang script bash_completion.sh gikan sa GitHub repository ug iapil kini sa imong file ~/.bashrc:

source ~/bash_completion.sh

Pagkahuman sa pag-reboot sa kabhang, ang kompleto nga alyas hingpit nga ma-install.

Pag-enable sa autocompletion para sa mga kubectl alias

Ang teknikal nga kompleto nga alyas naghatag usa ka function sa wrapper _complete_alias. Kini nga function nagsusi sa alyas ug nagbalik sa mga pahibalo sa pagkompleto alang sa alias command.

Aron ma-associate ang usa ka function sa usa ka piho nga alias, kinahanglan nimo gamiton ang built-in nga mekanismo sa Bash bug-os nga, sa pag-instalar _complete_alias isip usa ka function sa pagkompleto sa alias.

Isip pananglitan, atong kuhaon ang alias k, nga nagpasabot sa kubectl command. sa pag-instalar _complete_alias Isip usa ka komplemento nga function alang niini nga alyas, kinahanglan nimong ipadagan ang mosunod nga sugo:

$ complete -F _complete_alias k

Ang resulta niini mao nga sa matag higayon nga imong autocomplete ang usa ka alias k, ang function gitawag _complete_alias, nga nagsusi sa alias ug nagbalik sa mga pahibalo sa pagkompleto alang sa sugo kubectl.

Isip ikaduhang pananglitan, atong kuhaon ang alias kg, nga nagpasabot kubectl get:

$ complete -F _complete_alias kg

Sama sa miaging pananglitan, kung mag-autocomplete ka kg, makuha nimo ang parehas nga mga pahiwatig sa pagkompleto nga makuha nimo kubectl get.

Timan-i nga mahimo nimong gamiton ang kompleto nga alyas alang sa bisan unsang alyas sa imong sistema.

Busa, aron mahimo ang autocompletion alang sa tanan nga mga alyas sa kubectl, kinahanglan nimo nga ipadagan ang sugo sa ibabaw alang sa matag usa kanila. Ang mosunod nga snippet mao gayud ang nagbuhat niini, basta imong gibutang ang kubectl-aliases sa ~/.kubectl-aliases:

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

Kini nga piraso sa code kinahanglan nga ibutang sa imong ~/.bashrc, i-restart ang command shell ug ang autocompletion mahimong magamit alang sa tanan nga 800 kubectl alias.

6. Pagpalapad sa kubectl gamit ang mga plugins

Sugod gikan bersyon 1.12, nagsuporta sa kubectl mekanismo sa plugin, nga nagtugot kanimo sa pagpalapad sa mga gimbuhaton niini sa dugang nga mga sugo.

Kung pamilyar ka sa Mga mekanismo sa Git plugin, unya ang kubectl plugins gitukod sa samang prinsipyo.

Niini nga kapitulo, atong hisgotan kon unsaon pag-instalar sa mga plugins, asa kini makit-an, ug unsaon paghimo sa imong kaugalingong mga plugins.

Pag-instalar sa mga plugins

Ang mga plugin sa Kubectl gipang-apod-apod isip yano nga mga executable nga mga file nga adunay ngalan nga sama kubectl-x. Prefix kubectl- gikinahanglan, gisundan sa usa ka bag-ong kubectl subcommand nga nagtugot kanimo sa pagtawag sa plugin.

Pananglitan, ang hello plugin iapud-apod isip usa ka file nga gitawag kubectl-hello.

Aron ma-install ang plugin, kinahanglan nimo nga kopyahon ang file kubectl-x sa bisan unsang direktoryo sa imong PATH ug himoa kini nga ma-executable, pananglitan sa chmod +x. Diha-diha dayon pagkahuman niini mahimo nimong tawagan ang plugin nga adunay kubectl x.

Mahimo nimong gamiton ang mosunud nga mando aron ilista ang tanan nga mga plugin nga na-install karon sa imong sistema:

$ kubectl plugin list

Kini nga sugo magpakita usab og mga pasidaan kon ikaw adunay daghang mga plugins nga adunay parehas nga ngalan, o kung adunay usa ka plugins file nga dili ma-executable.

Pagpangita ug pag-instalar sa mga plugin gamit ang Krew

Ang mga plugin sa Kubectl mahimong ipaambit o gamiton pag-usab sama sa mga pakete sa software. Apan asa nimo makit-an ang mga plugin nga gipaambit sa uban?

Proyekto Krew nagtumong sa paghatag usa ka hiniusa nga solusyon alang sa pagpaambit, pagpangita, pag-install ug pagdumala sa mga plugins sa kubectl. Ang proyekto nagtawag sa iyang kaugalingon nga "package manager para sa kubectl plugins" (Krew susama sa Brew).

Ang Krew usa ka lista sa kubectl plugins nga mahimo nimong pilion ug i-install. Sa parehas nga oras, ang Krew usa usab ka plugin alang sa kubectl.

Kini nagpasabut nga ang pag-install sa Krew molihok sama sa pag-install sa bisan unsang ubang kubectl plugin. Makita nimo ang detalyado nga mga panudlo sa GitHub nga panid.

Ang labing hinungdanon nga mga mando sa Krew mao ang:

# Поиск в спискС плагинов
$ kubectl krew search [<query>]
# ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π΅
$ kubectl krew info <plugin>
# Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½
$ kubectl krew install <plugin>
# ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ всС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ Π΄ΠΎ послСднСй вСрсии
$ kubectl krew upgrade
# ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ всС ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹, установлСнныС Ρ‡Π΅Ρ€Π΅Π· Krew
$ kubectl krew list
# Π”Π΅ΠΈΠ½ΡΡ‚Π°Π»Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ»Π°Π³ΠΈΠ½
$ kubectl krew remove <plugin>

Palihug timan-i nga ang pag-instalar sa mga plugin gamit ang Krew dili makabalda sa pag-instalar sa mga plugin gamit ang standard nga pamaagi nga gihulagway sa ibabaw.

Palihug timan-i nga ang sugo kubectl krew list nagpakita lamang sa mga plugins nga gi-install gamit ang Krew, samtang ang command kubectl plugin list naglista sa tanan nga mga plugin, nga mao, kadtong gi-install gamit ang Krew ug kadtong gi-install sa ubang mga pamaagi.

Pagpangita mga Plugin sa Laing dapit

Ang Krew usa ka batan-on nga proyekto, nga karon anaa na niini ang listahan mga 30 lang ka plugins. Kung dili nimo makit-an ang imong kinahanglan, makit-an nimo ang mga plugins sa ubang lugar, sama sa GitHub.

Girekomenda nako ang pagtan-aw sa seksyon sa GitHub kubectl-plugins. Didto makit-an nimo ang daghang mga magamit nga plugin nga angayan nga susihon.

Pagsulat sa imong kaugalingon nga mga plugin

mahimo nimo ang imong kaugalingon paghimo og mga plugins - Dili kini lisud. Kinahanglan nimo nga maghimo usa ka executable nga mahimo kung unsa ang imong kinahanglan, ngalan kini sama kubectl-x ug i-install sama sa gihulagway sa ibabaw.

Ang file mahimo nga usa ka bash script, usa ka script sa python, o usa ka hiniusa nga aplikasyon sa GO - dili kini igsapayan. Ang bugtong kondisyon mao nga kini mahimong direkta nga ipatuman sa operating system.

Maghimo kita usa ka pananglitan nga plugin karon. Sa miaging seksyon, imong gigamit ang kubectl command aron ilista ang mga sudlanan alang sa matag pod. Sayon nga himuon kini nga sugo nga usa ka plugin nga mahimo nimong tawagan e.g. kubectl img.

Paghimo og file kubectl-img ang mosunod nga sulod:

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

Karon himoa ang file executable sa chmod +x kubectl-img ug ibalhin kini sa bisan unsang direktoryo sa imong PATH. Diha-diha dayon human niini mahimo nimong gamiton ang plugin kubectl img.

Sama sa gihisgutan, ang kubectl plugins mahimong isulat sa bisan unsang programming o scripting nga pinulongan. Kung naggamit ka mga script sa shell, ang bentaha nga dali nga makatawag sa kubectl gikan sa sulod sa plugin. Bisan pa, mahimo nimong isulat ang labi ka komplikado nga mga plugin sa tinuud nga mga sinultian nga programming gamit Kubernetes client library. Kung ikaw naggamit sa Go, mahimo usab nimo gamiton cli-runtime library, nga anaa ilabi na sa pagsulat sa kubectl plugins.

Giunsa ipaambit ang imong mga plugin

Kung sa imong hunahuna ang imong mga plugin mahimong mapuslanon sa uban, ayaw pagduhaduha nga ipaambit kini sa GitHub. Siguruha nga idugang sila sa hilisgutan kubectl-plugins.

Mahimo ka usab nga mohangyo nga ang imong plugin idugang sa Kwerteng lista. Ang mga panudlo kung giunsa kini buhaton naa sa GitHub repository.

Pagkompleto sa sugo

Ang mga plugin wala karon nagsuporta sa autocompletion. Kana mao, kinahanglan nimong isulod ang tibuuk nga ngalan sa plugin ug ang tibuuk nga mga ngalan sa mga argumento.

Ang GitHub kubectl repository alang niini nga function adunay bukas nga hangyo. Mao nga posible nga kini nga bahin ipatuman sa umaabot.

Maayong swerte!!!

Unsa pa ang basahon sa hilisgutan:

  1. Tulo ka lebel sa autoscaling sa Kubernetes ug kung giunsa kini gamiton nga epektibo.
  2. Kubernetes sa diwa sa piracy nga adunay template alang sa pagpatuman.
  3. Ang among channel Around Kubernetes sa Telegram.

Source: www.habr.com

Idugang sa usa ka comment