Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Агар шумо бо Kubernetes кор кунед, пас kubectl эҳтимол яке аз хидматҳои бештар истифодашаванда аст. Ва ҳар вақте, ки шумо вақти зиёдро бо ягон асбоби муайян кор мекунед, барои хуб омӯхтани он ва истифодаи самараноки он фоида меорад.

гурӯҳ Kubernetes aaS аз Mail.ru мақолаи Даниел Вайбелро тарҷума кардааст, ки дар он шумо маслиҳатҳо ва ҳилаҳоро барои самаранок кор кардан бо kubectl хоҳед ёфт. Он инчунин ба шумо дар фаҳмидани амиқи Кубернетес кӯмак мекунад.

Ба гуфтаи муаллиф, ҳадафи мақола ин аст, ки кори ҳаррӯзаи шумо бо Kubernetes на танҳо самараноктар, балки ҷолибтар бошад!

Муқаддима: kubectl чист

Пеш аз он ки шумо истифодаи kubectl-ро самараноктар омӯзед, шумо бояд фаҳмиши асосӣ дар бораи он ки он чист ва чӣ гуна кор мекунад, ба даст оред.

Аз нуқтаи назари корбар, kubectl як панели идоракунӣ мебошад, ки ба шумо имкон медиҳад амалиёти Kubernetes иҷро кунед.

Аз ҷиҳати техникӣ, kubectl муштарии Kubernetes API мебошад.

Kubernetes API як HTTP REST API мебошад. Ин API интерфейси воқеии корбари Kubernetes мебошад, ки тавассути он комилан идора карда мешавад. Ин маънои онро дорад, ки ҳар як амалиёти Kubernetes ҳамчун нуқтаи ниҳоии API фош карда мешавад ва метавонад бо дархости HTTP ба ин нуқтаи ниҳоӣ анҷом дода шавад.

Аз ин рӯ, кори асосии kubectl ин аст, ки дархостҳои HTTP ба API Kubernetes:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Kubernetes як системаи комилан ба захираҳо нигаронидашуда мебошад. Ин маънои онро дорад, ки он ҳолати дохилии захираҳоро нигоҳ медорад ва ҳама амалиёти Kubernetes амалиёти CRUD мебошанд.

Шумо тавассути идоракунии ин захираҳо Кубернетесро пурра назорат мекунед ва Кубернетес дар асоси ҳолати кунунии захираҳо чӣ кор кардан лозим аст. Аз ин сабаб, истинод ба API Kubernetes ҳамчун рӯйхати намудҳои захираҳо бо амалиёти алоқаманди онҳо ташкил карда шудааст.

Биёед як мисолро дида бароем.

Фарз мекунем, ки шумо мехоҳед захираи ReplicaSet эҷод кунед. Барои ин, шумо ReplicaSet-ро дар файл бо ном тавсиф мекунед replicaset.yaml, пас фармонро иҷро кунед:

$ kubectl create -f replicaset.yaml

Ин як манбаи ReplicaSet эҷод мекунад. Аммо паси парда чӣ мешавад?

Kubernetes дорои амалиёти эҷоди ReplicaSet мебошад. Мисли ҳама гуна амалиёти дигар, он ҳамчун нуқтаи ниҳоии API фош карда мешавад. Нуқтаи ниҳоии махсуси API барои ин амалиёт чунин менамояд:

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

Нуқтаҳои ниҳоии API-ро барои ҳама амалиёти Kubernetes дар ин ҷо пайдо кардан мумкин аст истинод ба API (аз ҷумла нуқтаи охири боло). Барои дархости воқеӣ ба нуқтаи ниҳоӣ, шумо бояд аввал URL-и сервери API-ро ба роҳҳои ниҳоӣ, ки дар истинодҳои API номбар шудаанд, илова кунед.

Аз ин рӯ, вақте ки шумо фармони дар боло зикршударо иҷро мекунед, kubectl дархости HTTP POST-ро ба нуқтаи ниҳоии API-и боло мефиристад. Таърифи ReplicaSet, ки шумо дар файл пешниҳод кардаед replicaset.yaml, дар матни дархост фиристода мешавад.

Ин аст, ки kubectl барои ҳама фармонҳое кор мекунад, ки бо кластери Kubernetes мутақобила мекунанд. Дар ҳамаи ин ҳолатҳо, kubectl танҳо дархостҳои HTTP-ро ба нуқтаи ниҳоии мувофиқи Kubernetes API медиҳад.

Лутфан қайд кунед, ки шумо метавонед Kubernetes-ро бо истифода аз утилита ба монанди curlтавассути фиристодани дастӣ дархостҳои HTTP ба API Kubernetes. Kubectl истифодаи API-и Kubernetes-ро осонтар мекунад.

Ин асосҳои kubectl чист ва он чӣ гуна кор мекунад. Аммо дар бораи API Kubernetes чизи дигаре ҳаст, ки ҳар як корбари kubectl бояд донад. Биёед ба ҷаҳони ботинии Кубернетес зуд назар андозем.

Ҷаҳони ботинии Кубернетес

Kubernetes аз маҷмӯи ҷузъҳои мустақил иборат аст, ки ҳамчун равандҳои алоҳида дар гиреҳҳои кластер кор мекунанд. Баъзе ҷузъҳо дар гиреҳҳои асосӣ кор мекунанд, дигарон дар гиреҳҳои корӣ, ҳар як ҷузъ вазифаи мушаххаси худро иҷро мекунад.

Инҳоянд ҷузъҳои муҳимтарин дар гиреҳҳои асосӣ:

  1. Сарой - таърифҳои захираҳоро нигоҳ медорад (одатан он ва ғайра).
  2. сервери API — API таъмин мекунад ва захираро идора мекунад.
  3. Менеҷери назораткунанда - кафолат медиҳад, ки ҳолати захираҳо ба мушаххасот мувофиқат мекунанд.
  4. Барномасоз — ҷадвалбандии pods дар гиреҳҳои коргар.

Ва ин ҷо як ҷузъи муҳимтарин дар гиреҳҳои коргарӣ аст:

  1. Кубелет — ба кор андохтани контейнерхоро дар узели корй идора мекунад.

Барои фаҳмидани он ки ин ҷузъҳо бо ҳам кор мекунанд, биёед як мисолро дида бароем.

Фарз мекунем, ки шумо ҳоло анҷом додаед kubectl create -f replicaset.yaml, пас аз он kubectl дархости HTTP POST кард Нуқтаи ниҳоии API ReplicaSet (гузаштани таърифи манбаи ReplicaSet).

Дар кластер чӣ рӯй медиҳад?

  1. Баъд аз он kubectl create -f replicaset.yaml Сервери API таърифи манбаи ReplicaSet-и шуморо дар анбор нигоҳ медорад:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

  2. Баъдан, контролери ReplicaSet дар менеҷери контроллер оғоз мешавад, ки эҷод, тағир додан ва нест кардани захираҳои ReplicaSet -ро идора мекунад:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

  3. Назоратчии ReplicaSet барои ҳар як репликаи ReplicaSet таърифи pod эҷод мекунад (мувофиқи қолаби под дар таърифи ReplicaSet) ва онҳоро дар анбор нигоҳ медорад:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

  4. Банақшагир оғоз карда мешавад, ки подкҳоро пайгирӣ мекунад, ки то ҳол ба ягон гиреҳи коргар таъин нашудаанд:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

  5. Банақшагир як гиреҳи мувофиқро барои ҳар як подк интихоб мекунад ва ин маълумотро ба таърифи подкаст дар мағоза илова мекунад:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

  6. Дар гиреҳи коргарие, ки ба он поддон таъин шудааст, Kubelet ба кор андохта мешавад, он қуттиҳои ба ин гиреҳ таъиншударо пайгирӣ мекунад:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

  7. Kubelet таърифи подкастро аз анбор мехонад ва ба вақти кори контейнер, ба монанди Docker, дастур медиҳад, ки контейнерҳоро дар гиреҳ оғоз кунад:

    Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал

Дар зер версияи матнии ин тавсиф аст.

Дархости API ба нуқтаи ниҳоии эҷоди ReplicaSet аз ҷониби сервери API коркард мешавад. Сервери API дархостро тасдиқ мекунад ва таърифи манбаи ReplicaSet-ро дар анбор нигоҳ медорад.

Ин ҳодиса контролери ReplicaSet-ро оғоз мекунад, ки зерраванди мудири контроллер мебошад. Назоратчии ReplicaSet эҷод, навсозӣ ва нест кардани захираҳои ReplicaSetро дар мағоза назорат мекунад ва ҳангоми рух додани ин ҳодиса огоҳинома мегирад.

Вазифаи контролери ReplicaSet аз он иборат аст, ки шумораи зарурии подкҳои ReplicaSet мавҷуд аст. Дар мисоли мо, то ҳол ягон подкаст вуҷуд надорад, бинобар ин контролери ReplicaSet ин таърифҳоро месозад (тибқи қолаби подк дар таърифи ReplicaSet) ва онҳоро дар анбор нигоҳ медорад.

Эҷоди қуттиҳои нав аз ҷониби як нақшакаш оғоз мешавад, ки таърифҳои подкӯҳҳоро пайгирӣ мекунад, ки ҳанӯз барои гиреҳҳои корӣ ба нақша гирифта нашудаанд. Банақшагир як гиреҳи мувофиқро барои ҳар як подк интихоб мекунад ва таърифҳои подкастро дар анбор нав мекунад.

Аҳамият диҳед, ки то ин лаҳза ягон рамзи сарбории корӣ дар кластер кор намекард. Хамаи он чи ки то хол ба чо оварда шудааст - ин эҷод ва навсозии захираҳо дар анбори гиреҳи асосӣ мебошад.

Ҳодисаи охирин Кубелецро ба вуҷуд меорад, ки подкҳоро, ки барои гиреҳҳои коргари худ пешбинӣ шудааст, назорат мекунад. Кубелети гиреҳи коргарие, ки дар он подкладҳои ReplicaSet насб шудаанд, бояд ба вақти кори контейнер, ба монанди Docker, дастур диҳад, ки тасвирҳои контейнерии лозимиро зеркашӣ кунад ва онҳоро иҷро кунад.

Дар ин лаҳза, барномаи ReplicaSet-и шумо ниҳоят кор мекунад!

Нақши API Kubernetes

Тавре ки шумо дар мисоли қаблӣ дидед, ҷузъҳои Kubernetes (ба истиснои сервери API ва анбор) тағиротро ба захираҳо дар нигаҳдорӣ ва тағир додани маълумот дар бораи захираҳои нигаҳдорӣ назорат мекунанд.

Албатта, ин ҷузъҳо бо анбор мустақиман ҳамкорӣ намекунанд, балки танҳо тавассути API Kubernetes.

Мисолҳои зеринро дида мебароем:

  1. Назоратчии ReplicaSet нуқтаи ниҳоии API-ро истифода мебарад рӯйхати ReplicaSets бо параметр watch барои назорат кардани тағирот дар захираҳои ReplicaSet.
  2. Назоратчии ReplicaSet нуқтаи ниҳоии API-ро истифода мебарад Pod эҷод кунед (под эҷод кардан) барои эҷод кардани порчаҳо.
  3. Барномасоз нуқтаи ниҳоии API-ро истифода мебарад пачка (под таҳрир) барои навсозӣ кардани подкастҳо бо маълумот дар бораи гиреҳи коргари интихобшуда.

Тавре ки шумо мебинед, ин ҳамон APIест, ки kubectl дастрас аст. Истифодаи ҳамон API барои ҷузъҳои дохилӣ ва корбарони беруна як консепсияи асосӣ дар тарроҳии Kubernetes мебошад.

Акнун мо метавонем ҷамъбаст кунем, ки чӣ тавр Kubernetes кор мекунад:

  1. Мағозаҳои нигаҳдории давлатӣ, яъне захираҳои Kubernetes.
  2. Сервери API интерфейсро барои нигаҳдорӣ дар шакли API Kubernetes таъмин мекунад.
  3. Ҳама ҷузъҳои дигар ва корбарони Kubernetes ҳолати (манбаъҳоро) тавассути API мехонанд, мушоҳида мекунанд ва идора мекунанд.

Донистани ин мафҳумҳо ба шумо кӯмак мекунад, ки kubectl-ро беҳтар фаҳмед ва аз он бештар истифода баред.

Акнун биёед якчанд маслиҳатҳо ва ҳилаҳои мушаххасро бубинем, ки ҳосилнокии шуморо бо kubectl беҳтар мекунанд.

1. Бо истифода аз анҷоми фармон суръати вурудро афзоиш диҳед

Яке аз усулҳои муфидтарин, вале аксар вақт нодида гирифташуда барои беҳтар кардани кор бо kubectl ин анҷом додани фармон мебошад.

Анҷоми фармон ба шумо имкон медиҳад, ки қисмҳои фармонҳои kubectl-ро бо истифода аз тугмаи Tab ба таври худкор пурра кунед. Ин барои зерфармонҳо, вариантҳо ва аргументҳо, аз ҷумла чизи мураккаб ба мисли номҳои манбаъҳо кор мекунад.

Бингар, ки чӣ тавр анҷом додани фармони kubectl кор мекунад:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Иҷрои фармон барои снарядҳои Bash ва Zsh кор мекунад.

Роҳнамои расмӣ дорои дастурҳои муфассал оид ба танзими худкоркунӣ мебошад, аммо дар зер мо иқтибосҳои кӯтоҳеро пешкаш хоҳем кард.

Чӣ тавр анҷом додани фармон кор мекунад

Анҷом додани фармон як хусусияти ниҳонӣ аст, ки бо истифода аз скрипти анҷомдиҳӣ кор мекунад. Скрипти васеъшавӣ скрипти ҷилди, ки рафтори васеъшавиро барои фармони мушаххас муайян мекунад.

Kubectl бо истифода аз фармонҳои зерин скриптҳои васеъшавиро барои Bash ва Zsh ба таври худкор тавлид ва мебарорад:

$ kubectl completion bash

Ё:

$ kubectl completion zsh

Дар назария, пайваст кардани натиҷаи ин фармонҳо ба қабати мувофиқи фармон кофӣ аст, то kubectl фармонҳоро пурра кунад.

Дар амал, усули пайвастшавӣ барои Bash (аз ҷумла фарқияти байни Linux ва MacOS) ва Zsh гуногун аст. Дар зер мо ҳамаи ин вариантҳоро дида мебароем.

Bash дар Linux

Скрипти анҷоми Bash аз бастаи анҷомдиҳии bash вобаста аст, бинобар ин шумо бояд аввал онро насб кунед:

$ sudo apt-get install bash-completion

Ё:

$ yum install bash-completion

Шумо метавонед бо истифода аз фармони зерин санҷед, ки баста бомуваффақият насб шудааст:

$ type _init_completion

Агар ин рамзи функсияи ҷилдиро барорад, он гоҳ bash-completion дуруст насб шудааст. Агар фармон хатогии "Наёфтанд" диҳад, шумо бояд сатри зеринро ба файли худ илова кунед ~ / .bashrc:

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

Оё ин сатрро ба файл илова кардан лозим аст ~ / .bashrc ё не, аз мудири бастае, ки шумо барои насб кардани bash-completion истифода мебурдед, вобаста аст. Ин барои APT лозим аст, аммо барои YUM не.

Пас аз насб кардани bash-completion, шумо бояд ҳама чизро танзим кунед, то скрипти анҷомдиҳии kubectl дар ҳама сессияҳои shell фаъол бошад.

Яке аз роҳҳои ин кор ин илова кардани сатри зерин ба файл аст ~ / .bashrc:

source <(kubectl completion bash)

Роҳи дигар ин илова кардани скрипти васеъшавии kubectl ба директория мебошад /etc/bash_completion.d (агар он вуҷуд надошта бошад, эҷод кунед):

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

Ҳама скриптҳои изофӣ дар каталог /etc/bash_completion.d ба таври худкор ба bash-тамоми дохил карда мешаванд.

Ҳарду вариантҳо баробар татбиқ мешаванд.

Пас аз бозоғоз кардани қабат, анҷом додани фармони kubectl кор хоҳад кард.

Bash дар MacOS

Дар MacOS танзим каме мураккабтар аст. Далели он аст, ки ба таври нобаёнӣ, MacOS версияи Bash 3.2-ро истифода мебарад ва скрипти худкорпуркунии kubectl версияи Bash-и ҳадди аққал 4.1-ро талаб мекунад ва дар Bash 3.2 кор намекунад.

Масъалаҳои иҷозатномадиҳӣ бо истифодаи версияи кӯҳнаи Bash дар MacOS вуҷуд доранд. Версияи Bash 4 дар доираи GPLv3 иҷозатнома дорад, ки аз ҷониби Apple дастгирӣ намешавад.

Барои танзими худкор анҷом додани kubectl дар MacOS, шумо бояд версияи охирини Bash-ро насб кунед. Шумо инчунин метавонед Bash-и навшударо ҳамчун қабати пешфарзии худ таъин кунед, ки дар оянда мушкилоти зиёдеро наҷот медиҳад. Ин мушкил нест, тафсилот дар мақола оварда шудааст "Навсозии Bash дар MacOS".

Пеш аз идома додан, боварӣ ҳосил кунед, ки шумо версияи охирини Bash-ро истифода мебаред (баромадро санҷед bash --version).

Скрипти анҷоми Bash вобаста ба лоиҳа фарқ мекунад бас-тамом кардан, бинобар ин шумо бояд аввал онро насб кунед.

Шумо метавонед бо истифода аз bash-completion насб кунед Homebrew:

$ brew install bash-completion@2

Ин аст, @2 Ба итмомрасии версияи bash 2 тааллуқ дорад. Автопуркунии kubectl bash-completion v2-ро талаб мекунад ва bash-completion v2 ҳадди аққал версияи Bash 4.1-ро талаб мекунад.

Натиҷаи фармон brew-install дорои қисмати Огоҳӣ мебошад, ки муайян мекунад, ки чӣ бояд ба файл илова карда шавад ~/.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"

Бо вуҷуди ин, ман тавсия медиҳам, ки ин сатрҳоро илова кунед ~/.bash_profile, дар ҳоле ки дар ~/.bashrc. Дар ин ҳолат, пурракунии худкор на танҳо дар асосӣ, балки дар снарядҳои фармонҳои кӯдакон низ дастрас хоҳад буд.

Пас аз бозоғоз кардани қабати фармон, шумо метавонед дурустии насбро бо фармони зерин тафтиш кунед:

$ type _init_completion

Агар шумо дар баромад функсияи ҷилдиро бинед, ҳама чиз дуруст танзим шудааст.

Ҳоло мо бояд боварӣ ҳосил кунем, ки автоматии kubectl дар ҳама сессияҳо фаъол карда шавад.

Яке аз роҳҳо ин илова кардани сатри зерин ба шумост ~/.bashrc:

source <(kubectl completion bash)

Роҳи дуюм ин илова кардани скрипти худкор ба ҷузвдон аст /usr/local/etc/bash_completion.d:

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

Ин усул танҳо кор хоҳад кард, агар шумо бо истифода аз Homebrew bash-ро насб кунед. Дар ин ҳолат, bash-completion ҳама скриптҳоро аз ин директория бор мекунад.

Агар шумо насб карда бошед kubectl бо истифода аз Homebrew, пас иҷрои қадами қаблӣ лозим нест, зеро скрипти худкор ба таври худкор дар ҷузвдон ҷойгир карда мешавад. /usr/local/etc/bash_completion.d ҳангоми насб. Дар ин ҳолат, вақте ки шумо ба итмом расонидани bash-ро насб мекунед, автоматии kubectl ба кор шурӯъ мекунад.

Дар натиҷа, ҳамаи ин вариантҳо баробаранд.

Зш

Скриптҳои пуркунии худкор барои Zsh ягон вобастагӣ талаб намекунанд. Ҳамаи шумо лозим аст, ки онҳоро фаъол созед, вақте ки шумо қабати фармонро бор мекунед.

Шумо метавонед ин корро тавассути илова кардани сатр ба худ кунед ~/.zshrc файл:

source <(kubectl completion zsh)

Агар шумо хато қабул кунед not found: compdef пас аз бозоғоз кардани қабати худ, шумо бояд функсияи дохилиро фаъол созед compdef. Шумо метавонед онро бо илова кардани он ба аввали файли худ фаъол созед ~/.zshrc пас аз он:

autoload -Uz compinit
compinit

2. Мушаххасоти захираҳоро зуд бинед

Вақте ки шумо таърифҳои захираҳои YAML эҷод мекунед, шумо бояд майдонҳо ва маънои онҳоро барои ин захираҳо донед. Як ҷой барои ҷустуҷӯи ин маълумот дар истинод ба API аст, ки дорои мушаххасоти мукаммали ҳамаи захираҳо мебошад.

Аммо, гузаштан ба браузери веб ҳар дафъае, ки шумо чизеро ҷустуҷӯ мекунед, нороҳат аст. Аз ин рӯ, kubectl фармонро таъмин мекунад kubectl explain, ки мушаххасоти ҳама захираҳоро дар терминали шумо нишон медиҳад.

Формати фармон чунин аст:

$ kubectl explain resource[.field]...

Фармон мушаххасоти захира ё майдони дархостшударо мебарорад. Маълумоте, ки намоиш дода мешавад, ба маълумоти дар дастури API мавҷудбуда якхела аст.

бо пешфарз kubectl explain танхо дарачаи якуми лона кардани майдонхоро нишон медихад.

Бингар, ки он чӣ гуна аст метавонад дар ин ҷо бошад.

Агар шумо интихобро илова кунед, шумо метавонед тамоми дарахтро нишон диҳед --recursive:

$ kubectl explain deployment.spec --recursive

Агар шумо аниқ надонед, ки кадом захираҳо лозиманд, шумо метавонед ҳамаи онҳоро бо фармони зерин намоиш диҳед:

$ kubectl api-resources

Ин фармон номҳои захираҳоро дар шакли ҷамъ нишон медиҳад, масалан. deployments ба ҷои deployment. Он инчунин номи кӯтоҳро нишон медиҳад, масалан deploy, барои он захирахое, ки онро доранд. Дар бораи ин фарқиятҳо хавотир нашавед. Ҳамаи ин имконоти номгузорӣ барои kubectl баробаранд. Яъне, шумо метавонед яке аз онҳоро барои истифода kubectl explain.

Ҳамаи фармонҳои зерин баробаранд:

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

3. Формати баромади сутуни фармоиширо истифода баред

Формати баромади фармони пешфарз 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

Ин формат қулай аст, аммо он миқдори маҳдуди иттилоотро дар бар мегирад. Дар муқоиса бо формати пурраи таърифи захираҳо, дар ин ҷо танҳо якчанд майдонҳо нишон дода мешаванд.

Дар ин ҳолат, шумо метавонед формати баромади сутуни фармоиширо истифода баред. Он ба шумо имкон медиҳад, ки муайян кунед, ки кадом маълумот бояд бароварда шавад. Шумо метавонед ҳама гуна майдони захираҳоро ҳамчун сутуни алоҳида нишон диҳед.

Истифодаи формати фармоишӣ бо истифода аз имконоти зерин муайян карда мешавад:

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

Шумо метавонед ҳар як сутуни баромадро ҳамчун ҷуфт муайян кунед <header>:<jsonpath>ки дар <header> номи сутун аст, ва <jsonpath> — ифодае, ки майдони захираро муайян мекунад.

Биёед як мисоли оддиро бубинем:

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

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

Дар натиҷа як сутун бо номи подкҳо мавҷуд аст.

Ифодаи хосият номҳои подшоҳро аз майдон интихоб мекунад metadata.name. Сабаб дар он аст, ки номи поддон дар майдони номи кӯдак муайян карда мешавад metadata дар тавсифи захираҳои pod. Тафсилоти бештарро метавонед дар Дастури API ё фармонро нависед kubectl explain pod.metadata.name.

Акнун биёед бигӯед, ки шумо мехоҳед ба баромад сутуни иловагӣ илова кунед, масалан, нишон додани гиреҳе, ки ҳар як қуттӣ дар он кор мекунад. Барои ин, шумо метавонед танҳо тавсифи сутуни мувофиқро ба имконоти сутунҳои фармоишӣ илова кунед:

$ 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

Ифода номи гиреҳро аз spec.nodeName — хангоми ба гирех таъин кардани поддон, дар майдон номи он навишта мешавад spec.nodeName мушаххасоти захираҳои pod. Маълумоти муфассалро метавон дар баромад пайдо кард kubectl explain pod.spec.nodeName.

Лутфан таваҷҷӯҳ намоед, ки майдонҳои захираҳои Kubernetes ба ҳарфҳо ҳассос мебошанд.

Шумо метавонед ҳама гуна майдони захираҳоро ҳамчун сутун дидан кунед. Танҳо тавсифи захираҳоро аз назар гузаронед ва онро бо ҳама соҳаҳое, ки ба шумо маъқуланд, санҷед.

Аммо аввал, биёед ба ибораҳои интихоби майдон муфассалтар назар андозем.

Ифодаҳои JSONPath

Ифодаҳо барои интихоби майдонҳои захираҳо дар асоси JSONPath.

JSONPath забонест барои дарёфти маълумот аз ҳуҷҷатҳои JSON. Интихоби як майдон соддатарин ҳолати истифода барои JSONPath аст. Ӯ бисёр дорад имкониятхои бештар, аз ҷумла селекторҳо, филтрҳо ва ғайра.

Kubectl шарҳ шумораи маҳдуди хусусиятҳои JSONPath -ро дастгирӣ мекунад. Имкониятҳо ва намунаҳои истифодаи онҳо дар зер тавсиф шудаанд:

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

Оператори [] махсусан муҳим аст. Бисёр майдонҳои захираҳои Kubernetes рӯйхатҳо мебошанд ва ин оператор ба шумо имкон медиҳад, ки аъзои ин рӯйхатҳоро интихоб кунед. Он одатан бо аломати ваҳшӣ ба монанди [*] барои интихоби ҳамаи унсурҳои рӯйхат истифода мешавад.

Намунаҳои татбиқ

Имкониятҳои истифодаи формати баромади сутуни фармоишӣ беохиранд, зеро шумо метавонед ҳама гуна майдон ё маҷмӯи майдонҳои захираҳоро дар баромад намоиш диҳед. Инҳоянд баъзе барномаҳои намунавӣ, аммо озодона онҳоро худатон омӯзед ва замимаҳоеро, ки барои шумо кор мекунанд, пайдо кунед.

  1. Намоиши тасвирҳои контейнер барои pods:
    $ kubectl get pods 
      -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
    
    NAME                        IMAGES
    engine-544b6b6467-22qr6     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-lw5t8     rabbitmq:3.7.8-management,nginx
    engine-544b6b6467-tvgmg     rabbitmq:3.7.8-management,nginx
    web-ui-6db964458-8pdw4      wordpress

    Ин фармон номҳои тасвири контейнерро барои ҳар як pod нишон медиҳад.

    Дар хотир доред, ки поддон метавонад якчанд контейнер дошта бошад, пас номҳои тасвирҳо дар як сатр бо вергул ҷудо карда мешаванд.

  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

    Ин фармон муфид аст, агар кластери шумо дар абри ҷамъиятӣ ҷойгир бошад. Он минтақаи дастрасиро барои ҳар як гиреҳ нишон медиҳад.

    Минтақаи дастрасӣ консепсияи абрест, ки минтақаи такрориро бо минтақаи ҷуғрофӣ маҳдуд мекунад.

    Минтақаҳои дастрас барои ҳар як гиреҳ тавассути тамғаи махсус ба даст оварда мешаванд - failure-domain.beta.kubernetes.io/zone. Агар кластер дар абри ҷамъиятӣ кор кунад, ин нишона ба таври худкор сохта мешавад ва бо номҳои минтақаҳои дастрас барои ҳар як гиреҳ пур карда мешавад.

    Тамғакоғазҳо ҷузъи мушаххасоти манбаи Kubernetes нестанд, аз ин рӯ шумо дар бораи онҳо маълумот пайдо карда наметавонед Дастури API. Аммо, агар шумо дар бораи гиреҳҳо дар формати YAML ё JSON маълумот дархост кунед, онҳоро дидан мумкин аст (ба мисли ҳама гуна тамғакоғазҳо):

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

    Ин як роҳи олии омӯхтани маълумоти бештар дар бораи захираҳо, ба ҷуз аз омӯзиши мушаххасоти захираҳо мебошад.

4. Ба осонӣ байни кластерҳо ва фазои номҳо гузаред

Вақте ки kubectl ба Kubernetes API дархост мекунад, он аввал файли kubeconfig -ро мехонад, то ҳамаи параметрҳои заруриро барои пайвастшавӣ ба даст орад.

Бо нобаёнӣ файли kubeconfig аст ~/.kube/config. Одатан ин файл бо фармони махсус сохта ё нав карда мешавад.

Вақте ки шумо бо кластерҳои сершумор кор мекунед, файли kubeconfig шумо дорои танзимот барои пайвастшавӣ ба ҳамаи ин кластерҳо мебошад. Ба шумо роҳ лозим аст, ки ба фармони kubectl бигӯед, ки шумо бо кадом кластер кор мекунед.

Дар дохили як кластер, шумо метавонед фазои номҳои сершумор эҷод кунед - як намуди кластери виртуалӣ дар дохили кластери физикӣ. Kubectl инчунин муайян мекунад, ки кадом фазои номро дар асоси файли kubeconfig истифода бурдан лозим аст. Ин маънои онро дорад, ки ба шумо инчунин роҳе лозим аст, ки ба фармони kubectl бигӯед, ки бо кадом фазои ном кор кардан лозим аст.

Дар ин боб мо мефаҳмонем, ки он чӣ гуна кор мекунад ва чӣ гуна онро самаранок кор кардан мумкин аст.

Дар хотир доред, ки шумо метавонед якчанд файлҳои kubeconfig дошта бошед, ки дар тағирёбандаи муҳити KUBECONFIG номбар шудаанд. Дар ин ҳолат, ҳамаи ин файлҳо дар як конфигуратсияи умумӣ дар вақти корӣ муттаҳид карда мешаванд. Шумо инчунин метавонед файли пешфарзи kubeconfig -ро тавассути иҷро кардани kubectl бо параметр тағир диҳед --kubeconfig. Бинед ҳуҷҷатҳои расмӣ.

файлҳои kubeconfig

Биёед бубинем, ки файли kubeconfig маҳз чиро дар бар мегирад:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Тавре ки шумо мебинед, файли kubeconfig дорои маҷмӯи контекстҳо мебошад. Контекст аз се унсур иборат аст:

  • Кластер — URL-и API-и сервери кластер.
  • Корбар - маълумотҳои тасдиқи корбар дар кластер.
  • Фазои номҳо - фазои номҳое, ки ҳангоми пайвастшавӣ ба кластер истифода мешаванд.

Дар амал, онҳо аксар вақт дар kubeconfig худ як контекстро барои як кластер истифода мебаранд. Аммо, шумо метавонед дар як кластер якчанд контекст дошта бошед, ки аз рӯи корбар ё фазои ном фарқ мекунанд. Аммо, ин конфигуратсияи бисёрконтекст камназир аст, аз ин рӯ одатан харитасозии як ба як байни кластерҳо ва контекстҳо вуҷуд дорад.

Дар ҳар вақти муайян, яке аз контекстҳо ҷорӣ аст:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Вақте ки kubectl файли конфигуратсияро мехонад, он ҳамеша маълумотро аз контексти ҷорӣ мегирад. Дар мисоли боло, kubectl ба кластери Hare пайваст мешавад.

Мувофиқи он, барои гузаштан ба кластери дигар, шумо бояд контексти кунуниро дар файли kubeconfig тағир диҳед:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Акнун kubectl ба кластери Фокс пайваст мешавад.

Барои гузаштан ба фазои номҳои дигар дар як кластер, шумо бояд арзиши унсури фазои номро барои контексти ҷорӣ тағир диҳед:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Дар мисоли боло, kubectl фазои номи Prod-и кластери Фоксро истифода мебарад (қаблан фазои номи санҷиш муқаррар карда шуда буд).

Дар хотир доред, ки kubectl инчунин вариантҳоро пешниҳод мекунад --cluster, --user, --namespace и --context, ки ба шумо имкон медиҳад, ки унсурҳои инфиродӣ ва худи контексти ҷорӣ, новобаста аз он ки дар kubeconfig муқаррар карда шудааст, дубора нависед. Нигоҳ кунед kubectl options.

Дар назария, шумо метавонед танзимотро дар kubeconfig дастӣ тағир диҳед. Аммо ин номувофиқ аст. Барои содда кардани ин амалиётҳо, утилитаҳои гуногун мавҷуданд, ки ба шумо имкон медиҳанд, ки параметрҳоро ба таври худкор тағир диҳед.

kubectx-ро истифода баред

Як воситаи хеле маъмул барои гузариш байни кластерҳо ва фазои номҳо.

Утилита фармонҳоро таъмин мекунад kubectx и kubens барои тағир додани контексти ҷорӣ ва фазои ном мутаносибан.

Тавре зикр гардид, тағир додани контексти ҷорӣ маънои тағир додани кластерро дорад, агар шумо дар як кластер танҳо як контекст дошта бошед.

Ин аст мисоли иҷро кардани ин фармонҳо:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Аслан, ин фармонҳо файли kubeconfig-ро тавре ки дар боло тавсиф шудаанд, таҳрир мекунанд.

насб кардан kubectx, дастурҳои дар боло бударо иҷро кунед Гитуб.

Ҳарду фармонҳо худкор пуркунии номҳои контекст ва фазои номҳоро дастгирӣ мекунанд, ки зарурати чопи онҳоро пурра аз байн мебарад. Дастурҳо оид ба танзими автоматӣ дар ин ҷо.

Боз як хусусияти муфид kubectx Ин аст, режими интерактивӣ. Он дар якҷоягӣ бо хидматрасонӣ кор мекунад fzf, ки бояд алохида насб карда шавад. Насб кардани fzf ба таври худкор ҳолати интерактивиро дар kubectx. Ба таври интерактивӣ, шумо метавонед контекст ва фазои номро тавассути интерфейси интерактивии ҷустуҷӯи ройгони аз ҷониби fzf пешниҳодшуда интихоб кунед.

Истифодаи тахаллусҳои қабеҳ

Барои тағир додани контексти ҷорӣ ва фазои ном ба шумо асбобҳои алоҳида лозим нест, зеро kubectl инчунин фармонҳоро барои ин таъмин мекунад. Ҳа, жамоа kubectl config зерфармонҳоро барои таҳрири файлҳои kubeconfig таъмин мекунад.

Баъзе аз онҳо инҳоянд:

  • kubectl config get-contexts: намоиш додани ҳама контекстҳо;
  • kubectl config current-context: гирифтани контексти ҷорӣ;
  • kubectl config use-context: тағир додани контексти ҷорӣ;
  • kubectl config set-context: Тағир додани унсури контекст.

Аммо, истифодаи бевоситаи ин фармонҳо чандон қулай нест, зеро онҳо дарозанд. Шумо метавонед барои онҳо тахаллусҳои қабеҳ созед, ки иҷрои онҳо осон аст.

Ман дар асоси ин фармонҳо маҷмӯи тахаллусҳо сохтам, ки функсияҳои шабеҳро ба kubectx таъмин мекунанд. Дар ин ҷо шумо метавонед онҳоро дар амал бинед:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Дар хотир доред, ки тахаллусҳо fzf-ро барои таъмин кардани интерфейси ҷустуҷӯи ройгон истифода мебаранд (ба монанди режими интерактивии kubectx). Ин маънои онро дорад, ки ба шумо лозим аст fzf насб кунедбарои истифода бурдани ин тахаллусҳо.

Инҳоянд худи таърифҳои тахаллусҳо:

# Получить текущий контекст
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/^..//")"'

Барои гузоштани ин тахаллусҳо шумо бояд таърифҳои дар боло зикршударо ба файли худ илова кунед ~/.bashrc ё ~/.zshrc ва қабати худро бозоғоз намоед.

Истифодаи плагинҳо

Kubectl ба шумо имкон медиҳад, ки плагинҳоро бор кунед, ки ҳамон тавре ки фармонҳои асосӣ иҷро мешаванд. Шумо метавонед, масалан, плагини kubectl-foo-ро насб кунед ва онро тавассути иҷрои фармон иҷро кунед kubectl foo.

Бо ин роҳ тағир додани контекст ва фазои ном қулай мебуд, масалан, тавассути иҷро kubectl ctx тағйир додани контекст ва kubectl ns барои тағир додани фазои ном.

Ман ду плагинро навиштаам, ки ин корро мекунанд:

Кори плагинҳо ба тахаллуси қисмати қаблӣ асос ёфтааст.

Ин аст, ки онҳо чӣ гуна кор мекунанд:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Дар хотир доред, ки плагинҳо fzf-ро барои фароҳам овардани интерфейси интерактивии ҷустуҷӯ истифода мебаранд (ба монанди режими интерактивии kubectx). Ин маънои онро дорад, ки ба шумо лозим аст fzf насб кунедбарои истифода бурдани ин тахаллусҳо.

Барои насб кардани плагинҳо, ба шумо лозим аст, ки скриптҳои ҷилдиро бо номи худ зеркашӣ кунед kubectl-ctx и kubectl-ns ба ягон феҳристи тағирёбандаи PATH худ ворид кунед ва онҳоро бо иҷрошаванда созед, масалан. chmod +x. Дарҳол пас аз ин шумо метавонед истифода баред kubectl ctx и kubectl ns.

5. Кам кардани вуруд бо autoaliases

Номҳои тахаллуси Shell роҳи хуби суръатбахшии вуруд мебошанд. Лоиҳа kubectl-тахаллусҳо тақрибан 800 миёнабурро барои фармонҳои асосии kubectl дар бар мегирад.

Шояд шумо дар ҳайрат бошед - шумо 800 тахаллусро чӣ гуна дар хотир доред? Аммо ба шумо лозим нест, ки ҳамаи онҳоро дар хотир доред, зеро онҳо аз рӯи нақшаи оддӣ сохта шудаанд, ки дар зер оварда шудаанд:

Чӣ тавр истифода бурдани kubectl самараноктар: дастури муфассал
Масалан:

  1. кгпооямл - кубектл ба даст подс оямл
  2. ksysgsvcw — kubectl -n kube-система гирифтани svc w
  3. ksysrmcm -kubectl -n кубе-система рм см
  4. kgdepallls - kubectl ҷойгиркунии ҳама sl

Тавре ки шумо мебинед, тахаллусҳо аз ҷузъҳо иборатанд, ки ҳар яки онҳо як унсури мушаххаси фармони kubectl мебошанд. Ҳар як тахаллус метавонад як ҷузъ барои фармони асосӣ, амалиёт ва захира ва ҷузъҳои сершумор барои параметрҳо дошта бошад. Шумо танҳо мувофиқи диаграммаи боло ин ҷузъҳоро аз чап ба рост "пур кунед".

Диаграммаи муфассали ҷорӣ дар GitHub. Дар он ҷо шумо метавонед низ пайдо кунед рӯйхати пурраи тахаллусҳо.

Масалан, тахаллуси kgpooyamlall ба фармон баробар аст kubectl get pods -o yaml --all-namespaces.

Тартиби нисбии вариантҳо муҳим нест: фармон kgpooyamlall ба фармон баробар аст kgpoalloyaml.

Ба шумо лозим нест, ки ҳама ҷузъҳоро ҳамчун тахаллус истифода баред. Барои намуна k, kg, klo, ksys, kgpo низ истифода бурдан мумкин аст. Ғайр аз он, шумо метавонед тахаллусҳо ва фармонҳо ё имконоти муқаррариро дар сатри фармон якҷоя кунед:

Масалан:

  1. Ба ҷои kubectl proxy нависед k proxy.
  2. Ба ҷои kubectl get roles нависед kg roles (дар айни замон ягон тахаллус барои манбаи Нақшҳо вуҷуд надорад).
  3. Барои гирифтани маълумот барои як подтаи мушаххас, шумо метавонед фармонро истифода баред kgpo my-pod — kubectl get pod my-pod.

Лутфан таваҷҷӯҳ намоед, ки баъзе тахаллусҳо далели сатри фармонро талаб мекунанд. Масалан, тахаллус kgpol маънои онро дорад kubectl get pods -l. Варианти -l далелро талаб мекунад - мушаххасоти нишона. Агар шумо тахаллусро истифода баред, он ба назар мерасад kgpol app=ui.

Азбаски баъзе тахаллусҳо далелҳоро талаб мекунанд, тахаллуси a, f ва l бояд дар охир истифода шаванд.

Умуман, вақте ки шумо ин схемаро ба даст меоред, шумо метавонед ба таври интуитивӣ аз фармонҳое, ки мехоҳед иҷро кунед, тахаллусҳо гиред ва вақти зиёди чопкуниро сарфа кунед.

Насбкунӣ

Барои насб кардани kubectl-тақаллубҳо, шумо бояд файлро зеркашӣ кунед .kubectl_aliases аз GitHub ва онро ба файл дохил кунед ~/.bashrc ё ~/.zshrc:

source ~/.kubectl_aliases

Автопуркунӣ

Тавре ки мо қаблан гуфта будем, шумо аксар вақт ба тахаллус дар сатри фармон калимаҳои иловагӣ илова мекунед. Барои намуна:

$ kgpooyaml test-pod-d4b77b989

Агар шумо анҷом додани фармони kubectl -ро истифода баред, шумо эҳтимолан худкоркуниро барои чизҳое ба монанди номҳои манбаъ истифода кардаед. Аммо оё ин корро ҳангоми истифодаи тахаллусҳо метавон анҷом дод?

Ин саволи хеле муҳим аст, зеро агар пуркунии худкор кор накунад, шумо баъзе аз бартариҳои тахаллусҳоро аз даст медиҳед.

Ҷавоб аз он вобаста аст, ки шумо кадом қабатро истифода мебаред:

  1. Барои Zsh, пуркунии тахаллус аз қуттӣ кор мекунад.
  2. Барои Bash, мутаассифона, баъзе корҳо лозиманд, то ба пуррагии худкор ба кор оянд.

Даргиронидани худкорпуркунӣ барои тахаллусҳо дар Bash

Мушкилот бо Bash дар он аст, ки он кӯшиш мекунад, ки тахаллусро анҷом диҳад (ҳар дафъае, ки шумо Tab-ро пахш мекунед), на фармоне, ки тахаллус ба он ишора мекунад (масалан, Zsh мекунад). Азбаски шумо барои ҳамаи 800 тахаллусҳо скриптҳои анҷомдиҳӣ надоред, худпуркунӣ кор намекунад.

Лоиҳа мукаммал тахаллус халли умумии ин масъаларо таъмин мекунад. Он ба механизми анҷомдиҳии тахаллусҳо пайваст мешавад, тахаллусро ба фармон дар дохили он васеъ мекунад ва имконоти анҷоми фармони анҷомшударо бармегардонад. Ин маънои онро дорад, ки замимаи тахаллус маҳз ҳамон тавре ки барои фармони пурра амал мекунад.

Дар зер, ман аввал мефаҳмонам, ки чӣ гуна насб кардани тахаллуси пурра ва сипас чӣ гуна онро танзим кардан мумкин аст, то анҷом додани ҳама тахаллусҳои kubectl.

Насб кардани тахаллуси пурра

Пеш аз ҳама, тахаллуси пурра вобаста аст бас-тамом кардан. Аз ин рӯ, пеш аз насб кардани тахаллуси пурра, шумо бояд боварӣ ҳосил кунед, ки bash-completion насб шудааст. Дастурҳои насбкунӣ қаблан барои Linux ва MacOS дода шуда буданд.

Қайдҳои муҳим барои корбарони MacOS: Мисли скрипти худкорпуркунии kubectl, тахаллуси пурра бо Bash 3.2, ки пешфарз дар MacOS аст, кор намекунад. Махсусан, тахаллуси пурра аз bash-completion v2 вобаста аст (brew install bash-completion@2), ки ҳадди аққал Bash 4.1-ро талаб мекунад. Ин маънои онро дорад, ки барои истифодаи пурраи тахаллус дар MacOS шумо бояд версияи нави Bash-ро насб кунед.

Шумо бояд скриптро зеркашӣ кунед bash_completion.sh аз он Анбори GitHub ва онро ба файли худ дохил кунед ~/.bashrc:

source ~/bash_completion.sh

Пас аз бозоғозӣ кардани ҷабҳа, тахаллуси комил пурра насб карда мешавад.

Фаъолсозии худкор барои тахаллусҳои kubectl

Аз ҷиҳати техникӣ мукаммали тахаллус вазифаи печандаро таъмин мекунад _complete_alias. Ин функсия тахаллусро месанҷад ва маслиҳатҳои анҷомро барои фармони тахаллус бармегардонад.

Барои пайваст кардани функсия бо тахаллуси мушаххас, шумо бояд механизми дарунсохташудаи Bash -ро истифода баред пурра, насб кардан _complete_alias ҳамчун вазифаи анҷомдиҳии тахаллус.

Ба сифати мисол, биёед тахаллуси k-ро гирем, ки он фармони kubectl мебошад. насб кардан _complete_alias Ҳамчун вазифаи мукаммал барои ин тахаллус, шумо бояд фармони зеринро иҷро кунед:

$ complete -F _complete_alias k

Натиҷаи ин аст, ки ҳар вақте ки шумо тахаллуси k-ро худкор пур мекунед, функсия даъват карда мешавад _complete_alias, ки тахаллусро месанҷад ва маслиҳатҳои анҷомро барои фармон бармегардонад kubectl.

Мисоли дуюм, биёед тахаллусро гирем kg, ки ифода мекунад kubectl get:

$ complete -F _complete_alias kg

Мисли мисоли қаблӣ, вақте ки шумо кг-ро ба таври худкор пур мекунед, шумо ҳамон маслиҳатҳои анҷомро мегиред, ки шумо барои гирифтани kubectl get.

Дар хотир доред, ки шумо метавонед тахаллуси пурраро барои ҳама гуна тахаллус дар системаи худ истифода баред.

Аз ин рӯ, барои фаъол кардани худкор пуркунии ҳама тахаллусҳои kubectl, шумо бояд фармони дар боло зикршударо барои ҳар яки онҳо иҷро кунед. Порчаи зерин маҳз ҳамин тавр мекунад, ба шарте ки шумо kubectl-тақаллубҳоро ба он гузошта бошед ~/.kubectl-aliases:

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

Ин порчаи код бояд дар шумо ҷойгир карда шавад ~/.bashrc, қабати фармонро аз нав оғоз кунед ва пуркунии худкор барои ҳама тахаллусҳои 800 kubectl дастрас хоҳад шуд.

6. Васеъ кардани kubectl бо плагинҳо

Оғоз бо нусхаи 1.12, kubectl дастгирӣ мекунад механизми плагин, ки ба шумо имкон медиҳад, ки функсияҳои онро бо фармонҳои иловагӣ васеъ кунед.

Агар шинос бошед Механизмҳои плагини Git, пас плагинҳои kubectl дар ҳамон принсип сохта мешаванд.

Дар ин боб мо мефаҳмем, ки чӣ тавр насб кардани плагинҳо, аз куҷо пайдо кардани онҳо ва чӣ гуна сохтани плагинҳои шахсии худ.

Насб кардани плагинҳо

Васлкунакҳои Kubectl ҳамчун файлҳои оддии иҷрошаванда бо номи монанди тақсим карда мешаванд kubectl-x. Префикс kubectl- талаб карда мешавад, пас аз он зерфармони нави kubectl, ки ба шумо имкон медиҳад, ки плагинро занг занед.

Масалан, плагини hello ҳамчун файле, ки номида мешавад, тақсим карда мешавад kubectl-hello.

Барои насб кардани плагин, шумо бояд файлро нусхабардорӣ кунед kubectl-x ба ягон директорияи PATH худ ворид кунед ва онро иҷрошаванда созед, масалан бо chmod +x. Дарҳол пас аз ин шумо метавонед плагинро бо занг занед kubectl x.

Шумо метавонед фармони зеринро барои рӯйхати ҳамаи плагинҳое, ки дар айни замон дар системаи шумо насб шудаанд, истифода баред:

$ kubectl plugin list

Ин фармон инчунин огоҳиҳоро нишон медиҳад, агар шумо плагинҳои сершумор бо як ном дошта бошед ё файли плагинҳо мавҷуд бошад, ки иҷрошаванда нест.

Ҷустуҷӯ ва насби плагинҳо бо истифода аз Krew

Васлкунакҳои Kubectl метавонанд ба монанди бастаҳои нармафзор мубодила ё дубора истифода шаванд. Аммо аз куҷо шумо метавонед плагинҳоро пайдо кунед, ки дигарон мубодила кардаанд?

Лоиҳаи Крю Ҳадафи пешниҳоди ҳалли ягона барои мубодила, ҷустуҷӯ, насб ва идоракунии плагинҳои kubectl. Лоиҳа худро "менеҷери бастаҳо барои плагинҳои kubectl" меноманд (Крю ба Брю).

Krew рӯйхати плагинҳои kubectl аст, ки шумо метавонед интихоб ва насб кунед. Ҳамзамон, Krew инчунин як плагин барои kubectl мебошад.

Ин маънои онро дорад, ки насби Krew аслан ба монанди насби ягон плагини kubectl кор мекунад. Шумо метавонед дастурҳои муфассалро дар ин ҷо пайдо кунед Саҳифаи GitHub.

Муҳимтарин фармонҳои Krew инҳоянд:

# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>

Лутфан таваҷҷӯҳ намоед, ки насби плагинҳо бо истифодаи Krew ба насб кардани плагинҳо бо усули стандартии дар боло тавсифшуда халал намерасонад.

Лутфан қайд кунед, ки фармон kubectl krew list танҳо плагинҳоро нишон медиҳад, ки бо истифода аз Krew насб карда шудаанд, дар ҳоле ки фармон kubectl plugin list ҳамаи плагинҳоро номбар мекунад, яъне онҳое, ки бо истифода аз Krew насб шудаанд ва онҳое, ки бо усулҳои дигар насб шудаанд.

Ҷустуҷӯи плагинҳо дар ҷои дигар

Крю як лоиҳаи ҷавон аст, ки ҳоло дар он аст рӯйхат танҳо тақрибан 30 плагинҳо. Агар шумо чизи лозимаро пайдо карда натавонед, шумо метавонед плагинҳоро дар ҷои дигар, ба монанди GitHub, пайдо кунед.

Ман тавсия медиҳам, ки ба бахши GitHub нигаред kubectl-плагинҳо. Дар он ҷо шумо даҳҳо плагинҳои дастрасро хоҳед ёфт, ки қобили тафтишанд.

Навиштани плагинҳои шахсии худ

худатон метавонед плагинҳо эҷод кунед -Ин мушкил нест. Шумо бояд файли иҷрошаванда эҷод кунед, ки он чизеро, ки ба шумо лозим аст, иҷро кунад, онро ба монанди номгузорӣ кунед kubectl-x ва тавре ки дар боло тавсиф шудааст, насб кунед.

Файл метавонад скрипти bash, скрипти python ё барномаи тартибдодашудаи GO бошад - ин муҳим нест. Ягона шарт ин аст, ки он метавонад бевосита дар системаи оператсионӣ иҷро карда шавад.

Биёед ҳоло як плагини намунавӣ эҷод кунем. Дар фасли қаблӣ шумо фармони kubectl-ро барои номбар кардани контейнерҳо барои ҳар як подк истифода бурдед. Ин фармонро ба плагин табдил додан осон аст, ки шумо метавонед бо он занг занед, масалан. kubectl img.

Файл эҷод кунед kubectl-img мазмуни зерин:

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

Акнун файлро бо иҷрошаванда созед chmod +x kubectl-img ва онро ба ягон феҳристи PATH худ интиқол диҳед. Дарҳол пас аз ин шумо метавонед плагинро истифода баред kubectl img.

Тавре зикр гардид, плагинҳои kubectl метавонанд бо ҳама гуна забони барномасозӣ ё скрипт навишта шаванд. Агар шумо скриптҳои shell-ро истифода баред, бартарии он аст, ки ба осонӣ ба kubectl аз дохили плагин занг занед. Бо вуҷуди ин, шумо метавонед плагинҳои мураккабтарро бо забонҳои воқеии барномасозӣ нависед Китобхонаи муштариёни Kubernetes. Агар шумо Go-ро истифода баред, шумо метавонед низ истифода баред китобхонаи cli-runtime, ки махсусан барои навиштани плагинҳои kubectl мавҷуд аст.

Чӣ тавр мубодилаи плагинҳои худро

Агар шумо фикр кунед, ки плагинҳои шумо метавонанд барои дигарон муфид бошанд, озодона онро дар GitHub мубодила кунед. Ҳатман онҳоро ба мавзӯъ илова кунед kubectl-плагинҳо.

Шумо инчунин метавонед дархост кунед, ки плагини шумо ба он илова карда шавад Рӯйхати Крю. Дастурҳо дар бораи чӣ гуна иҷро кардани ин дар Анборҳои GitHub.

Анҷоми фармон

Васлкунакҳо дар айни замон пуркунии худкорро дастгирӣ намекунанд. Яъне, шумо бояд номи пурраи плагин ва номи пурраи далелҳоро ворид кунед.

Анбори kubectl GitHub барои ин функсия дорад дархости кушода. Аз ин рӯ, эҳтимол дорад, ки ин хусусият дар оянда татбиқ карда шавад.

Шукрона !!!

Дар ин мавзӯъ боз чӣ хондан лозим аст:

  1. Се сатҳи автоматизатсия дар Кубернетес ва тарзи истифодаи самараноки онҳо.
  2. Кубернетес дар рӯҳияи роҳзанӣ бо қолаби амалӣ.
  3. Канали мо дар атрофи Kubernetes дар Telegram.

Манбаъ: will.com

Илова Эзоҳ