Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Ikiwa unafanya kazi na Kubernetes, basi kubectl labda ni mojawapo ya huduma unazotumia zaidi. Na wakati wowote unapotumia muda mwingi kufanya kazi na chombo fulani, hulipa kujifunza vizuri na kujifunza jinsi ya kutumia kwa ufanisi.

Timu Kubernetes aaS kutoka Mail.ru Ilitafsiriwa nakala na Daniel Weibel ambamo utapata vidokezo na hila za kufanya kazi kwa ufanisi na kubectl. Pia itakusaidia kupata ufahamu wa kina wa Kubernetes.

Kwa mujibu wa mwandishi, lengo la makala ni kufanya kazi yako ya kila siku na Kubernetes sio tu ya ufanisi zaidi, lakini pia kufurahisha zaidi!

Utangulizi: kubectl ni nini

Kabla ya kujifunza kutumia kubectl kwa ufanisi zaidi, unahitaji kupata ufahamu wa kimsingi wa ni nini na jinsi inavyofanya kazi.

Kwa mtazamo wa mtumiaji, kubectl ni paneli dhibiti inayokuruhusu kutekeleza shughuli za Kubernetes.

Kitaalam, kubectl ni mteja wa Kubernetes API.

Kubernetes API ni HTTP REST API. API hii ndiyo kiolesura cha kweli cha mtumiaji wa Kubernetes, kupitia ambayo inadhibitiwa kabisa. Hii inamaanisha kuwa kila operesheni ya Kubernetes inafichuliwa kama sehemu ya mwisho ya API na inaweza kufanywa kwa ombi la HTTP kwa mwisho huo.

Kwa hivyo, kazi kuu ya kubectl ni kufanya maombi ya HTTP kwa Kubernetes API:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Kubernetes ni mfumo unaozingatia rasilimali kabisa. Hii ina maana kwamba inadumisha hali ya ndani ya rasilimali na shughuli zote za Kubernetes ni za CRUD.

Uko katika udhibiti kamili wa Kubernetes kwa kudhibiti rasilimali hizi, na Kubernetes hubaini la kufanya kulingana na hali ya sasa ya rasilimali. Kwa sababu hii, marejeleo ya Kubernetes API yamepangwa kama orodha ya aina za rasilimali na shughuli zao zinazohusiana.

Hebu tuangalie mfano.

Hebu tuseme unataka kuunda rasilimali ya ReplicaSet. Ili kufanya hivyo, unaelezea ReplicaSet katika faili kwa jina replicaset.yaml, kisha endesha amri:

$ kubectl create -f replicaset.yaml

Hii itaunda rasilimali ya ReplicaSet. Lakini nini kinatokea nyuma ya pazia?

Kubernetes ina operesheni ya kuunda ReplicaSet. Kama operesheni nyingine yoyote, inafichuliwa kama sehemu ya mwisho ya API. Mwisho maalum wa API kwa operesheni hii inaonekana kama hii:

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

Miisho ya API ya shughuli zote za Kubernetes inaweza kupatikana katika Rejeleo la API (ikiwa ni pamoja na mwisho hapo juu) Ili kutuma ombi halisi kwa sehemu ya mwisho, lazima kwanza uongeze URL ya seva ya API kwenye njia za mwisho ambazo zimeorodheshwa kwenye marejeleo ya API.

Kwa hivyo, unapotoa amri hapo juu, kubectl hutuma ombi la HTTP POST kwa mwisho wa API hapo juu. Ufafanuzi wa ReplicaSet uliotoa kwenye faili replicaset.yaml, hutumwa katika mwili wa ombi.

Hivi ndivyo kubectl inavyofanya kazi kwa amri zote zinazoingiliana na nguzo ya Kubernetes. Katika visa hivi vyote, kubectl hufanya maombi ya HTTP kwa miisho mwafaka ya Kubernetes API.

Tafadhali kumbuka kuwa unaweza kudhibiti Kubernetes kikamilifu kwa kutumia matumizi kama vile curlkwa kutuma maombi ya HTTP kwa API ya Kubernetes. Kubectl hurahisisha kutumia API ya Kubernetes.

Hii ndio misingi ya kubectl ni nini na jinsi inavyofanya kazi. Lakini kuna kitu kingine kuhusu Kubernetes API ambacho kila mtumiaji wa kubectl anapaswa kujua. Wacha tuangalie kwa haraka ulimwengu wa ndani wa Kubernetes.

Ulimwengu wa ndani wa Kubernetes

Kubernetes ina seti ya vijenzi huru ambavyo hutumika kama michakato tofauti kwenye nodi za nguzo. Vipengele vingine vinaendesha kwenye nodes za bwana, wengine kwenye nodes za wafanyakazi, kila sehemu hufanya kazi yake maalum.

Hapa kuna vipengele muhimu zaidi kwenye nodi kuu:

  1. hifadhi - huhifadhi ufafanuzi wa rasilimali (kawaida ni etcd).
  2. Seva ya API - hutoa API na inasimamia uhifadhi.
  3. Meneja wa Kidhibiti - Inahakikisha kwamba hali ya rasilimali inatii vipimo.
  4. Mratibu - hupanga maganda kwenye nodi za wafanyikazi.

Na hapa kuna sehemu moja muhimu zaidi kwenye nodi za wafanyikazi:

  1. kubelet - inasimamia uzinduzi wa vyombo kwenye node ya kufanya kazi.

Ili kuelewa jinsi vipengele hivi vinavyofanya kazi pamoja, hebu tuangalie mfano.

Wacha tuchukue kuwa umemaliza kubectl create -f replicaset.yaml, baada ya hapo kubectl alituma ombi la HTTP POST kwa Mwisho wa API ya ReplicaSet (kupitisha ufafanuzi wa rasilimali ya ReplicaSet).

Ni nini kinaendelea kwenye nguzo?

  1. Baada ya kufanya kubectl create -f replicaset.yaml Seva ya API huhifadhi ufafanuzi wako wa rasilimali ya ReplicaSet kwenye hifadhi:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

  2. Kisha, kidhibiti cha ReplicaSet kinazinduliwa katika kidhibiti cha kidhibiti, ambacho kinashughulikia uundaji, urekebishaji na ufutaji wa rasilimali za ReplicaSet:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

  3. Kidhibiti cha ReplicaSet huunda ufafanuzi wa ganda kwa kila nakala ya ReplicaSet (kulingana na kiolezo cha pod katika ufafanuzi wa ReplicaSet) na kuzihifadhi kwenye hifadhi:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

  4. Kipanga ratiba kimezinduliwa, kufuatilia maganda ambayo bado hayajagawiwa kwa nodi zozote za wafanyikazi:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

  5. Kipanga ratiba huchagua nodi inayofaa ya mfanyakazi kwa kila ganda na kuongeza habari hii kwa ufafanuzi wa ganda kwenye duka:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

  6. Kwenye nodi ya mfanyakazi ambayo ganda limepewa, Kubelet inazinduliwa, inafuatilia maganda yaliyopewa nodi hii:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

  7. Kubelet husoma ufafanuzi wa ganda kutoka kwa uhifadhi na kuamuru wakati wa kukimbia kwa kontena, kama vile Docker, kuzindua vyombo kwenye nodi:

    Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina

Ifuatayo ni toleo la maandishi la maelezo haya.

Ombi la API kwa sehemu ya mwisho ya kuunda ReplicaSet linachakatwa na seva ya API. Seva ya API huthibitisha ombi na kuhifadhi ufafanuzi wa rasilimali ya ReplicaSet kwenye hifadhi.

Tukio hili huanzisha kidhibiti cha ReplicaSet, ambacho ni mchakato mdogo wa kidhibiti cha kidhibiti. Kidhibiti cha ReplicaSet hufuatilia uundaji, kusasisha na ufutaji wa rasilimali za ReplicaSet kwenye duka na hupokea arifa ya tukio hili linapotokea.

Kazi ya kidhibiti cha ReplicaSet ni kuhakikisha kuwa kuna idadi inayohitajika ya maganda ya ReplicaSet. Katika mfano wetu, bado hakuna maganda, kwa hivyo kidhibiti cha ReplicaSet huunda ufafanuzi huu wa ganda (kulingana na kiolezo cha pod katika ufafanuzi wa ReplicaSet) na kuzihifadhi kwenye hifadhi.

Uundaji wa maganda mapya huchochewa na kipanga ratiba ambacho hufuatilia ufafanuzi wa ganda ambao bado haujaratibiwa kwa nodi za wafanyikazi. Kipanga ratiba huchagua nodi ya mfanyakazi inayofaa kwa kila ganda na kusasisha ufafanuzi wa ganda kwenye hazina.

Kumbuka kuwa hadi wakati huu, hakuna msimbo wa mzigo wa kazi uliokuwa ukiendelea popote kwenye nguzo. Kila kitu ambacho kimefanywa hadi sasa - huu ni uundaji na usasishaji wa rasilimali kwenye hazina kwenye nodi kuu.

Tukio la mwisho linaanzisha Kubelets, ambayo hufuatilia maganda yaliyopangwa kwa nodi zao za wafanyikazi. Kubelet ya nodi ya mfanyakazi ambamo maganda yako ya ReplicaSet yamesakinishwa lazima iagize muda wa kukimbia wa kontena, kama vile Docker, kupakua picha za kontena zinazohitajika na kuziendesha.

Kwa wakati huu, programu yako ya ReplicaSet hatimaye inaendeshwa!

Jukumu la Kubernetes API

Kama ulivyoona katika mfano uliopita, vipengele vya Kubernetes (isipokuwa seva ya API na hifadhi) hutazama mabadiliko ya rasilimali katika hifadhi na kubadilisha taarifa kuhusu rasilimali katika hifadhi.

Bila shaka, vipengele hivi haviingiliani na hifadhi moja kwa moja, lakini tu kupitia Kubernetes API.

Fikiria mifano ifuatayo:

  1. Kidhibiti cha ReplicaSet hutumia sehemu ya mwisho ya API orodha ReplicaSets na parameter watch kufuatilia mabadiliko kwenye rasilimali za ReplicaSet.
  2. Kidhibiti cha ReplicaSet hutumia sehemu ya mwisho ya API tengeneza Pod (tengeneza ganda) kuunda maganda.
  3. Kiratibu hutumia sehemu ya mwisho ya API ganda la kiraka (hariri ganda) kusasisha maganda na maelezo kuhusu nodi ya mfanyakazi iliyochaguliwa.

Kama unavyoona, hii ndio API ambayo kubectl hupata. Kutumia API sawa kwa vipengele vya ndani na watumiaji wa nje ni dhana ya msingi katika muundo wa Kubernetes.

Sasa tunaweza kufanya muhtasari wa jinsi Kubernetes inavyofanya kazi:

  1. Hifadhi za hali, yaani, rasilimali za Kubernetes.
  2. Seva ya API hutoa kiolesura cha hifadhi katika mfumo wa Kubernetes API.
  3. Vipengee vingine vyote vya Kubernetes na watumiaji husoma, kuchunguza, na kuendesha Kubernetes hali (rasilimali) kupitia API.

Kujua dhana hizi kutakusaidia kuelewa kubectl vyema na kufaidika nayo.

Sasa hebu tuangalie vidokezo na mbinu mahususi ambazo zitasaidia kuboresha tija yako na kubectl.

1. Ongeza kasi ya kuingiza kwa kutumia ukamilishaji wa amri

Mojawapo ya mbinu muhimu zaidi, lakini mara nyingi hupuuzwa, za kuboresha utendakazi na kubectl ni ukamilishaji wa amri.

Ukamilishaji wa amri huruhusu sehemu za amri za kubectl kukamilishwa kiotomatiki kwa kutumia kitufe cha Tab. Hii inafanya kazi kwa amri ndogo, chaguo, na hoja, ikijumuisha kitu tata kama majina ya rasilimali.

Tazama jinsi kukamilika kwa amri ya kubectl inavyofanya kazi:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Ukamilishaji wa amri hufanya kazi kwa makombora ya Bash na Zsh.

Mwongozo Rasmi ina maagizo ya kina ya kusanidi ukamilishaji kiotomatiki, lakini hapa chini tutatoa dondoo fupi.

Jinsi ukamilishaji wa amri unavyofanya kazi

Kukamilisha amri ni kipengele cha ganda ambacho hufanya kazi kwa kutumia hati ya kukamilisha. Hati ya kiendelezi ni hati ya ganda inayofafanua tabia ya kiendelezi kwa amri maalum.

Kubectl hutengeneza na kutoa hati za kiendelezi za Bash na Zsh kiotomatiki kwa kutumia amri zifuatazo:

$ kubectl completion bash

Au:

$ kubectl completion zsh

Kwa nadharia, inatosha kuunganisha matokeo ya amri hizi kwa ganda la amri linalofaa ili kubectl iweze kukamilisha amri.

Kwa mazoezi, njia ya uunganisho ni tofauti kwa Bash (pamoja na tofauti kati ya Linux na MacOS) na Zsh. Hapo chini tutaangalia chaguzi hizi zote.

Bash kwenye Linux

Hati ya kukamilisha Bash inategemea kifurushi cha kukamilisha bash, kwa hivyo unahitaji kukisakinisha kwanza:

$ sudo apt-get install bash-completion

Au:

$ yum install bash-completion

Unaweza kujaribu kuwa kifurushi kimewekwa kwa mafanikio kwa kutumia amri ifuatayo:

$ type _init_completion

Ikiwa nambari hii ya kazi ya ganda inatoa matokeo, basi ukamilishaji wa bash umewekwa kwa usahihi. Ikiwa amri inatoa hitilafu "Haijapatikana", unahitaji kuongeza mstari ufuatao kwenye faili yako ~ / .bashrc:

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

Je, ni muhimu kuongeza mstari huu kwenye faili ~ / .bashrc au la inategemea meneja wa kifurushi ulichotumia kusakinisha bash-completion. Hii ni muhimu kwa APT, lakini si kwa YUM.

Baada ya kusakinisha bash-completion, unahitaji kusanidi kila kitu ili hati ya kukamilisha kubectl iwezeshwe katika vipindi vyote vya shell.

Njia moja ya kufanya hivyo ni kuongeza mstari ufuatao kwenye faili ~ / .bashrc:

source <(kubectl completion bash)

Njia nyingine ni kuongeza hati ya ugani ya kubectl kwenye saraka /etc/bash_completion.d (itengeneze ikiwa haipo):

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

Hati zote za nyongeza kwenye katalogi /etc/bash_completion.d imejumuishwa kiotomatiki katika kukamilika kwa bash.

Chaguzi zote mbili zinatumika kwa usawa.

Baada ya kuanzisha tena ganda, kukamilika kwa amri ya kubectl kutafanya kazi.

Bash kwenye MacOS

Kwenye MacOS usanidi ni ngumu zaidi. Ukweli ni kwamba kwa chaguo-msingi, MacOS hutumia toleo la Bash 3.2, na hati ya ukamilishaji wa kubectl inahitaji toleo la Bash la angalau 4.1 na haifanyi kazi katika Bash 3.2.

Kuna masuala ya leseni yanayohusiana na kutumia toleo la zamani la Bash kwenye MacOS. Toleo la 4 la Bash limeidhinishwa chini ya GPLv3, ambayo haitumiki na Apple.

Ili kusanidi ukamilishaji wa kubectl kwenye MacOS, unahitaji kusakinisha toleo la hivi majuzi zaidi la Bash. Unaweza pia kuweka Bash iliyosasishwa kama ganda lako chaguo-msingi, ambalo litakuokoa matatizo mengi katika siku zijazo. Sio ngumu, maelezo yanatolewa katika kifungu "Kusasisha Bash kwenye MacOS'.

Kabla ya kuendelea, hakikisha unatumia toleo la hivi karibuni la Bash (angalia matokeo bash --version).

Hati ya kukamilisha Bash inatofautiana na mradi bash-kukamilika, kwa hivyo unahitaji kusakinisha kwanza.

Unaweza kusakinisha bash-completion kwa kutumia homebrew:

$ brew install bash-completion@2

Hapa @2 inasimama kwa bash-completion toleo la 2. kubectl autocompletion inahitaji bash-completion v2, na bash-completion v2 inahitaji kiwango cha chini cha toleo la 4.1 la Bash.

Pato la amri brew-install ina sehemu ya Mapango, ambayo inabainisha kile kinachohitaji kuongezwa kwenye 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"

Walakini, napendekeza kuongeza mistari hii sio ~/.bash_profile, na ndani ~/.bashrc. Katika kesi hii, ukamilishaji wa otomatiki hautapatikana tu katika kuu, lakini pia katika makombora ya amri ya watoto.

Baada ya kuanza tena ganda la amri, unaweza kuthibitisha usakinishaji ni sahihi kwa kutumia amri ifuatayo:

$ type _init_completion

Ikiwa utaona kazi ya shell katika pato, basi kila kitu kimeundwa kwa usahihi.

Sasa tunahitaji kuhakikisha kuwa ukamilishaji kiotomatiki wa kubectl umewashwa katika vipindi vyote.

Njia moja ni kuongeza laini ifuatayo kwa yako ~/.bashrc:

source <(kubectl completion bash)

Njia ya pili ni kuongeza hati kamili kwenye folda /usr/local/etc/bash_completion.d:

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

Njia hii itafanya kazi tu ikiwa umesakinisha bash-completion kwa kutumia Homebrew. Katika kesi hii, bash-completion hupakia hati zote kutoka kwa saraka hii.

Ikiwa umesakinisha kubectl kwa kutumia Homebrew, basi hakuna haja ya kufanya hatua ya awali, kwani hati ya kukamilisha kiotomatiki itawekwa kiotomatiki kwenye folda. /usr/local/etc/bash_completion.d wakati wa ufungaji. Katika hali hii, ukamilishaji otomatiki wa kubectl utaanza kufanya kazi mara tu utakaposakinisha bash-completion.

Matokeo yake, chaguzi hizi zote ni sawa.

Zsh

Hati za kukamilisha kiotomatiki za Zsh hazihitaji utegemezi wowote. Unachohitaji kufanya ni kuwawezesha unapopakia ganda la amri.

Unaweza kufanya hivyo kwa kuongeza mstari kwenye yako ~/.zshrc faili:

source <(kubectl completion zsh)

Ukipokea kosa not found: compdef baada ya kuanza tena ganda lako, unahitaji kuwezesha kazi ya ujenzi compdef. Unaweza kuiwezesha kwa kuiongeza mwanzoni mwa faili yako ~/.zshrc zifuatazo:

autoload -Uz compinit
compinit

2. Angalia kwa haraka vipimo vya rasilimali

Unapounda ufafanuzi wa rasilimali ya YAML, unahitaji kujua uga na maana yake kwa rasilimali hizo. Sehemu moja ya kutafuta taarifa hii ni katika rejeleo la API, ambalo lina maelezo kamili ya rasilimali zote.

Walakini, kubadili kivinjari cha wavuti kila wakati unahitaji kutafuta kitu sio rahisi. Kwa hivyo kubectl hutoa amri kubectl explain, ambayo inaonyesha maelezo ya rasilimali zote moja kwa moja kwenye terminal yako.

Muundo wa amri ni kama ifuatavyo:

$ kubectl explain resource[.field]...

Amri itatoa maelezo ya rasilimali iliyoombwa au uwanja. Taarifa inayoonyeshwa ni sawa na ile iliyo katika mwongozo wa API.

By default kubectl explain inaonyesha tu ngazi ya kwanza ya nesting ya mashamba.

Tazama jinsi inavyoonekana Unaweza kisha.

Unaweza kuonyesha mti mzima ikiwa unaongeza chaguo --recursive:

$ kubectl explain deployment.spec --recursive

Ikiwa haujui ni rasilimali zipi zinahitajika, unaweza kuzionyesha zote kwa amri ifuatayo:

$ kubectl api-resources

Amri hii inaonyesha majina ya rasilimali katika umbo la wingi, k.m. deployments badala ya deployment. Pia huonyesha jina fupi, kwa mfano deploy, kwa rasilimali ambazo zina. Usijali kuhusu tofauti hizi. Chaguo hizi zote za kutaja ni sawa kwa kubectl. Hiyo ni, unaweza kutumia yoyote yao kwa kubectl explain.

Amri zote zifuatazo ni sawa:

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

3. Tumia umbizo la towe la safu wima maalum

Umbizo la towe la amri chaguo-msingi 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

Umbizo hili ni rahisi, lakini lina kiasi kidogo cha habari. Ikilinganishwa na umbizo kamili la ufafanuzi wa rasilimali, ni sehemu chache tu ndizo zinazoonyeshwa hapa.

Katika kesi hii, unaweza kutumia umbizo la towe la safu wima maalum. Inakuruhusu kuamua ni data gani ya kutoa. Unaweza kuonyesha sehemu yoyote ya rasilimali kama safu tofauti.

Matumizi ya umbizo maalum imedhamiriwa kwa kutumia chaguzi:

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

Unaweza kufafanua kila safu ya pato kama jozi <header>:<jsonpath>Ambapo <header> ni jina la safu, na <jsonpath> - usemi unaofafanua uga wa rasilimali.

Hebu tuangalie mfano rahisi:

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

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

Pato lina safu wima moja iliyo na majina ya maganda.

Usemi wa chaguo huchagua majina ya ganda kutoka kwa uwanja metadata.name. Hii ni kwa sababu jina la ganda limefafanuliwa katika uwanja wa jina la mtoto metadata katika maelezo ya rasilimali ya ganda. Maelezo zaidi yanaweza kupatikana katika Mwongozo wa API au chapa amri kubectl explain pod.metadata.name.

Sasa tuseme unataka kuongeza safu wima ya ziada kwenye pato, kwa mfano kuonyesha nodi ambayo kila ganda linaendelea. Ili kufanya hivyo, unaweza tu kuongeza vipimo sahihi vya safu kwenye chaguo la safu maalum:

$ 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

Usemi huchagua jina la nodi kutoka spec.nodeName - wakati pod inapewa node, jina lake limeandikwa kwenye shamba spec.nodeName uainishaji wa rasilimali. Maelezo ya kina zaidi yanaweza kupatikana katika pato kubectl explain pod.spec.nodeName.

Tafadhali kumbuka kuwa sehemu za rasilimali za Kubernetes ni nyeti sana.

Unaweza kutazama sehemu yoyote ya rasilimali kama safu wima. Kagua tu vipimo vya rasilimali na ujaribu na sehemu zozote unazopenda.

Lakini kwanza, hebu tuangalie kwa karibu misemo ya uteuzi wa uwanja.

Maneno ya JSONPath

Maneno ya kuchagua sehemu za rasilimali yanategemea JSONPath.

JSONPath ni lugha ya kurejesha data kutoka kwa hati za JSON. Kuchagua sehemu moja ndio njia rahisi ya utumiaji ya JSONPath. Ana mengi uwezekano zaidi, ikiwa ni pamoja na wateuzi, vichungi na kadhalika.

Kubectl explain inasaidia idadi ndogo ya vipengele vya JSONPath. Uwezekano na mifano ya matumizi yao ni ilivyoelezwa hapa chini:

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

Opereta [] ni muhimu haswa. Sehemu nyingi za rasilimali za Kubernetes ni orodha, na mwendeshaji huyu hukuruhusu kuchagua washiriki wa orodha hizo. Mara nyingi hutumiwa na kadi-mwitu kama [*] kuchagua vipengele vyote vya orodha.

Mifano ya maombi

Uwezekano wa kutumia umbizo la towe la safu wima maalum hauna mwisho, kwani unaweza kuonyesha sehemu yoyote au mchanganyiko wa sehemu za rasilimali katika towe. Hapa kuna baadhi ya programu za sampuli, lakini jisikie huru kuzichunguza mwenyewe na kupata programu zinazokufaa.

  1. Inaonyesha picha za kontena za maganda:
    $ 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

    Amri hii inaonyesha majina ya picha ya chombo kwa kila ganda.

    Kumbuka kwamba ganda linaweza kuwa na vyombo kadhaa, kisha majina ya picha yataonyeshwa kwenye mstari mmoja, ikitenganishwa na koma.

  2. Inaonyesha maeneo ya upatikanaji wa nodi:
    $ 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

    Amri hii ni muhimu ikiwa nguzo yako imepangishwa katika wingu la umma. Inaonyesha eneo la upatikanaji kwa kila nodi.

    Eneo la upatikanaji ni dhana ya wingu ambayo inaweka mipaka ya eneo la urudufishaji kwa eneo la kijiografia.

    Maeneo ya kupatikana kwa kila nodi hupatikana kupitia lebo maalum - failure-domain.beta.kubernetes.io/zone. Ikiwa nguzo inaendeshwa katika wingu la umma, lebo hii huundwa kiotomatiki na kujazwa na majina ya maeneo ya upatikanaji kwa kila nodi.

    Lebo si sehemu ya maelezo ya rasilimali ya Kubernetes, kwa hivyo hutapata taarifa kuzihusu Mwongozo wa API. Walakini, zinaweza kuonekana (kama lebo zingine zozote) ukiomba maelezo kuhusu nodi katika umbizo la YAML au JSON:

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

    Hii ni njia nzuri ya kujifunza zaidi kuhusu rasilimali, pamoja na vipimo vya nyenzo za kujifunza.

4. Badilisha kwa urahisi kati ya makundi na nafasi za majina

Wakati kubectl inatuma ombi kwa API ya Kubernetes, kwanza husoma faili ya kubeconfig ili kupata vigezo vyote muhimu vya muunganisho.

Kwa chaguo-msingi faili ya kubeconfig ni ~/.kube/config. Kwa kawaida faili hii huundwa au kusasishwa na amri maalum.

Unapofanya kazi na makundi mengi, faili yako ya kubeconfig ina mipangilio ya kuunganisha kwenye makundi hayo yote. Unahitaji njia ya kuwaambia amri ya kubectl ambayo unafanya kazi nayo.

Ndani ya kundi, unaweza kuunda nafasi nyingi za majinaβ€”aina ya nguzo pepe ndani ya kundi halisi. Kubectl pia huamua ni nafasi ya majina ya kutumia kulingana na faili ya kubeconfig. Hii inamaanisha kuwa unahitaji pia njia ya kuwaambia amri ya kubectl ni nafasi gani ya jina ya kufanya kazi nayo.

Katika sura hii tutaelezea jinsi inavyofanya kazi na jinsi ya kuifanya ifanye kazi kwa ufanisi.

Kumbuka kuwa unaweza kuwa na faili nyingi za kubeconfig zilizoorodheshwa katika utofauti wa mazingira wa KUBECONFIG. Katika kesi hii, faili hizi zote zitaunganishwa katika usanidi mmoja wa kawaida wakati wa kukimbia. Unaweza pia kubadilisha faili chaguo-msingi ya kubeconfig kwa kuendesha kubectl na kigezo --kubeconfig. Tazama nyaraka rasmi.

kubeconfig faili

Wacha tuone ni nini haswa faili ya kubeconfig inayo:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Kama unaweza kuona, faili ya kubeconfig ina seti ya muktadha. Muktadha unajumuisha vipengele vitatu:

  • Nguzo - API URL ya seva ya nguzo.
  • Kitambulisho cha uthibitishaji wa mtumiaji - kwenye nguzo.
  • Nafasi ya majina - nafasi ya majina inayotumiwa wakati wa kuunganisha kikundi.

Kwa mazoezi, mara nyingi hutumia muktadha mmoja kwa kila nguzo kwenye kubeconfig yao. Hata hivyo, unaweza kuwa na miktadha mingi kwa kila kundi, ikitofautishwa na mtumiaji au nafasi ya majina. Hata hivyo, usanidi huu wa muktadha mbalimbali si wa kawaida, kwa hivyo kwa kawaida kuna ramani ya moja hadi moja kati ya makundi na miktadha.

Wakati wowote, moja ya muktadha ni ya sasa:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Wakati kubectl inasoma faili ya usanidi, daima inachukua taarifa kutoka kwa muktadha wa sasa. Katika mfano hapo juu, kubectl itaunganishwa na nguzo ya Hare.

Ipasavyo, kubadili kwa nguzo nyingine, unahitaji kubadilisha muktadha wa sasa katika faili ya kubeconfig:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Sasa kubectl itaunganishwa kwenye nguzo ya Fox.

Ili kubadilisha hadi nafasi tofauti ya majina katika nguzo moja, unahitaji kubadilisha thamani ya kipengele cha nafasi ya majina kwa muktadha wa sasa:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Katika mfano ulio hapo juu, kubectl itatumia nafasi ya majina ya Fox cluster's Prod (hapo awali nafasi ya majina ya Jaribio iliwekwa).

Kumbuka kuwa kubectl pia hutoa chaguzi --cluster, --user, --namespace ΠΈ --context, ambayo hukuruhusu kubatilisha vipengee vya kibinafsi na muktadha wa sasa yenyewe, bila kujali ni nini kimewekwa kwenye kubeconfig. Tazama kubectl options.

Kwa nadharia, unaweza kubadilisha mwenyewe mipangilio katika kubeconfig. Lakini ni usumbufu. Ili kurahisisha shughuli hizi, kuna huduma mbalimbali zinazokuwezesha kubadilisha vigezo moja kwa moja.

Tumia kubectx

Huduma maarufu sana ya kubadili kati ya nguzo na nafasi za majina.

Huduma hutoa amri kubectx ΠΈ kubens kubadilisha muktadha wa sasa na nafasi ya majina mtawalia.

Kama ilivyotajwa, kubadilisha muktadha wa sasa kunamaanisha kubadilisha nguzo ikiwa una muktadha mmoja tu kwa kila nguzo.

Hapa kuna mfano wa kutekeleza amri hizi:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Kimsingi, amri hizi huhariri faili ya kubeconfig kama ilivyoelezwa hapo juu.

kufunga kubectx, fuata maagizo Github.

Amri zote mbili zinaunga mkono ukamilishaji kiotomatiki wa muktadha na majina ya nafasi ya majina, ambayo huondoa hitaji la kuzichapa kabisa. Maagizo ya kusanidi kukamilisha kiotomatiki hapa.

Kipengele kingine muhimu kubectx ni hali ya mwingiliano. Inafanya kazi kwa kushirikiana na shirika fzf, ambayo lazima imewekwa tofauti. Kusakinisha fzf kiotomatiki hufanya hali ya mwingiliano ipatikane ndani kubectx. Kwa mwingiliano, unaweza kuchagua muktadha na nafasi ya majina kupitia kiolesura shirikishi cha utafutaji cha bure kinachotolewa na fzf.

Kutumia lakabu za ganda

Huhitaji zana tofauti kubadilisha muktadha wa sasa na nafasi ya majina kwa sababu kubectl pia hutoa amri kwa hili. Ndio, timu kubectl config hutoa amri ndogo za kuhariri faili za kubeconfig.

Hapa ni baadhi yao:

  • kubectl config get-contexts: onyesha miktadha yote;
  • kubectl config current-context: pata muktadha wa sasa;
  • kubectl config use-context: badilisha muktadha wa sasa;
  • kubectl config set-context: Badilisha kipengele cha muktadha.

Walakini, kutumia amri hizi moja kwa moja sio rahisi sana kwa sababu ni ndefu. Unaweza kutengeneza lakabu za ganda kwao ambazo ni rahisi kutekeleza.

Niliunda seti ya lakabu kulingana na amri hizi ambazo hutoa utendaji sawa na kubectx. Hapa unaweza kuwaona wakifanya kazi:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Kumbuka kuwa lakabu hutumia fzf kutoa kiolesura shirikishi cha utafutaji bila malipo (kama hali ya mwingiliano ya kubectx). Hii ina maana unahitaji sakinisha fzfkutumia lakabu hizi.

Hapa kuna ufafanuzi wa lakabu zenyewe:

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

Ili kuweka lakabu hizi unahitaji kuongeza ufafanuzi hapo juu kwenye faili yako ~/.bashrc au ~/.zshrc na uwashe tena ganda lako.

Kutumia programu-jalizi

Kubectl hukuruhusu kupakia programu-jalizi ambazo zinatekelezwa kwa njia sawa na amri za kimsingi. Unaweza, kwa mfano, kusakinisha programu-jalizi ya kubectl-foo na kuiendesha kwa kutekeleza amri kubectl foo.

Itakuwa rahisi kubadilisha muktadha na nafasi ya majina kwa njia hii, kwa mfano kwa kukimbia kubectl ctx kubadilisha muktadha na kubectl ns kubadilisha nafasi ya majina.

Nimeandika programu-jalizi mbili ambazo hufanya hivi:

Kazi ya programu-jalizi inategemea lakabu kutoka kwa sehemu iliyopita.

Hivi ndivyo wanavyofanya kazi:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Kumbuka kuwa programu-jalizi hutumia fzf kutoa kiolesura shirikishi cha utafutaji kisicholipishwa (kama hali ya mwingiliano ya kubectx). Hii ina maana unahitaji sakinisha fzfkutumia lakabu hizi.

Ili kusakinisha programu-jalizi, unahitaji kupakua hati za ganda zilizopewa jina kubectl-ctx ΠΈ kubectl-ns kwa saraka yoyote katika utaftaji wako wa PATH na uifanye itekelezwe kwa mfano chmod +x. Mara baada ya hii utaweza kutumia kubectl ctx ΠΈ kubectl ns.

5. Punguza pembejeo na autoaliases

Lakabu za shell ni njia nzuri ya kuongeza kasi ya kuingiza data. Mradi kubectl-aliases ina takriban njia 800 za mkato za amri za msingi za kubectl.

Unaweza kujiuliza - unakumbukaje majina 800 ya uwongo? Lakini hauitaji kukumbuka zote, kwa sababu zimejengwa kulingana na mpango rahisi, ambao umepewa hapa chini:

Jinsi ya kutumia kubectl kwa ufanisi zaidi: mwongozo wa kina
Kwa mfano:

  1. kgpooyaml - kubectl pata maganda oyaml
  2. ksysgsvcw β€” kubectl -n kube-system pata svc w
  3. ksysrmcm -kubectl -n kube-mfumo rm cm
  4. kgdepallsl - kubectl pata kupelekwa sl zote

Kama unavyoona, lakabu zinaundwa na vijenzi, ambavyo kila kimoja kinawakilisha kipengele maalum cha amri ya kubectl. Kila lakabu inaweza kuwa na sehemu moja ya amri ya msingi, uendeshaji, na rasilimali, na vipengele vingi vya vigezo. "Unajaza" vifaa hivi kutoka kushoto kwenda kulia kulingana na mchoro hapo juu.

Mchoro wa kina wa sasa upo GitHub. Huko unaweza pia kupata orodha kamili ya majina ya bandia.

Kwa mfano, lakabu kgpooyamlall ni sawa na amri kubectl get pods -o yaml --all-namespaces.

Mpangilio wa jamaa wa chaguzi sio muhimu: amri kgpooyamlall ni sawa na amri kgpoalloyaml.

Sio lazima utumie vifaa vyote kama lakabu. Kwa mfano k, kg, klo, ksys, kgpo pia inaweza kutumika. Kwa kuongeza, unaweza kuchanganya lakabu na amri za kawaida au chaguzi kwenye safu ya amri:

Kwa mfano:

  1. Badala ya kubectl proxy unaweza kuandika k proxy.
  2. Badala ya kubectl get roles unaweza kuandika kg roles (kwa sasa hakuna lakabu ya rasilimali ya Majukumu).
  3. Ili kupata data kwa pod maalum, unaweza kutumia amri kgpo my-pod β€” kubectl get pod my-pod.

Tafadhali kumbuka kuwa majina mengine ya kigeni yanahitaji hoja ya mstari wa amri. Kwa mfano, alias kgpol ina maana kubectl get pods -l. Chaguo -l inahitaji hoja - maelezo ya lebo. Ukitumia pak itaonekana kama kgpol app=ui.

Kwa sababu lakabu zingine zinahitaji hoja, lakabu a, f, na l lazima zitumike mwisho.

Kwa ujumla, mara tu unapopata mpangilio wa mpango huu, unaweza kupata lakabu kutoka kwa amri unazotaka kutekeleza na kuokoa muda mwingi wa kuandika.

Ufungaji

Ili kusakinisha kubectl-aliases, unahitaji kupakua faili .kubectl_aliases kutoka kwa GitHub na ujumuishe kwenye faili ~/.bashrc au ~/.zshrc:

source ~/.kubectl_aliases

Kukamilisha kiotomatiki

Kama tulivyosema hapo awali, mara nyingi huongeza maneno ya ziada kwa lakabu kwenye safu ya amri. Kwa mfano:

$ kgpooyaml test-pod-d4b77b989

Ikiwa unatumia ukamilishaji wa amri ya kubectl, labda umetumia ukamilishaji kiotomatiki kwa vitu kama vile majina ya rasilimali. Lakini hii inaweza kufanywa wakati lakabu zinatumiwa?

Hili ni swali muhimu sana kwa sababu ikiwa ukamilishaji kiotomatiki haufanyi kazi, utapoteza baadhi ya faida za lakabu.

Jibu linategemea ni ganda gani unatumia:

  1. Kwa Zsh, kukamilika kwa lakabu hufanya kazi nje ya kisanduku.
  2. Kwa Bash, kwa bahati mbaya, kazi fulani inahitajika ili kukamilisha kazi kiotomatiki.

Kuwezesha kukamilisha kiotomatiki kwa lakabu katika Bash

Shida na Bash ni kwamba inajaribu kukamilisha (kila wakati unapobonyeza Tab) lakabu, sio amri ambayo jina lak hurejelea (kama Zsh inavyofanya, kwa mfano). Kwa kuwa huna hati za kukamilika kwa lakabu zote 800, ukamilishaji kiotomatiki haufanyi kazi.

Mradi kamili-lakabu hutoa suluhisho la jumla kwa shida hii. Inaunganisha kwa utaratibu wa kukamilisha kwa lakabu, inapanua lakabu kwa amri, na inarudisha chaguzi za kukamilisha kwa amri iliyokamilishwa. Hii inamaanisha kuwa uwekaji wa lak hufanya sawa na kwa amri kamili.

Katika ifuatayo, kwanza nitaelezea jinsi ya kusakinisha lakabu kamili na kisha jinsi ya kuisanidi ili kuwezesha kukamilika kwa lakabu zote za kubectl.

Inasakinisha lakabu kamili

Kwanza kabisa, paka kamili inategemea bash-kukamilika. Kwa hiyo, kabla ya kusakinisha kamili-alias, unahitaji kuhakikisha kuwa bash-completion imewekwa. Maagizo ya usakinishaji yametolewa hapo awali kwa Linux na MacOS.

Kumbuka Muhimu kwa Watumiaji wa MacOS: Kama hati ya kukamilisha kiotomatiki ya kubectl, lakabu kamili haifanyi kazi na Bash 3.2, ambayo ni chaguo-msingi kwenye MacOS. Hasa, lakabu kamili inategemea bash-completion v2 (brew install bash-completion@2), ambayo inahitaji angalau Bash 4.1. Hii inamaanisha kuwa kutumia lakabu kamili kwenye MacOS unahitaji kusakinisha toleo jipya la Bash.

Unahitaji kupakua hati bash_completion.sh ya GitHub hazina na ujumuishe kwenye faili yako ~/.bashrc:

source ~/bash_completion.sh

Baada ya kuwasha tena ganda, lakabu kamili itasakinishwa kikamilifu.

Inawezesha ukamilishaji kiotomatiki kwa lakabu za kubectl

Kitaalam lakabu kamili hutoa kazi ya kukunja _complete_alias. Chaguo hili la kukokotoa hukagua lakabu na kurudisha vidokezo vya kukamilisha kwa amri ya paka.

Ili kuhusisha kazi na lakabu maalum, unahitaji kutumia utaratibu wa Bash uliojengwa kukamilisha, kusakinisha _complete_alias kama kipengele cha kukamilisha lak.

Kama mfano, hebu tuchukue lak k, ambayo inasimamia amri ya kubectl. kusakinisha _complete_alias Kama kazi inayosaidia kwa jina hili, unapaswa kuendesha amri ifuatayo:

$ complete -F _complete_alias k

Matokeo ya hii ni kwamba wakati wowote unapokamilisha kiotomatiki jina lak, kazi inaitwa _complete_alias, ambayo hukagua lakabu na kurudisha vidokezo vya kukamilika kwa amri kubectl.

Kama mfano wa pili, wacha tuchukue lakabu kg, ambayo inaashiria kubectl get:

$ complete -F _complete_alias kg

Kama tu katika mfano uliopita, unapokamilisha kilo kiotomatiki, unapata vidokezo sawa vya kukamilisha ambavyo ungepata. kubectl get.

Kumbuka kuwa unaweza kutumia lakabu kamili kwa lakabu yoyote kwenye mfumo wako.

Kwa hivyo, ili kuwezesha ukamilishaji otomatiki kwa lakabu zote za kubectl, unahitaji kutekeleza amri iliyo hapo juu kwa kila moja yao. Kijisehemu kifuatacho hufanya hivi haswa, mradi tu umeweka lakabu za kubectl ~/.kubectl-aliases:

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

Sehemu hii ya msimbo inahitaji kuwekwa ndani yako ~/.bashrc, anzisha tena ganda la amri na ukamilishaji kiotomatiki utapatikana kwa lakabu zote 800 za kubectl.

6. Kupanua kubectl na programu-jalizi

Tangu toleo la 1.12, kubectl inasaidia utaratibu wa programu-jalizi, ambayo inakuwezesha kupanua kazi zake na amri za ziada.

Ikiwa unamfahamu Njia za programu-jalizi za Git, kisha programu-jalizi za kubectl zimejengwa kwa kanuni sawa.

Katika sura hii, tutashughulikia jinsi ya kusakinisha programu-jalizi, mahali pa kuzipata, na jinsi ya kuunda programu-jalizi zako mwenyewe.

Inasakinisha programu-jalizi

Programu-jalizi za Kubectl zinasambazwa kama faili rahisi zinazoweza kutekelezwa zilizo na jina kama kubectl-x. Kiambishi awali kubectl- inahitajika, ikifuatiwa na amri ndogo mpya ya kubectl inayokuruhusu kupiga programu-jalizi.

Kwa mfano, programu-jalizi ya hujambo itasambazwa kama faili inayoitwa kubectl-hello.

Ili kusakinisha programu-jalizi, unahitaji kunakili faili kubectl-x kwa saraka yoyote kwenye PATH yako na uifanye itekelezwe, kwa mfano na chmod +x. Mara baada ya hii unaweza kupiga Plugin na kubectl x.

Unaweza kutumia amri ifuatayo kuorodhesha programu-jalizi zote ambazo zimesakinishwa kwa sasa kwenye mfumo wako:

$ kubectl plugin list

Amri hii pia itaonyesha maonyo ikiwa una programu-jalizi nyingi zilizo na jina moja, au ikiwa kuna faili ya programu-jalizi ambayo haiwezi kutekelezwa.

Kutafuta na kusakinisha programu-jalizi kwa kutumia Krew

Programu-jalizi za Kubectl zinaweza kushirikiwa au kutumika tena kama vifurushi vya programu. Lakini unaweza kupata wapi programu-jalizi ambazo wengine wameshiriki?

Mradi Krew inalenga kutoa suluhisho la umoja la kushiriki, kutafuta, kusakinisha na kudhibiti programu jalizi za kubectl. Mradi unajiita "meneja wa kifurushi cha programu-jalizi za kubectl" (Krew ni sawa na Brew).

Krew ni orodha ya programu jalizi za kubectl ambazo unaweza kuchagua na kusakinisha. Wakati huo huo, Krew pia ni programu-jalizi ya kubectl.

Hii inamaanisha kuwa kusakinisha Krew hufanya kazi kimsingi kama kusakinisha programu-jalizi nyingine yoyote ya kubectl. Unaweza kupata maagizo ya kina Ukurasa wa GitHub.

Amri muhimu zaidi za Krew ni:

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

Tafadhali kumbuka kuwa kusakinisha programu-jalizi kwa kutumia Krew hakuingiliani na usakinishaji wa programu-jalizi kwa kutumia njia ya kawaida iliyoelezwa hapo juu.

Tafadhali kumbuka kuwa amri kubectl krew list inaonyesha tu programu-jalizi ambazo zilisakinishwa kwa kutumia Krew, wakati amri kubectl plugin list huorodhesha programu-jalizi zote, ambayo ni, zile zilizowekwa kwa kutumia Krew na zile zilizowekwa na njia zingine.

Kupata Plugins Mahali pengine

Krew ni mradi mchanga, ambao kwa sasa uko ndani yake orodha tu kuhusu 30 Plugins. Ikiwa huwezi kupata unachohitaji, unaweza kupata programu-jalizi mahali pengine, kama vile GitHub.

Ninapendekeza kutazama sehemu ya GitHub kubectl-plugins. Huko utapata kadhaa ya programu-jalizi zinazopatikana ambazo zinafaa kuangalia.

Kuandika programu-jalizi zako mwenyewe

unaweza mwenyewe unda programu-jalizi - Sio ngumu. Unahitaji kuunda inayoweza kutekelezwa ambayo hufanya kile unachohitaji, iite kama kubectl-x na usakinishe kama ilivyoelezwa hapo juu.

Faili inaweza kuwa hati ya bash, hati ya python, au programu iliyojumuishwa ya GO - haijalishi. Hali pekee ni kwamba inaweza kutekelezwa moja kwa moja katika mfumo wa uendeshaji.

Wacha tuunde programu-jalizi ya mfano sasa hivi. Katika sehemu iliyotangulia, ulitumia amri ya kubectl kuorodhesha vyombo kwa kila ganda. Ni rahisi kugeuza amri hii kuwa programu-jalizi ambayo unaweza kupiga nayo k.m. kubectl img.

Unda faili kubectl-img maudhui yafuatayo:

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

Sasa fanya faili itekelezwe na chmod +x kubectl-img na uhamishe kwa saraka yoyote kwenye PATH yako. Mara baada ya hii unaweza kutumia programu-jalizi kubectl img.

Kama ilivyotajwa, programu-jalizi za kubectl zinaweza kuandikwa katika programu au lugha ya uandishi. Ikiwa unatumia hati za ganda, faida ya kuweza kupiga simu kubectl kwa urahisi kutoka ndani ya programu-jalizi. Walakini, unaweza kuandika programu-jalizi ngumu zaidi katika lugha halisi za programu ukitumia Maktaba ya mteja wa Kubernetes. Ikiwa unatumia Go, unaweza pia kutumia maktaba ya cli-runtime, ambayo inapatikana mahsusi kwa ajili ya kuandika programu jalizi za kubectl.

Jinsi ya kushiriki programu-jalizi zako

Ikiwa unafikiri programu-jalizi zako zinaweza kuwa muhimu kwa wengine, jisikie huru kuzishiriki kwenye GitHub. Hakikisha kuwaongeza kwenye mada kubectl-plugins.

Unaweza pia kuomba programu-jalizi yako iongezwe kwa Orodha ya Krew. Maagizo ya jinsi ya kufanya hivyo yamo ndani Hifadhi za GitHub.

Kukamilika kwa amri

Programu-jalizi kwa sasa haziauni ukamilishaji otomatiki. Hiyo ni, lazima uweke jina kamili la programu-jalizi na majina kamili ya hoja.

Hazina ya GitHub kubectl ya chaguo hili la kukokotoa ina ombi wazi. Kwa hivyo kuna uwezekano kwamba kipengele hiki kitatekelezwa wakati fulani katika siku zijazo.

Bahati njema!!!

Nini kingine cha kusoma kwenye mada:

  1. Viwango vitatu vya kuongeza kasi kiotomatiki katika Kubernetes na jinsi ya kuzitumia kwa ufanisi.
  2. Kubernetes katika ari ya uharamia na kiolezo cha utekelezaji.
  3. Kituo chetu Karibu Kubernetes katika Telegram.

Chanzo: mapenzi.com

Kuongeza maoni