
Si w ap travay ak Kubernetes, Lè sa a, kubectl se pwobableman youn nan sèvis piblik ou plis itilize yo. Ak chak fwa ou pase anpil tan ap travay ak yon zouti sèten, li peye pou etidye li byen epi aprann kouman yo sèvi ak li efektivman.
Ekip tradui yon atik pa Daniel Weibel kote w ap jwenn konsèy ak ke trik nouvèl pou travay efektivman ak kubectl. Li pral ede w tou jwenn yon konpreyansyon pi fon nan Kubernetes.
Dapre otè a, objektif la nan atik la se fè travay chak jou ou ak Kubernetes pa sèlman pi efikas, men tou, pi agreyab!
Entwodiksyon: Ki sa ki kubectl
Anvan ou ka aprann sèvi ak kubectl pi efikas, ou bezwen jwenn yon konpreyansyon debaz sou sa li ye ak kijan li fonksyone.
Soti nan pèspektiv itilizatè a, kubectl se yon panèl kontwòl ki pèmèt ou fè operasyon Kubernetes.
Teknikman pale, kubectl se yon kliyan API Kubernetes.
Kubernetes API se yon HTTP REST API. API sa a se vrè koòdone itilizatè Kubernetes, atravè li konplètman kontwole. Sa vle di ke chak operasyon Kubernetes ekspoze kòm yon pwen final API epi yo ka fèt ak yon demann HTTP nan pwen final sa a.
Se poutèt sa, travay prensipal kubectl se fè demann HTTP nan API Kubernetes:

Kubernetes se yon sistèm konplètman oryante resous. Sa vle di ke li kenbe eta entèn resous yo ak tout operasyon Kubernetes yo se operasyon CRUD.
Ou gen kontwòl konplè sou Kubernetes lè w jere resous sa yo, epi Kubernetes kalkile sa pou w fè dapre eta aktyèl resous yo. Pou rezon sa a, referans API Kubernetes òganize kòm yon lis kalite resous ak operasyon ki asosye yo.
Ann gade yon egzanp.
Ann di ou vle kreye yon resous ReplicaSet. Pou fè sa, ou dekri ReplicaSet nan yon dosye pa non replicaset.yaml, Lè sa a, kouri lòd la:
$ kubectl create -f replicaset.yamlSa a pral kreye yon resous ReplicaSet. Men, sa k ap pase dèyè sèn nan?
Kubernetes gen yon operasyon kreyasyon ReplicaSet. Tankou nenpòt lòt operasyon, li ekspoze kòm yon pwen final API. Pwen API espesifik pou operasyon sa a sanble sa a:
POST /apis/apps/v1/namespaces/{namespace}/replicasetsOu ka jwenn pwen final API pou tout operasyon Kubernetes nan (ki gen ladan ). Pou fè yon demann aktyèl nan yon pwen final, ou dwe premye ajoute URL la sèvè API nan chemen yo pwen final ki nan lis nan referans API a.
Pakonsekan, lè ou egzekite lòd ki anwo a, kubectl voye yon demann HTTP POST nan pwen final API ki anwo a. Definisyon ReplicaSet ou bay nan dosye a replicaset.yaml, yo voye nan kò a nan demann lan.
Men ki jan kubectl travay pou tout kòmandman ki kominike avèk gwoup Kubernetes la. Nan tout ka sa yo, kubectl tou senpleman fè demann HTTP nan pwen final Kubernetes API ki apwopriye yo.
Tanpri sonje ke ou ka konplètman jere Kubernetes lè l sèvi avèk yon sèvis piblik tankou curlpa manyèlman voye demann HTTP nan API Kubernetes. Kubectl tou senpleman fè li pi fasil pou itilize API Kubernetes.
Sa a se Basics yo nan ki sa kubectl ye ak ki jan li fonksyone. Men, gen yon lòt bagay sou API Kubernetes ke chak itilizatè kubectl ta dwe konnen. Ann pran yon gade rapid nan mond enteryè Kubernetes.
Mond enteryè Kubernetes
Kubernetes konsiste de yon seri eleman endepandan ki kouri kòm pwosesis separe sou nœuds gwoup. Gen kèk konpozan kouri sou nœuds mèt, lòt moun sou nœuds travayè yo, chak eleman fè pwòp travay espesifik li yo.
Men eleman ki pi enpòtan yo sou nœuds prensipal yo:
- Vout - estoke definisyon resous yo ().
- Sèvè API — bay yon API ak jere depo.
- Manadjè kontwolè — Asire ke estati resous yo konfòme yo ak espesifikasyon yo.
- Orè — orè gous sou nœuds travayè yo.
Ak isit la se youn eleman ki pi enpòtan sou nœuds travayè yo:
- kubelet - jere lansman de resipyan sou ne k ap travay la.
Pou konprann ki jan eleman sa yo travay ansanm, ann gade nan yon egzanp.
Ann sipoze ou fèk fini kubectl create -f replicaset.yaml, apre sa kubectl te fè yon demann HTTP POST (pase definisyon resous ReplicaSet).
Kisa k ap pase nan gwoup la?
- Apre fè
kubectl create -f replicaset.yamlSèvè API a estoke definisyon resous ReplicaSet ou a nan depo:
- Apre sa, kontwolè ReplicaSet lanse nan manadjè kontwolè a, ki okipe kreyasyon, modifikasyon ak efase resous ReplicaSet:

- Kontwolè ReplicaSet la kreye yon definisyon gous pou chak kopi ReplicaSet (dapre modèl pod la nan definisyon ReplicaSet la) epi estoke yo nan depo:

- Planifikatè a lanse, swiv gous ki poko plase nan okenn nœud travayè yo:

- Planifikatè a chwazi yon ne travayè apwopriye pou chak gous epi ajoute enfòmasyon sa yo nan definisyon gous la nan magazen an:

- Sou nœud travayè yo ki plase gous la, Kubelet lanse, li swiv gous yo asiyen nan nœud sa a:

- Kubelet la li definisyon gous la nan depo epi li enstwi yon tansyon veso, tankou Docker, pou lanse resipyan sou ne:

Anba a se yon vèsyon tèks deskripsyon sa a.
Sèvè API a trete demann API pou pwen final kreyasyon ReplicaSet la. Sèvè API a otantifye demann lan epi estoke definisyon resous ReplicaSet la nan depo.
Evènman sa a kòmanse kontwolè ReplicaSet la, ki se yon sous-pwosesis manadjè kontwolè a. Kontwolè ReplicaSet kontwole kreyasyon, mete ajou, ak efase resous ReplicaSet nan magazen an epi li resevwa yon notifikasyon evènman lè sa rive.
Travay kontwolè ReplicaSet la se asire kantite gous ReplicaSet ki nesesè yo egziste. Nan egzanp nou an, pa gen okenn gous ankò, kidonk kontwolè ReplicaSet la kreye definisyon gous sa yo (dapre modèl gous nan definisyon ReplicaSet la) epi estoke yo nan depo.
Kreyasyon nouvo gous deklanche pa yon pwogramè ki kenbe tras de definisyon gous ki poko pwograme pou nœuds travayè yo. Planifikatè a chwazi yon ne travayè apwopriye pou chak gous epi mete ajou definisyon gous yo nan depo a.
Remake byen ke jiska pwen sa a, pa gen okenn kòd chaj travay ki te kouri nenpòt kote nan gwoup la. Tout sa ki te fèt jiskaprezan - sa a se kreyasyon an ak aktyalizasyon nan resous nan depo a sou ne mèt la.
Dènye evènman an deklannche Kubelets, ki kontwole gous yo pwograme pou nœuds travayè yo. Kubelet nan ne travayè kote gous ReplicaSet ou yo enstale yo dwe bay enstriksyon tansyon veso a, tankou Docker, pou telechaje imaj veso ki nesesè yo epi kouri yo.
Nan pwen sa a, aplikasyon ReplicaSet ou a finalman ap kouri!
Wòl API Kubernetes
Kòm ou te wè nan egzanp anvan an, eleman Kubernetes (eksepte pou sèvè API ak depo) gade pou chanjman nan resous nan depo ak chanje enfòmasyon sou resous nan depo.
Natirèlman, eleman sa yo pa kominike avèk depo a dirèkteman, men sèlman atravè API Kubernetes la.
Konsidere egzanp sa yo:
- Kontwolè ReplicaSet la sèvi ak pwen final API a ak paramèt
watchpou kontwole chanjman nan resous ReplicaSet yo. - Kontwolè ReplicaSet la sèvi ak pwen final API a (kreye gous) pou kreye gous.
- Scheduler itilize pwen final API (edit gous) pou mete ajou gous yo ak enfòmasyon sou ne travayè yo chwazi a.
Kòm ou ka wè, sa a se menm API ke kubectl jwenn aksè. Sèvi ak menm API a pou konpozan entèn ak itilizatè ekstèn se yon konsèp fondamantal nan konsepsyon Kubernetes.
Koulye a, nou ka rezime ki jan Kubernetes travay:
- Depo magazen yo eta, se sa ki, resous Kubernetes.
- Sèvè API a bay yon koòdone nan depo a nan fòm Kubernetes API a.
- Tout lòt konpozan ak itilizatè Kubernetes li, obsève, ak manipile eta Kubernetes (resous) atravè API a.
Lè w konnen konsèp sa yo, sa ap ede w konprann kubectl pi byen epi pou w jwenn pi plis nan li.
Koulye a, kite a gade nan kèk konsèy espesifik ak ke trik nouvèl ki pral ede amelyore pwodiktivite ou ak kubectl.
1. Akselere opinyon lè l sèvi avèk fini lòd
Youn nan teknik ki pi itil, men souvan neglije, pou amelyore pèfòmans ak kubectl se fini lòd.
Fini kòmandman pèmèt ou ranpli otomatikman pati nan kòmandman kubectl lè l sèvi avèk kle Tab la. Sa a ap travay pou kòmandman, opsyon, ak agiman, ki gen ladan yon bagay konplèks tankou non resous.
Gade ki jan fini kòmand kubectl travay:

Fini kòmand ap travay pou kokiy Bash ak Zsh.
gen enstriksyon detaye pou mete kanpe otokonplesyon, men anba a nou pral bay yon ti ekstrè.
Ki jan fini lòd travay
Fini kòmand se yon karakteristik koki ki travay lè l sèvi avèk yon script fini. Yon script ekstansyon se yon script shell ki defini konpòtman an nan yon ekstansyon pou yon lòd espesifik.
Kubectl otomatikman jenere ak pwodui script ekstansyon pou Bash ak Zsh lè l sèvi avèk kòmandman sa yo:
$ kubectl completion bashИли:
$ kubectl completion zshNan teyori, li se ase konekte pwodiksyon an nan kòmandman sa yo nan koki kòmand ki apwopriye a pou ke kubectl ka konplete kòmandman yo.
На практике — способ подключения отличается для Bash (включая различия между Linux и MacOS) и Zsh. Ниже мы рассмотрим все эти варианты.
Bash в Linux
Script fini Bash la depann de pake bash-completion, kidonk ou bezwen enstale li an premye:
$ sudo apt-get install bash-completionИли:
$ yum install bash-completionOu ka teste ke pake a enstale avèk siksè lè l sèvi avèk lòd sa a:
$ type _init_completion Si sa a pwodwi kòd fonksyon koki, Lè sa a, bash-completion enstale kòrèkteman. Si kòmandman an bay yon erè "Pa jwenn", ou bezwen ajoute liy sa a nan dosye w la ~ / .bashrc:
$ source /usr/share/bash-completion/bash_completion Èske li nesesè pou ajoute liy sa a nan dosye a ~ / .bashrc oswa ou pa depann de manadjè pake ou itilize pou enstale bash-completion. Sa nesesè pou APT, men se pa pou YUM.
Apre enstale bash-completion, ou bezwen konfigirasyon tout bagay pou ke script fini kubectl la pèmèt nan tout sesyon koki.
Youn nan fason yo fè sa se ajoute liy sa a nan dosye a ~ / .bashrc:
source <(kubectl completion bash) Yon lòt fason se ajoute script ekstansyon kubectl nan anyè a /etc/bash_completion.d (kreye li si li pa egziste):
$ kubectl completion bash >/etc/bash_completion.d/kubectl Tout scripts ajoute nan katalòg la /etc/bash_completion.d yo otomatikman enkli nan bash-completion.
Tou de opsyon yo egalman aplikab.
Apre rekòmanse koki a, fini lòd kubectl ap travay.
Bash sou MacOS
Sou MacOS konfigirasyon an se yon ti kras pi konplike. Reyalite a se ke pa default, MacOS itilize vèsyon Bash 3.2, ak script kubectl autocompletion mande pou yon vèsyon Bash nan omwen 4.1 epi li pa travay nan Bash 3.2.
Gen pwoblèm lisans ki asosye ak lè l sèvi avèk yon vèsyon demode nan Bash sou MacOS. Bash vèsyon 4 gen lisans anba GPLv3, ki pa sipòte pa Apple.
Pou konfigirasyon kubectl autocompletion sou MacOS, ou bezwen enstale yon vèsyon ki pi resan nan Bash. Ou kapab tou mete ajou Bash la kòm kokiy default ou a, ki pral sove ou anpil pwoblèm nan tan kap vini an. Li pa difisil, detay yo bay nan atik la "'.
Anvan w kontinye, asire w ke w ap itilize yon dènye vèsyon Bash (tcheke pwodiksyon an bash --version).
Bash fini script varye selon pwojè , kidonk ou bezwen enstale li an premye.
Ou ka enstale bash-completion lè l sèvi avèk :
$ brew install bash-completion@2 Isit la @2 kanpe pou bash-completion vèsyon 2. kubectl otocompletion mande pou bash-completion v2, ak bash-completion v2 mande pou yon minimòm de Bash vèsyon 4.1.
Kòmand pwodiksyon brew-install gen yon seksyon Opozisyon, ki espesifye sa ki bezwen ajoute nan fichye a ~/.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" Sepandan, mwen rekòmande pou ajoute liy sa yo pa ~/.bash_profile, ak nan ~/.bashrc. Nan ka sa a, autocompletion ap disponib pa sèlman nan prensipal la, men tou nan kokiy kòmand timoun yo.
Apre rekòmanse kokiy lòd la, ou ka verifye enstalasyon an kòrèk lè l sèvi avèk lòd sa a:
$ type _init_completionSi ou wè yon fonksyon koki nan pwodiksyon an, Lè sa a, tout bagay se configuré kòrèkteman.
Koulye a, nou bezwen asire ke kubectl autocompletion pèmèt nan tout sesyon yo.
Youn nan fason yo se ajoute liy sa a nan ou ~/.bashrc:
source <(kubectl completion bash) Dezyèm fason an se ajoute yon script autocomplete nan katab la /usr/local/etc/bash_completion.d:
$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectlMetòd sa a pral travay sèlman si ou enstale bash-completion lè l sèvi avèk Homebrew. Nan ka sa a, bash-completion chaje tout scripts nan anyè sa a.
Si ou enstale , Lè sa a, pa gen okenn nesesite pou fè etap anvan an, depi script autocompletion yo pral otomatikman mete nan katab la. /usr/local/etc/bash_completion.d pandan enstalasyon. Nan ka sa a, kubectl autocompletion ap kòmanse travay le pli vit ke ou enstale bash-completion.
Kòm yon rezilta, tout opsyon sa yo ekivalan.
zsh
Scripts Autocompletion pou Zsh pa mande pou okenn depandans. Tout sa ou bezwen fè se pèmèt yo lè ou chaje kokiy lòd la.
Ou ka fè sa lè w ajoute yon liy sou ou ~/.zshrc dosye:
source <(kubectl completion zsh) Si ou resevwa yon erè not found: compdef apre rekòmanse koki ou a, ou bezwen pèmèt fonksyon an entegre compdef. Ou ka pèmèt li lè w ajoute li nan kòmansman dosye w la ~/.zshrc sa yo:
autoload -Uz compinit
compinit2. Byen vit wè espesifikasyon resous yo
Lè ou kreye definisyon resous YAML, ou bezwen konnen jaden yo ak siyifikasyon yo pou resous sa yo. Yon kote pou chèche enfòmasyon sa a se nan referans API, ki gen espesifikasyon konplè pou tout resous yo.
Sepandan, chanje nan navigatè entènèt la chak fwa ou bezwen fè rechèch pou yon bagay se konvenyan. Se poutèt sa, kubectl bay lòd la kubectl explain, ki montre espesifikasyon tout resous yo nan tèminal ou a.
Fòma lòd la se jan sa a:
$ kubectl explain resource[.field]...Kòmandman an pral pwodwi spesifikasyon resous oswa jaden yo mande a. Enfòmasyon ki parèt idantik ak sa ki nan manyèl API a.
Pa default kubectl explain montre sèlman premye nivo nan nidifikasyon nan jaden.
Gade sa li sanble .
Ou ka montre tout pye bwa a si ou ajoute opsyon a --recursive:
$ kubectl explain deployment.spec --recursiveSi ou pa konnen egzakteman ki resous ki nesesè, ou ka montre yo tout ak lòd sa a:
$ kubectl api-resources Kòmand sa a montre non resous yo nan fòm pliryèl, pa egzanp. deployments olye pou yo deployment. Li montre tou non kout la, pou egzanp deploy, pou resous sa yo ki genyen li. Pa enkyete sou diferans sa yo. Tout opsyon nonmen sa yo ekivalan pou kubectl. Sa vle di, ou ka itilize nenpòt nan yo pou kubectl explain.
Tout kòmandman sa yo ekivalan:
$ kubectl explain deployments.spec
# или
$ kubectl explain deployment.spec
# или
$ kubectl explain deploy.spec3. Sèvi ak yon fòma pèsistans yap ogmante jiska kolòn personnalisé
Default fòma pwodiksyon lòd 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 78dFòma sa a pratik, men li gen yon kantite enfòmasyon limite. Konpare ak fòma definisyon resous konplè a, se sèlman kèk jaden ki parèt isit la.
Nan ka sa a, ou ka itilize yon fòma pèsistans yap ogmante jiska kolòn personnalisé. Li pèmèt ou detèmine ki done pou pwodiksyon an. Ou ka montre nenpòt jaden resous kòm yon kolòn separe.
Sèvi ak yon fòma koutim detèmine lè l sèvi avèk opsyon sa yo:
-o custom-columns=<header>:<jsonpath>[,<header>:<jsonpath>]... Ou ka defini chak kolòn pwodiksyon kòm yon pè <header>:<jsonpath>kote <header> se non kolòn nan, epi <jsonpath> — yon ekspresyon ki defini yon jaden resous.
Ann gade nan yon egzanp senp:
$ kubectl get pods -o custom-columns='NAME:metadata.name'
NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4Pwodiksyon an gen yon kolòn ak non gous yo.
Ekspresyon opsyon an chwazi non gous yo nan jaden an metadata.name. Sa a se paske non gous la defini nan jaden non timoun lan metadata nan deskripsyon resous gous la. Ou ka jwenn plis detay nan oswa tape lòd la kubectl explain pod.metadata.name.
Koulye a, an n di ou vle ajoute yon kolòn siplemantè nan pwodiksyon an, pou egzanp montre ne chak gous ap kouri sou. Pou fè sa, ou ka tou senpleman ajoute spesifikasyon kolòn ki apwopriye a nan opsyon kolòn koutim yo:
$ 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 Ekspresyon an chwazi non ne a soti spec.nodeName — lè yo mete yon gous nan yon ne, non li ekri nan jaden an spec.nodeName spesifikasyon resous gous. Ou ka jwenn plis enfòmasyon detaye nan pwodiksyon an kubectl explain pod.spec.nodeName.
Tanpri sonje ke jaden resous Kubernetes yo sansib.
Ou ka wè nenpòt jaden resous kòm yon kolòn. Jis revize spesifikasyon resous la epi eseye li ak nenpòt jaden ou renmen.
Men, anvan, ann pran yon gade pi pre nan ekspresyon seleksyon jaden.
Ekspresyon JSONPath
Ekspresyon pou chwazi jaden resous yo baze sou .
JSONPath se yon lang pou rekipere done ki soti nan dokiman JSON. Chwazi yon sèl jaden se ka itilizasyon ki pi senp pou JSONPath. Li gen anpil , ki gen ladan seleksyon, filtè ak sou sa.
Kubectl eksplike sipòte yon kantite limite nan karakteristik JSONPath. Yo dekri posiblite yo ak egzanp itilizasyon yo anba a:
# Выбрать все элементы списка
$ 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'Operatè [] a espesyalman enpòtan. Anpil jaden resous Kubernetes yo se lis, ak operatè sa a pèmèt ou chwazi manm nan lis sa yo. Li souvan itilize ak yon joker tankou [*] pou chwazi tout eleman nan yon lis.
Egzanp aplikasyon yo
Posiblite yo pou itilize yon fòma pèsistans yap ogmante jiska kolòn personnalisé sont alkole, menm jan ou kapab afficher tout jaden ou combinaison de jaden resous nan pèsistans yap ogmante jiska. Men kèk aplikasyon echantiyon, men santi yo lib pou eksplore yo tèt ou epi jwenn aplikasyon ki travay pou ou.
- Montre imaj veso pou gous:
$ 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 wordpressKòmand sa a montre non imaj veso yo pou chak gous.
Sonje ke yon gous ka genyen plizyè resipyan, Lè sa a, non imaj yo pral parèt sou yon liy, separe pa vigil.
- Montre zòn disponiblite ne:
$ 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-1bKòmand sa a itil si gwoup ou a òganize nan yon nwaj piblik. Li montre zòn disponiblite pou chak ne.
Zòn disponiblite se yon konsèp nwaj ki limite zòn replikasyon an nan yon rejyon jeyografik.
Zòn disponiblite pou chak ne yo jwenn atravè yon etikèt espesyal - . Si gwoup la ap kouri nan yon nwaj piblik, yo kreye etikèt sa a otomatikman epi ranpli ak non zòn disponiblite yo pou chak ne.
Etikèt yo pa fè pati spesifikasyon resous Kubernetes, kidonk ou p ap jwenn enfòmasyon sou yo . Sepandan, yo ka wè (tankou nenpòt lòt etikèt) si ou mande enfòmasyon sou nœuds yo nan fòma YAML oswa JSON:
$ kubectl get nodes -o yaml # или $ kubectl get nodes -o jsonSa a se yon bon fason yo aprann plis sou resous, anplis aprann espesifikasyon resous yo.
4. Fasil chanje ant grap ak espas non
Lè kubectl fè yon demann nan API Kubernetes, li premye li fichye kubeconfig la pou jwenn tout paramèt ki nesesè pou koneksyon an.
Pa default dosye kubeconfig la se ~/.kube/config. Tipikman, dosye sa a kreye oswa mete ajou pa yon lòd espesyal.
Lè w ap travay ak plizyè gwoup, dosye kubeconfig ou a gen paramèt pou konekte ak tout gwoup sa yo. Ou bezwen yon fason pou di kòmandman kubectl ak ki gwoup w ap travay.
Nan yon gwoup, ou ka kreye plizyè espas non—yon kalite grap vityèl nan yon grap fizik. Kubectl detèmine tou ki espas non yo itilize ki baze sou dosye kubeconfig la. Sa vle di ou bezwen tou yon fason pou di kòmandman kubectl ki espas non pou travay avèk yo.
Nan chapit sa a nou pral eksplike kijan li fonksyone ak kijan pou fè li fonksyone byen.
Remake byen ke ou ka gen plizyè dosye kubeconfig ki nan lis nan varyab anviwònman KUBECONFIG la. Nan ka sa a, tout dosye sa yo pral konbine nan yon sèl konfigirasyon komen nan ègzekutabl. Ou kapab tou chanje dosye default kubeconfig la lè w kouri kubectl ak paramèt la --kubeconfig. Gade .
dosye kubeconfig yo
Ann wè ki sa egzakteman fichye kubeconfig la genyen:

Kòm ou ka wè, fichye kubeconfig la gen yon seri kontèks. Kontèks konsiste de twa eleman:
- Cluster — API URL nan sèvè gwoup la.
- Itilizatè - kalifikasyon otantifikasyon itilizatè nan gwoup la.
- Espas non - espas non yo itilize lè w rantre nan gwoup la.
Nan pratik, yo souvan itilize yon kontèks pou chak gwoup nan kubeconfig yo. Sepandan, ou ka gen plizyè kontèks pou chak gwoup, diferansye pa itilizatè oswa espas non. Sepandan, konfigirasyon milti-kontèks sa a pa komen, kidonk gen anjeneral yon kat youn-a-yon ant grap ak kontèks.
Nan nenpòt moman, youn nan kontèks yo se aktyèl:

Lè kubectl li yon fichye konfigirasyon, li toujou pran enfòmasyon ki soti nan kontèks aktyèl la. Nan egzanp ki anwo a, kubectl pral konekte ak gwoup Hare la.
An konsekans, pou chanje nan yon lòt gwoup, ou bezwen chanje kontèks aktyèl la nan fichye kubeconfig la:

Koulye a, kubectl pral konekte ak gwoup Fox la.
Pou chanje nan yon espas non diferan nan menm gwoup la, ou bezwen chanje valè eleman espas non an pou kontèks aktyèl la:

Nan egzanp ki anwo a, kubectl pral sèvi ak espas non Prod gwoup Fox la (anvan yo te mete espas non Tès la).
Remake byen ke kubectl bay opsyon tou --cluster, --user, --namespace и --context, ki pèmèt ou ranplase eleman endividyèl yo ak kontèks aktyèl la tèt li, kèlkeswa sa ki mete nan kubeconfig la. Gade kubectl options.
Nan teyori, ou ka manyèlman chanje anviwònman yo nan kubeconfig la. Men, li enkonvenyan. Pou senplifye operasyon sa yo, gen divès kalite sèvis piblik ki pèmèt ou chanje paramèt otomatikman.
Sèvi ak kubectx
Yon sèvis piblik trè popilè pou chanje ant grap ak espas non.
Sèvis piblik la bay kòmandman kubectx и kubens pou chanje kontèks aktyèl la ak espas non respektivman.
Kòm mansyone, chanje kontèks aktyèl la vle di chanje gwoup la si ou gen sèlman yon kontèks pou chak gwoup.
Men yon egzanp sou kouri kòmandman sa yo:

Esansyèlman, kòmandman sa yo tou senpleman edite fichye kubeconfig la jan sa dekri anwo a.
enstale kubectx, swiv enstriksyon yo sou
Tou de kòmand yo sipòte otokonplesyon nan kontèks ak non espas non, ki elimine nesesite pou tape yo nèt. Enstriksyon pou mete kanpe otokonplesyon .
Yon lòt karakteristik itil kubectx se . Li travay ansanm ak sèvis piblik la , ki dwe enstale separeman. Enstale fzf otomatikman fè mòd entèaktif disponib nan kubectx. Entèaktif, ou ka chwazi kontèks ak espas non atravè koòdone rechèch entèaktif gratis fzf bay.
Sèvi ak alyas kokiy
Ou pa bezwen zouti separe pou chanje kontèks aktyèl la ak espas non paske kubectl bay kòmandman pou sa a tou. Wi, ekip kubectl config bay soukòmand pou edite fichye kubeconfig.
Men kèk nan yo:
kubectl config get-contexts: montre tout kontèks;kubectl config current-context: jwenn kontèks aktyèl la;kubectl config use-context: chanje kontèks aktyèl la;kubectl config set-context: Chanje eleman kontèks la.
Sepandan, lè l sèvi avèk kòmandman sa yo dirèkteman pa trè pratik paske yo long. Ou ka fè alyas koki pou yo ki fasil pou egzekite.
Mwen te kreye yon seri alyas ki baze sou kòmandman sa yo ki bay fonksyonalite ki sanble ak kubectx. Isit la ou ka wè yo an aksyon:

Remake byen ke alyas itilize fzf pou bay yon koòdone rechèch entèaktif gratis (tankou mòd entèaktif kubectx a). Sa vle di ou bezwen pou itilize alyas sa yo.
Men definisyon alyas tèt yo:
# Получить текущий контекст
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/^..//")"' Pou mete alyas sa yo ou bezwen ajoute definisyon ki anwo yo nan dosye w la ~/.bashrc oswa ~/.zshrc epi rekòmanse kokiy ou a.
Sèvi ak grefon
Kubectl pèmèt ou chaje grefon ki egzekite menm jan ak kòmandman debaz yo. Ou ka, pou egzanp, enstale plugin kubectl-foo a epi kouri li pa egzekite lòd la kubectl foo.
Li ta bon pou chanje kontèks la ak espas non an nan fason sa a, pou egzanp pa kouri kubectl ctx pou chanje kontèks ak kubectl ns pou chanje espas non an.
Mwen te ekri de grefon ki fè sa:
Travay grefon yo baze sou alyas nan seksyon anvan an.
Men ki jan yo travay:

Remake byen ke grefon yo itilize fzf pou bay yon koòdone rechèch entèaktif gratis (tankou mòd entèaktif kubectx a). Sa vle di ou bezwenpou itilize alyas sa yo.
Pou enstale grefon, ou bezwen telechaje scripts koki yo te rele и nan nenpòt anyè nan varyab PATH ou a epi fè yo ègzekutabl ak egzanp. chmod +x. Touswit apre sa ou pral kapab itilize kubectl ctx и kubectl ns.
5. redwi D' ak autoaliases
Alyas Shell yo se yon bon fason pou pi vit tape. Pwojè gen apeprè 800 rakoursi pou kòmandman kubectl debaz yo.
Ou ta ka mande - ki jan ou sonje 800 alyas? Men, ou pa bezwen sonje yo tout, paske yo bati dapre yon konplo senp, ki bay anba a:

Pou egzanp:
- kgpooyaml - kubectl jwenn gous oyaml
- ksysgsvcw — kubectl -n kube-system jwenn svc w
- ksysrmcm -kubectl -n kube-system rm cm
- kgdepallsl - kubectl jwenn deplwaman tout sl
Kòm ou ka wè, alyas yo fèt ak eleman, chak nan yo ki reprezante yon eleman espesifik nan lòd la kubectl. Chak alyas ka gen yon sèl eleman pou kòmandman baz, operasyon, ak resous, ak plizyè eleman pou paramèt. Ou tou senpleman "peple" eleman sa yo de goch a dwat dapre dyagram ki anwo a.
Dyagram detaye aktyèl la se nan . Se la ou ka jwenn tou.
Pou egzanp, alyas kgpooyamlall ekivalan a kòmandman an kubectl get pods -o yaml --all-namespaces.
Lòd relatif opsyon yo pa enpòtan: lòd kgpooyamlall ekivalan a kòmandman an kgpoalloyaml.
Ou pa bezwen sèvi ak tout eleman kòm alyas. Pa egzanp k, kg, klo, ksys, kgpo ka itilize tou. Anplis, ou ka konbine alyas ak kòmandman regilye oswa opsyon sou liy lòd la:
Pou egzanp:
- Olye pou yo
kubectl proxyou ka ekrik proxy. - Olye pou yo
kubectl get rolesou ka ekrikg roles(kounye a pa gen okenn alyas pou resous Wòl yo). - Pou jwenn done pou yon gous espesifik, ou ka itilize kòmandman an
kgpo my-pod — kubectl get pod my-pod.
Tanpri sonje ke kèk alyas mande pou yon agiman liy lòd. Pou egzanp, alyas kgpol vle di kubectl get pods -l. Opsyon -l mande pou yon agiman - yon spesifikasyon etikèt. Si ou itilize yon alyas li pral sanble kgpol app=ui.
Paske gen kèk alyas ki mande agiman, yo dwe itilize alyas a, f ak l an dènye.
An jeneral, yon fwa ou jwenn pann nan konplo sa a, ou ka entwitif dériver alyas nan kòmandman yo ou vle egzekite epi sove anpil tan tape.
Enstalasyon
Pou enstale kubectl-aliases, ou bezwen telechaje fichye a soti nan GitHub epi mete li nan dosye a ~/.bashrc oswa ~/.zshrc:
source ~/.kubectl_aliasesKonplete otomatik
Kòm nou te di anvan, ou souvan ajoute mo adisyonèl nan yon alyas sou liy lòd la. Pa egzanp:
$ kgpooyaml test-pod-d4b77b989Si ou itilize fini kòmand kubectl, pwobableman ou te itilize otokonplesyon pou bagay tankou non resous yo. Men, èske sa ka fè lè yo itilize alyas?
Sa a se yon kesyon trè enpòtan paske si autocompletion pa travay, ou pral pèdi kèk nan benefis ki genyen nan alyas.
Repons lan depann de ki kokiy w ap itilize:
- Pou Zsh, fini alyas travay soti nan bwat la.
- Pou Bash, malerezman, gen kèk travay oblije jwenn otokonplesyon travay.
Pèmèt autocompletion pou alyas nan Bash
Pwoblèm nan ak Bash se ke li eseye ranpli (chak fwa ou peze Tab) alyas la, pa kòmandman ke alyas la refere a (tankou Zsh fè, pou egzanp). Kòm ou pa gen scripts fini pou tout 800 alyas, otocompletion pa travay.
Pwojè bay yon solisyon jeneral nan pwoblèm sa a. Li konekte ak mekanis fini pou alyas, entènman elaji alyas la nan yon lòd, epi retounen opsyon fini pou kòmandman an ranpli. Sa vle di ke padding pou yon alyas konpòte egzakteman menm jan ak yon kòmandman konplè.
Nan sa ki annapre yo, mwen pral premye eksplike ki jan yo enstale complete-alias ak Lè sa a, ki jan yo configured li pou pèmèt fini pou tout alyas kubectl.
Enstale complete-alias
Premye a tout, konplè-alyas depann sou . Поэтому перед установкой complete-alias необходимо убедиться, что bash-completion установлен. Инструкции по установке были даны ранее для Linux и MacOS.
Nòt enpòtan pou itilizatè MacOS: Menm jan ak script kubectl autocompletion, complete-alias pa travay ak Bash 3.2, ki se default sou MacOS. An patikilye, alyas konplè depann sou bash-completion v2 (brew install bash-completion@2), ki mande pou omwen Bash 4.1. Sa vle di ke pou itilize alyas konplè sou MacOS ou bezwen enstale yon vèsyon pi nouvo nan Bash.
Ou bezwen telechaje script la nan epi mete li nan dosye w la ~/.bashrc:
source ~/bash_completion.shApre rdemare koki a, konplè-alias yo pral konplètman enstale.
Pèmèt autocompletion pou alyas kubectl
Teknikman konplè-alias bay yon fonksyon wrapper _complete_alias. Fonksyon sa a tcheke alyas la epi retounen sijesyon pou konplete kòmandman alyas la.
Pou asosye yon fonksyon ak yon alyas espesifik, ou bezwen sèvi ak mekanis Bash bati-an , pou enstale _complete_alias kòm yon fonksyon fini alyas.
Kòm yon egzanp, ann pran alyas k a, ki vle di kòmand nan kubectl. enstale _complete_alias Kòm yon fonksyon konpleman pou alyas sa a, ou ta dwe kouri lòd sa a:
$ complete -F _complete_alias k Rezilta a se ke chak fwa ou ranpli otomatikman yon alyas k, yo rele fonksyon an _complete_alias, ki tcheke alyas la epi retounen sijesyon pou konplete lòd la kubectl.
Kòm yon dezyèm egzanp, ann pran alyas la kg, ki vle di kubectl get:
$ complete -F _complete_alias kg Jis tankou nan egzanp anvan an, lè ou ranpli otomatikman kg, ou jwenn menm sijesyon yo fini ke ou ta jwenn pou kubectl get.
Remake byen ke ou ka itilize complete-alias pou nenpòt alyas sou sistèm ou an.
Se poutèt sa, pou pèmèt autocompletion pou tout alyas kubectl, ou bezwen kouri lòd ki anwo a pou chak nan yo. Frag ki anba la a fè egzakteman sa a, depi ou te mete kubectl-alyas yo ~/.kubectl-aliases:
for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases);
do
complete -F _complete_alias "$_a"
done Moso kòd sa a bezwen mete nan ou ~/.bashrc, rekòmanse kokiy lòd la ak otokonplesyon ap vin disponib pou tout 800 alyas kubectl.
6. Pwolonje kubectl ak grefon
Kòmanse nan , kubectl sipòte , ki pèmèt ou elaji fonksyon li yo ak kòmandman adisyonèl.
Si ou abitye ak , Lè sa a, grefon kubectl yo bati sou menm prensip la.
Nan chapit sa a, nou pral kouvri ki jan yo enstale grefon, ki kote yo jwenn yo, ak ki jan yo kreye grefon pwòp ou yo.
Enstale grefon
Plugins Kubectl yo distribye kòm senp dosye ègzèkutabl ak non an tankou kubectl-x. Prefiks kubectl- se obligatwa, ki te swiv pa yon nouvo soukòmand kubectl ki pèmèt ou rele Plugin la.
Pa egzanp, plugin alo a pral distribye kòm yon dosye ki rele kubectl-hello.
Pou enstale Plugin la, ou bezwen kopye fichye a kubectl-x nan nenpòt anyè nan PATH ou a epi fè li ègzekutabl, pou egzanp avèk chmod +x. Touswit apre sa ou ka rele plugin a ak kubectl x.
Ou ka itilize lòd sa a pou lis tout grefon ki enstale kounye a sou sistèm ou a:
$ kubectl plugin listKòmand sa a pral montre tou avètisman si ou gen plizyè grefon ak menm non an, oswa si gen yon dosye grefon ki pa ègzèkutabl.
Jwenn ak enstale grefon lè l sèvi avèk Krew
Plugins Kubectl yo ka pataje oswa itilize ankò tankou pakè lojisyèl. Men, ki kote ou ka jwenn grefon ke lòt moun te pataje?
vize bay yon solisyon inifye pou pataje, rechèch, enstale ak jere grefon kubectl. Pwojè a rele tèt li yon "manadjè pake pou grefon kubectl" (Krew se menm jan ak ).
Krew se yon lis grefon kubectl ke ou ka chwazi epi enstale. An menm tan an, Krew se tou yon plugin pou kubectl.
Sa vle di ke enstale Krew travay esansyèlman tankou enstale nenpòt lòt plugin kubectl. Ou ka jwenn enstriksyon detaye nan .
Kòmandman Krew ki pi enpòtan yo se:
# Поиск в списке плагинов
$ kubectl krew search [<query>]
# Посмотреть информацию о плагине
$ kubectl krew info <plugin>
# Установить плагин
$ kubectl krew install <plugin>
# Обновить все плагины до последней версии
$ kubectl krew upgrade
# Посмотреть все плагины, установленные через Krew
$ kubectl krew list
# Деинсталлировать плагин
$ kubectl krew remove <plugin>Tanpri sonje ke enstale grefon lè l sèvi avèk Krew pa entèfere ak enstale grefon lè l sèvi avèk metòd estanda ki dekri pi wo a.
Tanpri sonje ke kòmandman an kubectl krew list sèlman montre grefon ki te enstale lè l sèvi avèk Krew, tandiske kòmandman an kubectl plugin list lis tout grefon, se sa ki enstale lè l sèvi avèk Krew ak sa ki enstale pa lòt metòd.
Jwenn Plugins yon lòt kote
Krew se yon pwojè jèn, kounye a nan li sèlman apeprè 30 grefon. Si ou pa ka jwenn sa ou bezwen, ou ka jwenn grefon yon lòt kote, tankou GitHub.
Mwen rekòmande gade nan seksyon GitHub la . La ou pral jwenn plizyè douzèn grefon ki disponib ki vo tcheke deyò.
Ekri pwòp grefon ou yo
ou kapab tèt ou - Li pa difisil. Ou bezwen kreye yon ègzèkutabl ki fè sa ou bezwen, non li tankou kubectl-x epi enstale jan sa dekri anwo a.
Fichye a ta ka yon script bash, yon script python, oswa yon aplikasyon GO konpile - li pa enpòtan. Sèl kondisyon an se ke li ka dirèkteman egzekite nan sistèm nan fonksyone.
Ann kreye yon egzanp plugin kounye a. Nan seksyon anvan an, ou te itilize kòmandman kubectl pou lis resipyan yo pou chak gous. Li fasil pou vire kòmandman sa a nan yon plugin ke ou ka rele ak egzanp. kubectl img.
Kreye yon fichye kubectl-img kontni sa a:
#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image' Koulye a, fè dosye a ègzèkutabl ak chmod +x kubectl-img epi deplase li nan nenpòt anyè nan PATH ou a. Touswit apre sa ou ka itilize plugin a kubectl img.
Kòm mansyone, grefon kubectl ka ekri nan nenpòt lang pwogramasyon oswa scripting. Si w ap itilize scripts kokiy, avantaj ki genyen pou w ka rele fasil kubectl nan Plugin la. Sepandan, ou ka ekri grefon pi konplèks nan lang pwogramasyon reyèl lè l sèvi avèk . Si w ap itilize Go, ou ka itilize tou , ki egziste espesyalman pou ekri grefon kubectl.
Ki jan yo pataje grefon ou yo
Si ou panse grefon ou yo ka itil lòt moun, santi yo lib pou pataje li sou GitHub. Asire w ou ajoute yo nan sijè a .
Ou ka mande tou pou ajoute plugin ou a . Enstriksyon sou kijan pou fè sa a se nan .
Kòmandman fini
Plugins pa sipòte kounye a otokonplesyon. Sa vle di, ou dwe antre non konplè plugin a ak non plen agiman yo.
GitHub kubectl depo pou fonksyon sa a genyen . Se konsa, li posib ke karakteristik sa a pral aplike nenpòt moman nan tan kap vini an.
Bon chans!!!
Ki lòt bagay pou li sou sijè a:
- .
- .
- .
Sous: www.habr.com







