timu Kubernetes aaS kuchokera ku Mail.ru adamasulira nkhani ya Daniel Weibel momwe mungapezere malangizo ndi zidule zogwirira ntchito bwino ndi kubectl. Zikuthandizaninso kumvetsetsa mwakuya za Kubernetes.
Malinga ndi wolemba, cholinga cha nkhaniyi ndikupangitsa kuti ntchito yanu ya tsiku ndi tsiku ndi Kubernetes ikhale yabwino kwambiri, komanso yosangalatsa!
Kuchokera pamawonedwe a wogwiritsa ntchito, kubectl ndi gulu lowongolera lomwe limakupatsani mwayi wochita ntchito za Kubernetes.
Mwaukadaulo, kubectl ndi kasitomala wa Kubernetes API.
Kubernetes API ndi HTTP REST API. API iyi ndi mawonekedwe enieni a Kubernetes, omwe amayendetsedwa kwathunthu. Izi zikutanthauza kuti ntchito iliyonse ya Kubernetes imawululidwa ngati mapeto a API ndipo ikhoza kupangidwa ndi pempho la HTTP kumapeto kwake.
Chifukwa chake, ntchito yayikulu ya kubectl ndikupanga zopempha za HTTP ku Kubernetes API:
Kubernetes ndi njira yokhazikika pazinthu zonse. Izi zikutanthauza kuti imasunga zinthu zamkati zamkati ndipo ntchito zonse za Kubernetes ndi ntchito za CRUD.
Izi zipanga chida cha ReplicaSet. Koma chimachitika ndi chiyani kuseri kwa zochitika?
Kubernetes ali ndi ntchito yopanga ReplicaSet. Monga ntchito ina iliyonse, imawululidwa ngati mapeto a API. Mapeto enieni a API pa ntchitoyi akuwoneka motere:
POST /apis/apps/v1/namespaces/{namespace}/replicasets
Zomaliza za API pazochita zonse za Kubernetes zitha kupezeka pa Chidziwitso cha API (kuphatikiza mapeto pamwamba). Kuti mupange pempho lenileni kumapeto, muyenera choyamba kuwonjezera URL ya seva ya API ku njira zomaliza zomwe zalembedwa muzolemba za API.
Chifukwa chake, mukapereka lamulo ili pamwambapa, kubectl imatumiza pempho la HTTP POST kumapeto kwa API pamwambapa. Tanthauzo la ReplicaSet lomwe mudapereka mufayilo replicaset.yaml, imatumizidwa mu thupi la pempho.
Umu ndi momwe kubectl imagwirira ntchito pamalamulo onse omwe amalumikizana ndi gulu la Kubernetes. Muzochitika zonsezi, kubectl imangopanga zopempha za HTTP kumalo oyenera a Kubernetes API.
Tiyerekeze kuti mwamaliza kumene kubectl create -f replicaset.yaml, pambuyo pake kubectl adapempha HTTP POST kuti ReplicaSet API endpoint (kudutsa tanthauzo lachidziwitso cha ReplicaSet).
Kodi chikuchitika ndi chiyani m'gululi?
Pambuyo pochita kubectl create -f replicaset.yaml Seva ya API imasunga matanthauzo anu azinthu za ReplicaSet mosungira:
Kenako, wowongolera wa ReplicaSet amakhazikitsidwa mwa woyang'anira woyang'anira, yemwe amayang'anira kupanga, kusinthidwa ndi kuchotsedwa kwazinthu za ReplicaSet:
Wolamulira wa ReplicaSet amapanga tanthauzo la pod pamtundu uliwonse wa ReplicaSet (malinga ndi template ya pod mu tanthauzo la ReplicaSet) ndikusunga mosungira:
Wokonzerayo amakhazikitsidwa, kutsatira ma pod omwe sanapatsidwe ma node aliwonse ogwira ntchito:
Wokonza mapulani amasankha node yoyenerera yogwira ntchito pa pod iliyonse ndikuwonjezera izi ku tanthauzo la pod mu sitolo:
Pamalo ogwirira ntchito omwe pod amapatsidwa, Kubelet imakhazikitsidwa, imatsata ma pods omwe amaperekedwa ku mfundo iyi:
Kubelet amawerenga tanthauzo la pod kuchokera kusungirako ndikulangiza nthawi yoyendetsera chidebe, monga Docker, kuti akhazikitse zotengera pa node:
M'munsimu muli malemba ofotokozera.
Pempho la API kumalo omaliza opangira ReplicaSet limakonzedwa ndi seva ya API. Seva ya API imatsimikizira pempho ndikusunga tanthauzo lachidziwitso cha ReplicaSet posungira.
Chochitika ichi chimayambitsa ReplicaSet controller, yomwe ndi subprocess ya woyang'anira woyang'anira. Woyang'anira ReplicaSet amayang'anira kupangidwa, kukonzanso, ndi kufufutidwa kwa ReplicaSet zothandizira m'sitolo ndi kulandira zidziwitso zazochitika izi zikachitika.
Ntchito ya ReplicaSet controller ndikuwonetsetsa kuti nambala yofunikira ya ReplicaSet pods ilipo. Muchitsanzo chathu, palibe ma pods omwe alipo, kotero wolamulira wa ReplicaSet amapanga matanthauzo a pod (malinga ndi template ya pod mu tanthauzo la ReplicaSet) ndikuwasunga posungira.
Kupanga ma pods atsopano kumayambitsidwa ndi wokonza mapulani omwe amatsata matanthauzo a pod omwe sanakonzedwenso kuti agwire ntchito. Wokonza mapulani amasankha node yoyenera ya ogwira ntchito pa pod iliyonse ndikusintha matanthauzidwe a pod munkhokwe.
Dziwani kuti mpaka pano, palibe code yolemetsa yomwe ikugwira ntchito paliponse mgululi. Zonse zomwe zachitika mpaka pano - uku ndiko kupanga ndi kukonzanso kwazinthu zomwe zili munkhokwe pa master node.
Chochitika chomaliza chimayambitsa Kubelets, yomwe imayang'anira ma pods omwe amakonzedwa pamagulu awo antchito. Kubelet ya node ya ogwira ntchito pomwe ma pod anu a ReplicaSet amayikidwa ayenera kulangiza nthawi yoyendetsera chidebe, monga Docker, kutsitsa zithunzi zomwe zikufunika ndikuziyendetsa.
Pakadali pano, pulogalamu yanu ya ReplicaSet ikugwira ntchito!
Udindo wa Kubernetes API
Monga momwe mudawonera mu chitsanzo chapitachi, zigawo za Kubernetes (kupatula seva ya API ndi kusungirako) yang'anani kusintha kwazinthu zosungirako ndikusintha zambiri zokhudzana ndi zosungirako.
Zoonadi, zigawozi sizikugwirizana ndi zosungirako mwachindunji, koma kupyolera mu Kubernetes API.
Taonani zitsanzo zotsatirazi:
Wolamulira wa ReplicaSet amagwiritsa ntchito API endpoint list ReplicaSets ndi parameter watch kuyang'anira kusintha kwa ReplicaSet zothandizira.
Wolamulira wa ReplicaSet amagwiritsa ntchito API endpoint kupanga Pod (create pod) kuti mupange makoko.
Scheduler amagwiritsa ntchito API endpoint patch pansi (edit pod) kuti musinthe ma pod ndi zambiri za node yosankhidwa ya ogwira ntchito.
Monga mukuwonera, iyi ndi API yomweyi yomwe kubectl amapeza. Kugwiritsa ntchito API yomweyi pazinthu zamkati ndi ogwiritsa ntchito akunja ndi lingaliro lofunikira pamapangidwe a Kubernetes.
Zolemba zonse zowonjezera mu catalog /etc/bash_completion.d zimaphatikizidwa ndi bash-completion.
Zosankha ziwirizi ndizofanana.
Pambuyo poyambitsanso chipolopolo, kutsiriza kwa lamulo la kubectl kudzagwira ntchito.
Bash pa MacOS
Pa MacOS kukhazikitsa kumakhala kovuta kwambiri. Chowonadi ndi chakuti, mwachisawawa, MacOS imagwiritsa ntchito Bash version 3.2, ndipo kubectl autocompletion script imafuna mtundu wa Bash osachepera 4.1 ndipo sagwira ntchito ku Bash 3.2.
Pali zovuta zamalayisensi okhudzana ndi kugwiritsa ntchito mtundu wakale wa Bash pa MacOS. Bash version 4 ili ndi chilolezo pansi pa GPLv3, yomwe sichirikizidwa ndi Apple.
Ngati mulandira cholakwika not found: compdef mutayambitsanso chipolopolo chanu, muyenera kuyambitsa ntchito ya buildin compdef. Mutha kuyiyambitsa powonjezera pa chiyambi cha fayilo yanu ~/.zshrc Otsatirawa:
autoload -Uz compinit
compinit
2. Onani mwachangu zofunikira
Mukapanga matanthauzidwe azinthu za YAML, muyenera kudziwa minda ndi matanthauzo ake pazinthuzo. Malo amodzi oti mufufuze izi ndi muzofotokozera za API, zomwe zili ndi mfundo zonse zazinthu zonse.
Komabe, kusintha pa msakatuli nthawi zonse mukafuna kufufuza china chake ndikovuta. Chifukwa chake kubectl imapereka lamulo kubectl explain, zomwe zikuwonetsa tsatanetsatane wazinthu zonse zomwe zili mu terminal yanu.
Fomu ya lamulo ili motere:
$ kubectl explain resource[.field]...
Lamulo lidzatulutsa zomwe mwafunsidwa kapena gawo lomwe mwafunsidwa. Zomwe zawonetsedwa ndizofanana ndi zomwe zili mubuku la API.
zotsatira kubectl explain amangowonetsa gawo loyamba la zisa za minda.
$ 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
Fomu iyi ndi yabwino, koma ili ndi zambiri zochepa. Poyerekeza ndi mtundu wonse wa matanthauzidwe azinthu, magawo ochepa okha ndi omwe akuwonetsedwa apa.
Mutha kufotokozera ndime iliyonse linanena bungwe ngati awiri <header>:<jsonpath>kumene <header> ndi dzina lazambiri, ndi <jsonpath> - mawu ofotokozera gawo lazothandizira.
Tiyeni tiwone chitsanzo chosavuta:
$ kubectl get pods -o custom-columns='NAME:metadata.name'
NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4
Zomwe zimatuluka zimakhala ndi gawo limodzi lokhala ndi mayina a pods.
Mawu osankha amasankha mayina a pod kuchokera kumunda metadata.name. Izi ndichifukwa choti dzina la pod limatanthauzidwa mu gawo la dzina la mwana metadata m'mafotokozedwe azinthu za pod. Zambiri zitha kupezeka mu API Guide kapena lembani lamulo kubectl explain pod.metadata.name.
JSONPath ndi chiyankhulo chochotsa deta kuchokera ku zolemba za JSON. Kusankha gawo limodzi ndiye njira yosavuta yogwiritsira ntchito JSONPath. Ali ndi zambiri zotheka zambiri, kuphatikizapo osankha, zosefera ndi zina zotero.
Kubectl akufotokoza amathandizira chiwerengero chochepa cha mawonekedwe a JSONPath. Kuthekera ndi zitsanzo zakugwiritsa ntchito kwawo zikufotokozedwa pansipa:
Kuthekera kogwiritsa ntchito mawonekedwe amtundu wamtundu wamtunduwu ndikosatha, chifukwa mutha kuwonetsa gawo lililonse kapena kuphatikiza magawo azinthu pazotulutsa. Nazi zitsanzo za mapulogalamu, koma omasuka kuzifufuza nokha ndikupeza mapulogalamu omwe amakuthandizani.
Kuwonetsa zithunzi zotengera ma pod:
$ kubectl get pods
-o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
NAME IMAGES
engine-544b6b6467-22qr6 rabbitmq:3.7.8-management,nginx
engine-544b6b6467-lw5t8 rabbitmq:3.7.8-management,nginx
engine-544b6b6467-tvgmg rabbitmq:3.7.8-management,nginx
web-ui-6db964458-8pdw4 wordpress
Lamulo ili likuwonetsa mayina azithunzi zachidebe pa pod iliyonse.
Kumbukirani kuti pod ikhoza kukhala ndi zotengera zingapo, ndiye kuti mayina azithunzi adzawonetsedwa pamzere umodzi, wolekanitsidwa ndi koma.
Kuwonetsa madera omwe alipo:
$ 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
Lamuloli ndi lothandiza ngati gulu lanu limakhala pamtambo wapagulu. Imawonetsa zone yopezeka pa node iliyonse.
Malo opezeka ndi lingaliro lamtambo lomwe limachepetsa malo obwerezabwereza kudera lamalo.
Magawo opezeka pa node iliyonse amapezedwa kudzera pa lebulo lapadera - failure-domain.beta.kubernetes.io/zone. Ngati gululo likuyenda mumtambo wapagulu, chizindikirochi chimapangidwa chokha ndikudzazidwa ndi mayina a magawo omwe akupezeka pa node iliyonse.
Zolemba sizili gawo la Kubernetes gwero lazinthu, kotero simupeza zambiri za iwo API Guide. Komabe, zitha kuwoneka (monga zilembo zina zilizonse) ngati mungafunse zambiri zama node mu YAML kapena mtundu wa JSON:
$ kubectl get nodes -o yaml
# ΠΈΠ»ΠΈ
$ kubectl get nodes -o json
Iyi ndi njira yabwino yophunzirira zambiri zazinthu zothandizira, kuwonjezera pa mfundo zazinthu zophunzirira.
4. Sinthani mosavuta pakati pa magulu ndi malo a mayina
Mwachikhazikitso fayilo ya kubeconfig ndi ~/.kube/config. Kawirikawiri fayiloyi imapangidwa kapena kusinthidwa ndi lamulo lapadera.
Mukamagwira ntchito ndi magulu angapo, fayilo yanu ya kubeconfig imakhala ndi zoikamo zolumikizana ndi magulu onsewo. Mufunika njira yoti muwuze lamulo la kubectl lomwe mukugwira nawo ntchito.
Mkati mwa tsango, mutha kupanga malo angapo a mayina-mtundu wa gulu lamagulu mkati mwa gulu lakuthupi. Kubectl imasankhanso malo oti agwiritse ntchito potengera fayilo ya kubeconfig. Izi zikutanthauza kuti mukufunikanso njira yowuzira lamulo la kubectl kuti mugwiritse ntchito dzina liti.
Mbali ina yothandiza kubectx ndi mode interactive. Zimagwira ntchito mogwirizana ndi malangizowo fzf, yomwe iyenera kukhazikitsidwa mosiyana. Kuyika fzf kumapangitsa kuti muzitha kulumikizana kubectx. Mwanjira, mutha kusankha nkhani ndi malo a mayina kudzera mu mawonekedwe osakira aulere operekedwa ndi fzf.
Kugwiritsa ntchito zilembo za shell
Simukusowa zida zosiyana kuti musinthe zomwe zikuchitika komanso malo a mayina chifukwa kubectl imaperekanso malamulo a izi. Inde, timu kubectl config imapereka ma subcommands osintha mafayilo a kubeconfig.
Monga mukuwonera, ma alias amapangidwa ndi zigawo, chilichonse chomwe chimayimira gawo la lamulo la kubectl. Alias ββaliyense akhoza kukhala ndi gawo limodzi la lamulo loyambira, ntchito, ndi zothandizira, ndi zigawo zingapo zamagawo. "Mumangodzaza" zigawo izi kuchokera kumanzere kupita kumanja molingana ndi chithunzi pamwambapa.
Ntchitoyi dzina lathunthu imapereka njira yothetsera vutoli. Imalumikizana ndi njira yomaliza ya ma alias, mkatimo imakulitsa dzina lachidziwitso ku lamulo, ndikubwezeretsanso zosankha zamalamulo omalizidwa. Izi zikutanthauza kuti padding kwa alias amachita chimodzimodzi ndi lamulo lathunthu.
Choyamba, dzina lathunthu limatengera bash-kumaliza. Chifukwa chake, musanayike ma alias athunthu, muyenera kuwonetsetsa kuti bash-completion yakhazikitsidwa. Malangizo oyika adaperekedwa kale kwa Linux ndi MacOS.
Chidziwitso Chofunikira kwa Ogwiritsa Ntchito a MacOS: Monga script ya kubectl autocompletion, alias-alias sagwira ntchito ndi Bash 3.2, yomwe ndi yosasinthika pa MacOS. Makamaka, zofananira zonse zimatengera bash-completion v2 (brew install bash-completion@2), zomwe zimafuna osachepera Bash 4.1. Izi zikutanthauza kuti kuti mugwiritse ntchito ma alias athunthu pa MacOS muyenera kukhazikitsa mtundu watsopano wa Bash.
Mwaukadaulo wathunthu-zidziwitso zimapereka ntchito yokulunga _complete_alias. Ntchitoyi imayang'ana ma alias ndikubwezeretsanso malingaliro omaliza a lamulo la alias.
Kuti mugwirizanitse ntchito ndi dzina linalake, muyenera kugwiritsa ntchito makina omangira a Bash wathunthu, kukhazikitsa _complete_alias ngati ntchito yomaliza.
Mwachitsanzo, tiyeni titenge alias k, yomwe imayimira lamulo la kubectl. kukhazikitsa _complete_alias Monga chothandizira pazidziwitso izi, muyenera kuyendetsa lamulo ili:
$ complete -F _complete_alias k
Zotsatira zake ndikuti nthawi iliyonse mukamaliza alias k, ntchitoyi imatchedwa _complete_alias, yomwe imayang'ana dzina lachidziwitso ndikubwezeretsanso malangizo omaliza a lamulo kubectl.
Mapulagini a Kubectl amatha kugawidwa kapena kugwiritsidwanso ntchito ngati phukusi la mapulogalamu. Koma mungapeze kuti mapulagini omwe ena adagawana nawo?
Project Krew ikufuna kupereka yankho logwirizana logawana, kusaka, kukhazikitsa ndi kuyang'anira mapulagini a kubectl. Pulojekitiyi imadzitcha "woyang'anira phukusi la kubectl mapulagini" (Krew ndi ofanana ndi Brew).
Krew ndi mndandanda wamapulagini a kubectl omwe mungasankhe ndikuyika. Nthawi yomweyo, Krew ndi pulogalamu yowonjezera ya kubectl.
Izi zikutanthauza kuti kukhazikitsa Krew kumagwira ntchito ngati kukhazikitsa pulogalamu yowonjezera ya kubectl. Mukhoza kupeza malangizo atsatanetsatane pa Tsamba la GitHub.