Kubernetesekin lan egiten baduzu, kubectl izango da ziurrenik gehien erabiltzen dituzun utilitateetako bat. Eta tresna jakin batekin lanean denbora asko ematen duzun bakoitzean, ondo aztertzea eta modu eraginkorrean erabiltzen ikastea merezi du.
Team Kubernetes aaS Mail.ru-tik Daniel Weibel-en artikulu bat itzuli du eta bertan kubectl-ekin modu eraginkorrean lan egiteko aholkuak eta trikimailuak aurkituko dituzu. Gainera, Kubernetes-en ulermen sakonagoa lortzen lagunduko dizu.
Egilearen arabera, artikuluaren helburua da eguneroko lana Kubernetesekin eraginkorragoa izateaz gain, atseginagoa izatea ere!
Sarrera: Zer da kubectl
Kubectl modu eraginkorragoan erabiltzen ikasi aurretik, zer den eta nola funtzionatzen duen ulertzeko oinarrizko ezagutza lortu behar duzu.
Erabiltzailearen ikuspegitik, kubectl Kubernetes eragiketak egiteko aukera ematen duen kontrol-panela da.
Teknikoki hitz eginez, kubectl Kubernetes API bezero bat da.
Kubernetes API HTTP REST API bat da. API hau Kubernetesen benetako erabiltzailearen interfazea da, eta horren bidez guztiz kontrolatzen da. Horrek esan nahi du Kubernetes-en eragiketa bakoitza API amaierako puntu gisa azaltzen dela eta HTTP eskaera batekin egin daitekeela amaiera-puntu horretara.
Hori dela eta, kubectl-en lan nagusia Kubernetes APIari HTTP eskaerak egitea da:
Kubernetes guztiz baliabideetara bideratutako sistema da. Horrek esan nahi du baliabideen barne-egoera mantentzen duela eta Kubernetes-en eragiketa guztiak CRUD eragiketak direla.
Baliabide hauek kudeatuz Kubernetes-en erabateko kontrola duzu, eta Kubernetes-ek baliabideen uneko egoeraren arabera egiten du zer egin. Hori dela eta, Kubernetes API-ren erreferentzia baliabide-moten zerrenda gisa antolatuta dago lotutako eragiketekin.
Ikus dezagun adibide bat.
Demagun ReplicaSet baliabide bat sortu nahi duzula. Horretarako, ReplicaSet deskribatzen duzu fitxategi batean izenarekin replicaset.yaml, gero exekutatu komandoa:
$ kubectl create -f replicaset.yaml
Honek ReplicaSet baliabide bat sortuko du. Baina zer gertatzen da eszenaren atzean?
Kubernetes-ek ReplicaSet sortzeko eragiketa bat du. Beste edozein eragiketa bezala, API amaierako puntu gisa azaltzen da. Eragiketa honen API amaierako puntu espezifikoak honelako itxura du:
POST /apis/apps/v1/namespaces/{namespace}/replicasets
Kubernetes eragiketa guztietarako API amaierako puntuak hemen aurki daitezke API erreferentzia (barne goiko amaierako puntua). Amaiera-puntu bati benetako eskaera bat egiteko, lehenik eta behin API zerbitzariaren URLa gehitu behar duzu API-ren erreferentzian zerrendatutako amaiera-puntuaren bideetan.
Horregatik, goiko komandoa exekutatzen duzunean, kubectl-ek HTTP POST eskaera bat bidaltzen du goiko API amaierako puntura. Fitxategian emandako ReplicaSet definizioa replicaset.yaml, eskaeraren gorputzean bidaltzen da.
Honela funtzionatzen du kubectl-ek Kubernetes klusterrekin elkarreragiten duten komando guztietan. Kasu hauetan guztietan, kubectl-ek HTTP eskaerak besterik ez ditu egiten Kubernetes APIaren amaiera-puntu egokietara.
Kontuan izan Kubernetes guztiz kudeatu dezakezula erabilgarritasun bat erabiliz curlHTTP eskaerak eskuz bidaliz Kubernetes APIra. Kubectl-ek Kubernetes APIa erabiltzea errazten du.
Hau da kubectl zer den eta nola funtzionatzen duen. Baina Kubernetes APIari buruz beste zerbait dago kubectl-eko erabiltzaile bakoitzak jakin beharko lukeena. Ikus dezagun azkar Kubernetesen barne-munduari.
Kubernetesen barne mundua
Kubernetes kluster-nodoetan prozesu bereizi gisa exekutatzen diren osagai independente multzo batek osatzen du. Osagai batzuk nodo nagusietan exekutatzen dira, beste batzuk lan-nodoetan, osagai bakoitzak bere zeregin zehatza betetzen du.
Hona hemen nodo nagusietako osagai garrantzitsuenak:
API zerbitzaria β API bat eskaintzen du eta biltegiratzea kudeatzen du.
Kontrolatzailearen kudeatzailea β Baliabideen egoerak zehaztapenak betetzen dituela ziurtatzen du.
Antolatzailea β Langile-nodoetan pod-ak programatzen ditu.
Eta hona hemen langile-nodoen osagai garrantzitsuen bat:
kubelet β laneko nodoan edukiontziak abian jartzea kudeatzen du.
Osagai hauek elkarrekin nola funtzionatzen duten ulertzeko, ikus dezagun adibide bat.
Demagun amaitu berri duzula kubectl create -f replicaset.yaml, ondoren kubectl-ek HTTP POST eskaera egin zion ReplicaSet API amaiera-puntua (ReplicaSet baliabideen definizioa gaindituz).
Zer gertatzen da klusterrean?
Egin ondoren kubectl create -f replicaset.yaml API zerbitzariak zure ReplicaSet baliabideen definizioa biltegian gordetzen du:
Ondoren, ReplicaSet kontrolatzailea kontroladorearen kudeatzailean abiarazten da, eta horrek ReplicaSet baliabideak sortzea, aldatzea eta ezabatzea kudeatzen du:
ReplicaSet kontrolagailuak ReplicaSet erreplika bakoitzerako pod definizio bat sortzen du (ReplicaSet definizioko pod txantiloiaren arabera) eta biltegian gordetzen ditu:
Antolatzailea abiarazten da, oraindik inongo langile-nodotara esleitu ez diren pod-ak jarraituz:
Antolatzaileak langile-nodo egoki bat hautatzen du pod bakoitzerako eta informazio hau gehitzen du dendako podaren definizioan:
Pod-a esleituta dagoen langile-nodoan, Kubelet abiarazten da, nodo honi esleitutako poden jarraipena egiten du:
Kubelet-ek ontziaren definizioa biltegiratzetik irakurtzen du eta edukiontzien exekuzio-denbora bati agintzen dio, Dockerri adibidez, nodoan edukiontziak abiarazteko:
Jarraian, deskribapen honen testu-bertsio bat dago.
ReplicaSet sortzeko amaierako APIaren eskaera API zerbitzariak prozesatzen du. API zerbitzariak eskaera autentifikatzen du eta ReplicaSet baliabideen definizioa biltegian gordetzen du.
Gertaera honek ReplicaSet kontrolatzailea abiarazten du, hau da, kontroladorearen kudeatzailearen azpiprozesua. ReplicaSet kontrolagailuak dendako ReplicaSet baliabideak sortzea, eguneratzea eta ezabatzea kontrolatzen du eta gertaeren jakinarazpena jasotzen du hori gertatzen denean.
ReplicaSet kontrolagailuaren lana da ReplicaSet-en behar den lek kopurua existitzen dela ziurtatzea. Gure adibidean, oraindik ez dago podrik, beraz, ReplicaSet kontrolatzaileak pod definizio hauek sortzen ditu (ReplicaSet definizioko pod txantiloiaren arabera) eta biltegian gordetzen ditu.
Pod berriak sortzea langile-nodoetarako oraindik programatuta ez dauden pod definizioen jarraipena egiten duen programatzaile batek abiarazten du. Antolatzaileak langile-nodo egoki bat hautatzen du pod bakoitzerako eta biltegiko pod definizioak eguneratzen ditu.
Kontuan izan puntu honetara arte ez zegoela lan-karga-koderik klusterrean inon exekutatzen. Orain arte egin dena - hau nodo nagusiko biltegian baliabideak sortzea eta eguneratzea da.
Azken gertaerak Kubelets abiarazten du, beren langile-nodoetarako programatutako podak kontrolatzen dituztenak. Zure ReplicaSet pod-ak instalatuta dauden langile-nodoaren Kubelet-ek edukiontziaren exekuzio-denborari agindu behar dio, Dockerri adibidez, beharrezko edukiontzi-irudiak deskargatu eta exekutatzeko.
Une honetan, zure ReplicaSet aplikazioa abian da azkenean!
Kubernetes APIaren eginkizuna
Aurreko adibidean ikusi zenuten bezala, Kubernetes-eko osagaiek (API zerbitzaria eta biltegiratzea izan ezik) biltegiratzeko baliabideen aldaketak ikusten dituzte eta biltegiratuko baliabideei buruzko informazioa aldatzen dute.
Jakina, osagai hauek ez dute biltegiratzearekin zuzenean elkarreragiten, Kubernetes APIaren bidez baizik.
Kontuan izan honako adibide hauek:
ReplicaSet kontrolagailuak API amaierako puntua erabiltzen du zerrenda ReplicaSets parametroarekin watch ReplicaSet baliabideen aldaketak kontrolatzeko.
ReplicaSet kontrolagailuak API amaierako puntua erabiltzen du sortu Pod (create pod) lekak sortu.
Scheduler-ek API amaierako puntua erabiltzen du adabaki leka (editatu pod) aukeratutako langile-nodoari buruzko informazioarekin pod-ak eguneratzeko.
Ikus dezakezunez, kubectl-ek atzitzen duen API bera da. Barneko osagaietarako eta kanpoko erabiltzaileetarako API bera erabiltzea oinarrizko kontzeptua da Kubernetesen diseinuan.
Orain Kubernetes-ek nola funtzionatzen duen laburtu dezakegu:
Biltegiratze biltegien egoera, hau da, Kubernetes baliabideak.
API zerbitzariak biltegiratzeko interfaze bat eskaintzen du Kubernetes API moduan.
Kuberneteseko gainerako osagaiek eta erabiltzaileek Kubernetesen egoera (baliabideak) irakurtzen, behatzen eta manipulatzen dute APIaren bidez.
Kontzeptu hauek ezagutzeak kubectl hobeto ulertzen lagunduko dizu eta horri etekinik handiena ateratzen lagunduko dizu.
Ikus ditzagun kubectl-ekin zure produktibitatea hobetzen lagunduko dizuten aholku eta trikimailu zehatz batzuk.
1. Bizkortu sarrera komandoak osatzea erabiliz
Kubectl-ekin errendimendua hobetzeko teknika erabilgarrienetako bat, baina askotan ahaztu gabe, komandoak osatzea da.
Komandoak osatzeak kubectl komandoen zatiak automatikoki osatzeko aukera ematen du Tab tekla erabiliz. Honek azpikomando, auker eta argumentuetarako funtzionatzen du, baliabideen izenak bezain konplexuak barne.
Ikusi kubectl komandoak osatzea nola funtzionatzen duen:
Komandoak osatzea Bash eta Zsh shell-etarako funtzionatzen du.
Gida ofiziala osatze automatikoa konfiguratzeko argibide zehatzak ditu, baina jarraian pasarte labur bat emango dugu.
Komandoak osatzea nola funtzionatzen duen
Komandoa osatzea osatzeko script bat erabiliz funtzionatzen duen shell-en eginbide bat da. Luzapen script bat komando zehatz baterako luzapen baten portaera definitzen duen shell script bat da.
Kubectl-ek automatikoki sortu eta ateratzen ditu Bash eta Zsh-entzako luzapen-scriptak komando hauek erabiliz:
$ kubectl completion bash
edo:
$ kubectl completion zsh
Teorian, nahikoa da komando horien irteera dagokion komando-shellera konektatzea, kubectl komandoak osatzeko.
Praktikan, konexio-metodoa desberdina da Bash-en (Linux eta MacOSen arteko desberdintasunak barne) eta Zsh-en. Jarraian aukera hauek guztiak aztertuko ditugu.
Bash Linux-en
Bash osatzeko script-a bash-completion paketearen araberakoa da, beraz, lehenik instalatu behar duzu:
$ sudo apt-get install bash-completion
edo:
$ yum install bash-completion
Paketea ongi instalatuta dagoela probatu dezakezu komando hau erabiliz:
$ type _init_completion
Honek shell funtzioaren kodea ateratzen badu, bash-completion behar bezala instalatuta dago. Komandoak "Ez aurkitu" errorea ematen badu, hurrengo lerroa gehitu behar duzu zure fitxategian ~ / .bashrc:
Beharrezkoa al da lerro hau fitxategian gehitzea ~ / .bashrc edo ez bash-completion instalatzeko erabili duzun pakete-kudeatzailearen araberakoa da. Hau beharrezkoa da APTrako, baina ez YUMrako.
Bash-completion instalatu ondoren, guztia konfiguratu behar duzu kubectl osatzeko scripta shell saio guztietan gaituta egon dadin.
Horretarako modu bat hurrengo lerroa fitxategian gehitzea da ~ / .bashrc:
source <(kubectl completion bash)
Beste modu bat kubectl luzapen script-a direktoriora gehitzea da /etc/bash_completion.d (sortu existitzen ez bada):
Katalogoko gehigarrien script guztiak /etc/bash_completion.d automatikoki sartzen dira bash-osatzean.
Bi aukerak berdin aplikatzen dira.
Shell berrabiarazi ondoren, kubectl komandoa osatzea funtzionatuko du.
Bash MacOS-en
MacOS-en konfigurazioa pixka bat zailagoa da. Kontua da, lehenespenez, MacOS-ek Bash 3.2 bertsioa erabiltzen duela eta kubectl osatze automatikoaren gidoiak gutxienez 4.1 Bash bertsioa behar duela eta ez duela Bash 3.2-n funtzionatzen.
MacOS-en Bash-en bertsio zaharkitu bat erabiltzearekin lotutako lizentzia-arazoak daude. Bash 4 bertsioak GPLv3-ren lizentzia du, Apple-k onartzen ez duena.
Kubectl osatze automatikoa MacOS-en konfiguratzeko, Bash-en bertsio berriagoa instalatu behar duzu. Bash eguneratua zure shell lehenetsi gisa ere ezar dezakezu, eta horrek arazo asko aurreztuko ditu etorkizunean. Ez da zaila, xehetasunak artikuluan ematen dira "Bash eguneratzen MacOS-en'.
Jarraitu aurretik, ziurtatu Bash-en azken bertsioa erabiltzen ari zarela (ikusi irteera bash --version).
Bash osatzeko gidoia aldatu egiten da proiektuaren arabera bash-osaketa, beraz, lehenik instalatu behar duzu.
Bash-completion instalatu dezakezu erabiliz Homebrew:
$ brew install bash-completion@2
Hemen @2 bash-completion 2 bertsioa adierazten du. kubectl autocompletion-ek bash-completion v2 behar du, eta bash-completion v2-ek Bash 4.1 bertsioa behar du gutxienez.
Komandoaren irteera brew-install Oharra atal bat dauka, fitxategiari zer gehitu behar zaion zehazten duena ~/.bash_profile:
Hala ere, lerro hauek ez gehitzea gomendatzen dut ~/.bash_profileeta ~/.bashrc. Kasu honetan, osatze automatikoa nagusietan ez ezik, haurren komando-shelletan ere eskuragarri egongo da.
Komando shell-a berrabiarazi ondoren, instalazioa zuzena dela egiaztatu dezakezu komando hau erabiliz:
$ type _init_completion
Irteeran shell funtzio bat ikusten baduzu, dena behar bezala konfiguratuta dago.
Orain ziurtatu behar dugu kubectl osatze automatikoa gaituta dagoela saio guztietan.
Modu bat hurrengo lerroa gehitzea da ~/.bashrc:
source <(kubectl completion bash)
Bigarren modua karpetari osatze automatikoko script bat gehitzea da /usr/local/etc/bash_completion.d:
Metodo honek bash-completion Homebrew erabiliz instalatu baduzu bakarrik funtzionatuko du. Kasu honetan, bash-completion-ek direktorio honetako script guztiak kargatzen ditu.
Instalatu baduzu kubectl Homebrew erabiliz, orduan ez dago aurreko urratsa egin beharrik, automatikoki osatzeko gidoia karpetan jarriko baita /usr/local/etc/bash_completion.d instalazioan zehar. Kasu honetan, kubectl osatze automatikoa bash-completion instalatu bezain laster hasiko da lanean.
Ondorioz, aukera hauek guztiak baliokideak dira.
Zsh
Zsh-rako osatze automatikoko scriptek ez dute inolako menpekotasunik behar. Egin behar duzun guztia gaitzea da komando-shella kargatzen duzunean.
Hau egin dezakezu lerro bat gehituz zure ~/.zshrc fitxategia:
source <(kubectl completion zsh)
Errore bat jasotzen baduzu not found: compdef shell berrabiarazi ondoren, integratutako funtzioa gaitu behar duzu compdef. Gaitu dezakezu zure fitxategiaren hasieran gehituz ~/.zshrc honako hau:
autoload -Uz compinit
compinit
2. Azkar ikusi baliabideen zehaztapenak
YAML baliabideen definizioak sortzen dituzunean, eremuak eta baliabide horien esanahia ezagutu behar dituzu. Informazio hori bilatzeko leku bat API erreferentzian dago, baliabide guztien zehaztapen osoak dituena.
Hala ere, zerbait bilatu behar duzun bakoitzean web arakatzailera aldatzea deserosoa da. Beraz, kubectl-ek komandoa ematen du kubectl explain, baliabide guztien zehaztapenak zure terminalean bertan erakusten dituena.
Komando formatua honakoa da:
$ kubectl explain resource[.field]...
Komandoak eskatutako baliabide edo eremuaren zehaztapena aterako du. Bistaratzen den informazioa APIaren eskuliburuan jasotakoaren berdina da.
Lehenespenez kubectl explain soroen habia-maila baino ez du erakusten.
Zuhaitz osoa bistaratu dezakezu aukera gehitzen baduzu --recursive:
$ kubectl explain deployment.spec --recursive
Ez badakizu zein baliabide behar diren zehatz-mehatz, denak bistaratu ditzakezu komando honekin:
$ kubectl api-resources
Komando honek baliabideen izenak pluralean bistaratzen ditu, adibidez. deployments ordez deployment. Izen laburra ere bistaratzen du, adibidez deploy, duten baliabide horietarako. Ez kezkatu desberdintasun horietaz. Izendatzeko aukera hauek guztiak kubectl-en baliokideak dira. Hau da, horietako edozein erabil dezakezu kubectl explain.
$ 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
Formatu hau erosoa da, baina informazio kopuru mugatua dauka. Baliabideen definizio osoko formatuarekin alderatuta, eremu batzuk bakarrik bistaratzen dira hemen.
Kasu honetan, zutabeen irteera formatu pertsonalizatua erabil dezakezu. Zein datu atera behar diren zehazteko aukera ematen du. Edozein baliabide-eremu bistaratu dezakezu zutabe bereizi gisa.
Formatu pertsonalizatu baten erabilera aukera hauek erabiliz zehazten da:
Irteerako zutabe bakoitza bikote gisa defini dezakezu <header>:<jsonpath>Non <header> zutabearen izena da, eta <jsonpath> β baliabide-eremu bat definitzen duen adierazpena.
Ikus dezagun adibide sinple bat:
$ kubectl get pods -o custom-columns='NAME:metadata.name'
NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4
Irteerak zutabe bat dauka leken izenekin.
Aukera-adierazpenak eremuko lekaren izenak hautatzen ditu metadata.name. Hau da podaren izena haurraren izenaren eremuan definituta dagoelako metadata lekaren baliabideen deskribapenean. Xehetasun gehiago hemen aurki daitezke API Gida edo idatzi komandoa kubectl explain pod.metadata.name.
Orain demagun zutabe gehigarri bat gehitu nahi duzula irteeran, adibidez, pod bakoitza exekutatzen ari den nodoa erakutsiz. Horretarako, zutabeen zehaztapen egokia gehi dezakezu zutabe pertsonalizatuen aukeran:
$ 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
Adierazpenak nodoaren izena hautatzen du spec.nodeName β Pod bat nodo bati esleitzen zaionean, bere izena eremuan idazten da spec.nodeName pod baliabideen zehaztapena. Irteeran informazio zehatzagoa aurki daiteke kubectl explain pod.spec.nodeName.
Kontuan izan Kubernetes baliabideen eremuek maiuskulak eta minuskulak bereizten dituztela.
Edozein baliabide-eremu ikus dezakezu zutabe gisa. Berrikusi baliabideen zehaztapena eta probatu nahi dituzun eremuekin.
Baina lehenik eta behin, ikus ditzagun eremuen hautapenaren esamoldeak.
JSONPath adierazpenak
Baliabide-eremuak hautatzeko adierazpenak oinarritzen dira JSONPath.
JSONPath JSON dokumentuetatik datuak berreskuratzeko hizkuntza bat da. Eremu bakarra hautatzea JSONPath-en erabilera kasurik errazena da. Asko dauka aukera gehiago, hautatzaileak, iragazkiak eta abar barne.
Kubectl-ek JSONPath funtzio kopuru mugatu bat onartzen du. Hauen erabileraren aukerak eta adibideak deskribatzen dira jarraian:
[] operadorea bereziki garrantzitsua da. Kubernetes-eko baliabide-eremu asko zerrendak dira, eta operadore honek zerrenda horietako kideak hautatzeko aukera ematen dizu. Sarritan [*] bezalako komodin batekin erabiltzen da zerrenda bateko elementu guztiak hautatzeko.
Aplikazio-adibideak
Zutabeen irteerako formatu pertsonalizatua erabiltzeko aukerak amaigabeak dira, irteerako edozein eremu edo baliabide-eremuen konbinazio bistara dezakezu eta. Hona hemen aplikazio lagin batzuk, baina lasai arakatu eta aurkitu zuretzako funtzionatzen duten aplikazioak.
Leketarako edukiontzien irudiak bistaratzea:
$ 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
Komando honek ontzi bakoitzaren edukiontzi-irudien izenak bistaratzen ditu.
Gogoratu ontzi batek hainbat edukiontzi izan ditzakeela, orduan irudien izenak lerro batean agertuko dira, komaz bereizita.
Nodoen erabilgarritasun-eremuak bistaratzen:
$ 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
Komando hau erabilgarria da zure cluster hodei publiko batean ostatatuta badago. Nodo bakoitzaren erabilgarritasun-eremua erakusten du.
Erabilgarritasun-gunea hodei-kontzeptu bat da, erreplikazio-eremua eskualde geografiko batera mugatzen duena.
Nodo bakoitzaren erabilgarritasun-eremuak etiketa berezi baten bidez lortzen dira - failure-domain.beta.kubernetes.io/zone. Klusterra hodei publiko batean exekutatzen ari bada, etiketa hau automatikoki sortzen da eta nodo bakoitzaren erabilgarritasun-eremuen izenekin betetzen da.
Etiketak ez dira Kubernetes baliabideen zehaztapenaren parte, beraz, ez duzu haiei buruzko informaziorik aurkituko API Gida. Hala ere, ikus daitezke (beste edozein etiketa bezala) YAML edo JSON formatuan nodoei buruzko informazioa eskatzen baduzu:
$ kubectl get nodes -o yaml
# ΠΈΠ»ΠΈ
$ kubectl get nodes -o json
Baliabideei buruz gehiago ikasteko modu bikaina da, baliabideen zehaztapenak ikasteaz gain.
4. Erraz aldatu klusterren eta izen-espazioen artean
Kubectl-ek Kubernetes APIari eskaera bat egiten dionean, lehenik kubeconfig fitxategia irakurtzen du konexiorako beharrezko parametro guztiak lortzeko.
Lehenespenez kubeconfig fitxategia da ~/.kube/config. Normalean, fitxategi hau komando berezi baten bidez sortzen edo eguneratzen da.
Hainbat klusterrekin lan egiten duzunean, kubeconfig fitxategiak kluster guztietara konektatzeko ezarpenak ditu. Kubectl komandoari zein clusterrekin lan egiten ari zaren esateko modu bat behar duzu.
Kluster baten barruan, hainbat izen-espazio sor ditzakezu, kluster fisiko baten barruan dagoen kluster birtual mota bat. Kubectl-ek ere zehazten du zein izen-espazio erabili kubeconfig fitxategian oinarrituta. Horrek esan nahi du kubectl komandoari zein izen-espaziorekin lan egin behar den esateko modu bat ere behar duzula.
Kapitulu honetan nola funtzionatzen duen eta modu eraginkorrean funtzionatzen duen azalduko dugu.
Kontuan izan kubeconfig fitxategi anitz izan ditzakezula KUBECONFIG ingurune-aldagaian zerrendatuta. Kasu honetan, fitxategi hauek guztiak konfigurazio komun batean konbinatuko dira exekuzioan. Kubeconfig fitxategi lehenetsia ere alda dezakezu kubectl parametroarekin exekutatuz --kubeconfig. Begira dokumentazio ofiziala.
kubeconfig fitxategiak
Ikus dezagun zer daukan zehazki kubeconfig fitxategiak:
Ikus dezakezunez, kubeconfig fitxategiak testuinguru multzo bat dauka. Testuinguruak hiru elementu ditu:
Izen-espazioa - clusterra sartzean erabiltzen den izen-espazioa.
Praktikan, sarritan kluster bakoitzeko testuinguru bat erabiltzen dute kubeconfig-en. Hala ere, hainbat testuinguru izan ditzakezu cluster bakoitzeko, erabiltzaileen edo izen-espazioaren arabera bereizita. Dena den, testuinguru anitzeko konfigurazio hau ez da ohikoa, beraz, normalean klusterren eta testuinguruen arteko bat-bateko mapa bat egon ohi da.
Une bakoitzean, testuinguruetako bat egungoa da:
Kubectl-ek konfigurazio fitxategi bat irakurtzen duenean, uneko testuinguruko informazioa hartzen du beti. Goiko adibidean, kubectl Hare klusterera konektatuko da.
Horren arabera, beste kluster batera aldatzeko, uneko testuingurua aldatu behar duzu kubeconfig fitxategian:
Orain kubectl Fox klusterera konektatuko da.
Kluster berean izen-espazio ezberdin batera aldatzeko, uneko testuingururako izen-eremuaren elementuaren balioa aldatu behar duzu:
Goiko adibidean, kubectl-ek Fox klusterraren Prod izen-espazioa erabiliko du (lehen Test izen-espazioa ezarri zen).
Kontuan izan kubectl-ek aukerak ere eskaintzen dituela --cluster, --user, --namespace ΠΈ --context, elementu indibidualak eta uneko testuingurua bera gainidazteko aukera ematen dutenak, kubeconfig-en ezarrita dagoena kontuan hartu gabe. Begira kubectl options.
Teorian, kubeconfig-en ezarpenak eskuz alda ditzakezu. Baina deserosoa da. Eragiketa hauek errazteko, parametroak automatikoki aldatzeko aukera ematen duten hainbat utilitate daude.
Erabili kubectx
Klusterren eta izen-eremuen artean aldatzeko oso erabilgarritasun ezaguna.
Utilitateak komandoak eskaintzen ditu kubectx ΠΈ kubens uneko testuingurua eta izen-espazioa aldatzeko.
Esan bezala, uneko testuingurua aldatzeak clusterra aldatzea esan nahi du, kluster bakoitzeko testuinguru bakarra baduzu.
Hona hemen komando hauek exekutatzearen adibide bat:
Funtsean, komando hauek kubeconfig fitxategia editatu besterik ez dute goian azaldu bezala.
Bi komandoek testuinguruaren eta izen-eremuen izenak automatikoki osatzea onartzen dute, eta horrek guztiz idazteko beharra ezabatzen du. Osaketa automatikoa konfiguratzeko argibideak Hemen.
Beste ezaugarri erabilgarria kubectx da modu interaktiboa. Erabilgarritasunarekin batera funtzionatzen du fzf, bereizita instalatu behar dena. fzf instalatzeak automatikoki modu interaktiboa eskuragarri jartzen du kubectx. Interaktiboki, testuingurua eta izen-espazioa hauta ditzakezu fzf-k eskaintzen duen doako bilaketa interfaze interaktiboaren bidez.
Shell aliasak erabiliz
Ez duzu tresna bereizirik behar uneko testuingurua eta izen-espazioa aldatzeko, kubectl-ek horretarako komandoak ere eskaintzen dituelako. Bai, taldea kubectl config kubeconfig fitxategiak editatzeko azpikomandoak eskaintzen ditu.
Hona hemen horietako batzuk:
kubectl config get-contexts: testuinguru guztiak bistaratu;
kubectl config current-context: egungo testuingurua lortu;
kubectl config use-context: egungo testuingurua aldatu;
kubectl config set-context: Aldatu testuinguruaren elementua.
Hala ere, komando hauek zuzenean erabiltzea ez da oso erosoa, luzeak direlako. Exekutatu errazak diren shell aliasak egin ditzakezu.
Kubectx-en antzeko funtzionalitateak eskaintzen dituzten komando hauetan oinarritutako alias multzo bat sortu dut. Hemen ikus ditzakezu ekintzan:
Kontuan izan ezizenek fzf erabiltzen dutela doako bilaketa interfaze interaktibo bat eskaintzeko (kubectx-en modu interaktiboa bezala). Horrek esan nahi du behar duzula instalatu fzfezizena hauek erabiltzeko.
Hona hemen ezizenen definizioak beraiek:
# ΠΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ
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/^..//")"'
Alias ββhauek ezartzeko goiko definizioak gehitu behar dituzu zure fitxategian ~/.bashrc edo ~/.zshrc eta berrabiarazi zure shell.
Pluginak erabiliz
Kubectl-ek oinarrizko komandoen modu berean exekutatzen diren pluginak kargatzeko aukera ematen du. Adibidez, kubectl-foo plugina instalatu eta exekutatu dezakezu komandoa exekutatuz kubectl foo.
Testuingurua eta izen-espazioa horrela aldatzea komenigarria litzateke, exekutatuz adibidez kubectl ctx testuingurua aldatzeko eta kubectl ns izen-eremua aldatzeko.
Pluginen lana aurreko ataleko aliasetan oinarritzen da.
Hona hemen nola funtzionatzen duten:
Kontuan izan pluginek fzf erabiltzen dutela bilaketa libreko interfaze interaktibo bat eskaintzeko (kubectx-en modu interaktiboa bezala). Horrek esan nahi du behar duzula instalatu fzfezizena hauek erabiltzeko.
Pluginak instalatzeko, izendatutako shell script-ak deskargatu behar dituzu kubectl-ctx ΠΈ kubectl-ns Zure PATH aldagaiko edozein direktoriotara eta egin exekutagarriak adibidez. chmod +x. Horren ondoren berehala erabili ahal izango duzu kubectl ctx ΠΈ kubectl ns.
5. Murriztu sarrera autoaliasekin
Shell aliasak sarrera bizkortzeko modu ona dira. Proiektua kubectl-aliasak Kubectl oinarrizko komandoetarako 800 lasterbide inguru ditu.
Galdetuko zara agian: nola gogoratzen dituzu 800 ezizena? Baina ez dituzu guztiak gogoratu behar, behean azaltzen den eskema sinple baten arabera eraikitzen direlako:
Adibidez:
kgpooyaml - kubectl lortu lekak oyaml
ksysgsvcw β kubectl -n kube-system get svc w
ksysrmcm -kubectl -n kube-system rm cm
kgdepallsl - kubectl lortu inplementazio guztia sl
Ikus dezakezunez, aliasak osagaiez osatuta daude, eta horietako bakoitzak kubectl komandoaren elementu zehatz bat adierazten du. Alias ββbakoitzak osagai bat izan dezake oinarrizko komando, eragiketa eta baliabiderako, eta osagai anitz parametroetarako. Osagai hauek ezkerretik eskuinera "betetzea" besterik ez duzu goiko diagramaren arabera.
Adibidez, kgpooyamlall ezizena komandoaren baliokidea da kubectl get pods -o yaml --all-namespaces.
Aukeren ordena erlatiboa ez da garrantzitsua: komandoa kgpooyamlall komandoaren baliokidea da kgpoalloyaml.
Ez dituzu osagai guztiak alias gisa erabili behar. Adibidez k, kg, klo, ksys, kgpo ere erabil daiteke. Gainera, aliasak eta ohiko komandoak edo aukerak konbina ditzakezu komando lerroan:
Adibidez:
Horren ordez kubectl proxy idatz dezakezu k proxy.
Horren ordez kubectl get roles idatz dezakezu kg roles (Gaur egun ez dago Roles baliabiderako aliasik).
Pod zehatz baterako datuak lortzeko, komandoa erabil dezakezu kgpo my-pod β kubectl get pod my-pod.
Kontuan izan ezizena batzuek komando-lerroko argumentua behar dutela. Adibidez, ezizena kgpol esan nahi du kubectl get pods -l. Aukera -l argumentu bat eskatzen du - etiketa zehaztapen bat. Alias ββbat erabiltzen baduzu, itxura izango du kgpol app=ui.
Ezizen batzuek argumentuak behar dituztenez, a, f eta l ezizenak erabili behar dira azkena.
Orokorrean, eskema hau ikasi ondoren, exekutatu nahi dituzun komandoetatik aliasak era intuitiboki atera ditzakezu eta idazteko denbora asko aurreztu.
instalazioa
Kubectl-aliases instalatzeko, fitxategia deskargatu behar duzu .kubectl_aliases GitHub-etik eta sartu fitxategian ~/.bashrc edo ~/.zshrc:
source ~/.kubectl_aliases
Osaketa automatikoa
Lehen esan dugun bezala, askotan hitz gehigarriak gehitzen dizkiozu komando lerroko alias bati. Adibidez:
$ kgpooyaml test-pod-d4b77b989
Kubectl komandoa osatzea erabiltzen baduzu, ziurrenik baliabideen izenak bezalako gauzetarako osatze automatikoa erabili duzu. Baina hori egin al daiteke aliasak erabiltzen direnean?
Oso galdera garrantzitsua da, osatze automatikoak funtzionatzen ez badu, ezizenen abantaila batzuk galduko dituzulako.
Erantzuna erabiltzen ari zaren shell-aren araberakoa da:
Zsh-entzat, alias-a osatzea kaxatik kanpo funtzionatzen du.
Bash-entzat, zoritxarrez, lan batzuk behar dira osatze automatikoa funtziona dezan.
Bash-en ezizenen osatze automatikoa gaitzen
Bash-en arazoa da (Tab sakatzen duzun bakoitzean) ezizena osatzen saiatzen dela, ezizena aipatzen duen komandoa baino (Zsh-ek egiten duen bezala, adibidez). 800 alias guztietarako osatze-scriptik ez duzunez, osatze automatikoak ez du funtzionatzen.
Proiektu ezizena osoa arazo honi irtenbide orokorra ematen dio. Aliasetarako osatze-mekanismora konektatzen da, barrutik aliasa komando batera zabaltzen du eta osatzeko aukerak itzultzen ditu osatutako komandoa. Horrek esan nahi du alias baten betegarriak komando oso baten antzera jokatzen duela.
Jarraian, lehenik complete-alias nola instalatu eta gero nola konfiguratu kubectl ezizena guztien osaketa gaitzeko azalduko dut.
Complete-alias instalatzen
Lehenik eta behin, ezizena osoa araberakoa da bash-osaketa. Hori dela eta, complete-alias instalatu aurretik, bash-completion instalatuta dagoela ziurtatu behar duzu. Instalazio argibideak aurretik eman dira Linux eta MacOSentzat.
Ohar garrantzitsua MacOS erabiltzaileentzat: kubectl osatze automatikoaren script-a bezala, complete-alias-ek ez du funtzionatzen Bash 3.2-rekin, hau da, MacOSen lehenetsia. Bereziki, complete-alias bash-completion v2-ren araberakoa da (brew install bash-completion@2), gutxienez Bash 4.1 behar duena. Horrek esan nahi du MacOSen full-alias erabiltzeko Bash-en bertsio berriagoa instalatu behar duzula.
Shell-a berrabiarazi ondoren, complete-alias guztiz instalatuko da.
Kubectl ezizenen osatze automatikoa gaitzen
Teknikoki complete-alias-ek bilgarri funtzioa eskaintzen du _complete_alias. Funtzio honek aliasa egiaztatzen du eta alias komandoa osatzeko aholkuak itzultzen ditu.
Funtzio bat alias zehatz batekin lotzeko, integratutako Bash mekanismoa erabili behar duzu bete, instalatzeko _complete_alias alias osatzeko funtzio gisa.
Adibide gisa, har dezagun k ezizena, kubectl komandoa adierazten duena. instalatzeko _complete_alias Alias ββhonen osagarri funtzio gisa, komando hau exekutatu beharko zenuke:
$ complete -F _complete_alias k
Horren emaitza da k ezizena automatikoki osatzean, funtzioari deitzen zaiola _complete_alias, aliasa egiaztatzen duena eta komandoa osatzeko aholkuak itzultzen dituena kubectl.
Bigarren adibide gisa, har dezagun ezizena kg, adierazten duena kubectl get:
$ complete -F _complete_alias kg
Aurreko adibidean bezala, kg automatikoki osatzean, lortuko zenituzkeen osatzeko aholku berdinak jasoko dituzu. kubectl get.
Kontuan izan complete-alias erabil dezakezula zure sistemako edozein ezizenarentzat.
Hori dela eta, kubectl ezizena guztien osatze automatikoa gaitzeko, goiko komandoa exekutatu behar duzu horietako bakoitzarentzat. Hurrengo zatiak horixe egiten du, baldin eta kubectl-aliasak ezarri badituzu ~/.kubectl-aliases:
for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//' ~/.kubectl_aliases);
do
complete -F _complete_alias "$_a"
done
Kode zati hau zurean jarri behar da ~/.bashrc, berrabiarazi komando-shella eta osatze automatikoa erabilgarri egongo da 800 kubectl ezizena guztientzat.
6. Kubectl pluginekin zabaltzea
Noiztik hasita 1.12. bertsioa, kubectl-ek onartzen du plugin mekanismoa, bere funtzioak komando gehigarriekin zabaltzeko aukera ematen duena.
Ezagutzen baduzu Git pluginen mekanismoak, orduan kubectl pluginak printzipio berdinean eraikitzen dira.
Kapitulu honetan, pluginak nola instalatu, non aurkitu eta zure pluginak nola sortu azalduko dugu.
Pluginak instalatzea
Kubectl pluginak fitxategi exekutagarri soil gisa banatzen dira, antzeko izenarekin kubectl-x. Aurrizkia kubectl- beharrezkoa da, eta ondoren pluginari deitzeko aukera ematen duen kubectl azpikomando berri bat dago.
Adibidez, kaixo plugina izeneko fitxategi gisa banatuko da kubectl-hello.
Plugin-a instalatzeko, fitxategia kopiatu behar duzu kubectl-x zure PATH-eko edozein direktoriotara eta egin exekutagarria, adibidez chmod +x. Honen ondoren berehala dei dezakezu plugin-era kubectl x.
Komando hau erabil dezakezu zure sisteman instalatuta dauden plugin guztiak zerrendatzeko:
$ kubectl plugin list
Komando honek abisuak ere bistaratuko ditu izen bereko hainbat plugin badituzu edo exekutagarria ez den plugin-fitxategi bat badago.
Krew erabiliz pluginak aurkitzea eta instalatzea
Kubectl pluginak software paketeen antzera partekatu edo berrerabili daitezke. Baina non aurki ditzakezu besteek partekatu dituzten pluginak?
Krew proiektua kubectl pluginak partekatzeko, bilatzeko, instalatzeko eta kudeatzeko irtenbide bateratua eskaintzea du helburu. Proiektuak "kubectl pluginen pakete kudeatzailea" deitzen du bere burua (Krew-en antzekoa da Brew).
Krew hautatu eta instala ditzakezun kubectl pluginen zerrenda da. Aldi berean, Krew kubectl-erako plugin bat ere bada.
Horrek esan nahi du Krew instalatzeak funtsean beste edozein kubectl plugin instalatzeak bezala funtzionatzen duela. Jarraibide zehatzak helbidean aurki ditzakezu GitHub orria.
Kontuan izan Krew erabiliz pluginak instalatzeak ez duela oztopatzen goian azaldutako metodo estandarra erabiliz pluginak instalatzea.
Kontuan izan komandoa kubectl krew list Krew erabiliz instalatutako pluginak soilik bistaratzen ditu, komandoak, berriz kubectl plugin list plugin guztiak zerrendatzen ditu, hau da, Krew erabiliz instalatutakoak eta beste metodo batzuekin instalatutakoak.
Pluginak beste nonbait aurkitzea
Krew proiektu gaztea da, gaur egun bere baitan zerrenda 30 plugin inguru bakarrik. Ezin baduzu aurkitu behar duzuna, pluginak aurki ditzakezu beste nonbait, GitHub adibidez.
GitHub atalean ikustea gomendatzen dut kubectl-pluginak. Bertan kontsultatu beharreko dozenaka plugin eskuragarri aurkituko dituzu.
Zure pluginak idazten
zuk zeuk ahal duzu pluginak sortu - Ez da zaila. Behar duzuna egiten duen exekutagarri bat sortu behar duzu, izena eman kubectl-x eta instalatu goian azaldu bezala.
Fitxategia bash script bat, python script bat edo konpilatutako GO aplikazio bat izan daiteke - berdin du. Baldintza bakarra sistema eragilean zuzenean exekutatu ahal izatea da.
Sortu dezagun plugin adibide bat oraintxe bertan. Aurreko atalean, kubectl komandoa erabili duzu pod bakoitzeko edukiontziak zerrendatzeko. Erraza da komando hau dei dezakezun plugin batean bihurtzea adibidez. kubectl img.
Sortu fitxategi bat kubectl-img honako eduki hau:
#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image'
Orain egin fitxategia exekutagarri honekin chmod +x kubectl-img eta eraman ezazu zure PATH-eko edozein direktoriotara. Honen ondoren berehala plugina erabil dezakezu kubectl img.
Esan bezala, kubectl pluginak edozein programazio edo script-lengoaian idatz daitezke. Shell script-ak erabiltzen ari bazara, pluginaren barruan kubectl erraz deitzeko aukera izatearen abantaila. Hala ere, plugin konplexuagoak idatz ditzakezu benetako programazio-lengoaia erabiliz Kubernetes bezeroen liburutegia. Go erabiltzen ari bazara, ere erabil dezakezu cli-runtime liburutegia, kubectl pluginak idazteko bereziki existitzen dena.
Nola partekatu zure pluginak
Zure pluginak besteentzat erabilgarriak izan daitezkeela uste baduzu, anima zaitez GitHub-en partekatu. Ziurtatu gaiari gehitzea kubectl-pluginak.