
Om du arbetar med Kubernetes Àr kubectl sannolikt ett av de mest anvÀnda verktygen. Varje gÄng du lÀgger ner mycket tid pÄ att arbeta med ett visst verktyg, Àr det vÀrt att lÀra sig det ordentligt och förstÄ hur man anvÀnder det effektivt.
Team översatte artikeln av Daniel Weibel, dÀr du hittar tips och tricks för att arbeta effektivt med kubectl. Den kommer ocksÄ att hjÀlpa dig att fÄ en djupare förstÄelse för hur Kubernetes fungerar.
Enligt författaren Àr syftet med artikeln att göra ditt dagliga arbete med Kubernetes bÄde mer effektivt och mer angenÀmt!
Introduktion: vad Àr kubectl
Innan du lÀr dig att anvÀnda kubectl mer effektivt behöver du fÄ en grundlÀggande förstÄelse för vad det Àr och hur det fungerar.
Ur anvÀndarens perspektiv Àr kubectl ett kontrollpanel som lÄter dig utföra operationer i Kubernetes.
Ur teknisk synvinkel Àr kubectl en klient för Kubernetes API.
Kubernetes API Àr ett HTTP REST API. Detta API Àr det verkliga anvÀndargrÀnssnittet för Kubernetes, genom vilket det helt kontrolleras. Det betyder att varje Kubernetes-operation representeras som en API-slutpunkt och kan utföras med en HTTP-förfrÄgan till den slutpunkten.
DÀrför Àr kubectl:s huvuduppgift att utföra HTTP-förfrÄgningar till Kubernetes API:

Kubernetes Àr ett helt resursorienterat system. Det innebÀr att det upprÀtthÄller det interna tillstÄndet för resurser, och alla Kubernetes-operationer Àr CRUD-operationer.
Du har full kontroll över Kubernetes genom att hantera dessa resurser, och Kubernetes tar reda pÄ vad som ska göras baserat pÄ det aktuella tillstÄndet för resurserna. Av denna anledning Àr lÀnken till Kubernetes API organiserad i form av en lista över resurstyper med relaterade operationer.
LÄt oss titta pÄ ett exempel.
Anta att du vill skapa en resurs ReplicaSet. För att göra detta beskriver du ReplicaSet i en fil med namnet replicaset.yaml, och sedan kör du kommandot:
$ kubectl create -f replicaset.yamlSom ett resultat kommer resursen ReplicaSet att skapas. Men vad hÀnder bakom kulisserna?
I Kubernetes finns det en operation för att skapa ReplicaSet. Precis som alla andra operationer tillhandahÄlls den som en API-slutpunkt. Den specifika API-slutpunkten för denna operation ser ut sÄ hÀr:
POST /apis/apps/v1/namespaces/{namespace}/replicasetsAPI-slutpunkterna för alla Kubernetes-operationer kan hittas i inklusive ). För att göra en faktisk förfrÄgan till slutpunkten mÄste du först lÀgga till API-serverns URL till de slutpunktsvÀgar som anges i API-dokumentationen.
DÀrför, nÀr du kör det angivna kommandot, skickar kubectl en HTTP POST-förfrÄgan till den angivna API-slutpunkten. Definitionen av ReplicaSet som du angett i filen replicaset.yaml, överförs i begÀrans kropp.
SÄ fungerar kubectl för alla kommandon som interagerar med Kubernetes-klustret. I alla dessa fall skickar kubectl helt enkelt HTTP-förfrÄgningar till de motsvarande Kubernetes API-slutpunkterna.
Observera att du kan hantera Kubernetes helt med ett verktyg som curl, genom att manuellt skicka HTTP-förfrÄgningar till Kubernetes API. Kubectl förenklar bara anvÀndningen av Kubernetes API.
Detta Àr grunderna för vad kubectl Àr och hur det fungerar. Men det finns ocksÄ nÄgot om Kubernetes API som varje kubectl-anvÀndare bör veta. LÄt oss kort dyka ner i Kubernetes inre vÀrld.
Kubernetes inre vÀrld
Kubernetes bestÄr av en uppsÀttning oberoende komponenter som körs som separata processer pÄ klustrets noder. Vissa komponenter körs pÄ huvudnoder, andra pÄ arbetande noder, och varje komponent utför sin specifika uppgift.
HÀr Àr de viktigaste komponenterna pÄ huvudnoder:
- Lagring â lagrar resursdefinitioner ().
- API-servern â tillhandahĂ„ller API och hanterar lagringen.
- Controller Manager â sĂ€kerstĂ€ller att resursstatusar överensstĂ€mmer med specifikationerna.
- SchemalĂ€ggare â planerar pods pĂ„ arbetande noder.
Och hÀr Àr en av de viktigaste komponenterna pÄ arbetande noder:
- Kubelet â hanterar körningen av containrar pĂ„ den arbetande noden.
För att förstÄ hur dessa komponenter arbetar tillsammans, lÄt oss titta pÄ ett exempel.
Anta att du precis har kört kubectl create -f replicaset.yaml, efter vilket kubectl gjorde en HTTP POST-förfrÄgan till (skickade resursdefinitionen av ReplicaSet).
Vad hÀnder i klustret?
- Efter att ha kört
kubectl create -f replicaset.yamlAPI-servern sparar din ReplicaSet-resursdefinition i lagringen:
- DĂ€refter startar ReplicaSet-controllern i Controller Manager, som hanterar skapande, modifiering och borttagning av ReplicaSet-resurser:

- ReplicaSet-controllern skapar en pod-definition för varje ReplicaSet-replik (enligt pod-mallen i ReplicaSet-definitionen) och sparar dem i lagringen:

- SchemalÀggaren startar och övervakar poddar som Ànnu inte har tilldelats nÄgon arbetsnod:

- SchemalÀggaren vÀljer en lÀmplig arbetsnod för varje pod och lÀgger till denna information i poddefinitionen i lagret:

- PÄ den arbetsnod dÀr en pod har tilldelats startas Kubelet, som övervakar poddar som Àr tilldelade denna nod:

- Kubelet lÀser poddefinitionen frÄn lagret och ger kommandon till containermiljön, till exempel Docker, att starta containrar pÄ noden:

Nedan Àr en textversion av denna beskrivning.
Ett API-anrop till slutpunkten för att skapa ReplicaSet hanteras av API-servern. API-servern autentiserar förfrÄgan och lagrar definitionen av ReplicaSet-resursen i lagret.
Denna hÀndelse aktiverar ReplicaSet-kontrollern, som Àr en subprocess av kontrollhanteraren. ReplicaSet-kontrollern övervakar skapandet, uppdateringen och borttagningen av ReplicaSet-resurser i lagret och fÄr en avisering om hÀndelsen nÀr detta intrÀffar.
Kontrollerns uppgift för ReplicaSet Àr att sÀkerstÀlla att det finns det önskade antalet poddar av ReplicaSet. I vÄrt exempel finns det för nÀrvarande inga poddar, sÄ ReplicaSet-kontrollern skapar dessa poddefinitioner (enligt podmallen i ReplicaSet-definitionen) och lagrar dem i lagret.
Skapandet av nya poddar aktiverar schemalÀggaren, som övervakar poddefinitioner som Ànnu inte har schemalagts för arbetsnoder. SchemalÀggaren vÀljer en lÀmplig arbetsnod för varje pod och uppdaterar poddefinitioner i lagret.
Observera att ingen kod för arbetsbelastningen har körts nĂ„gonstans i klustret fram till denna punkt. Allt som har gjorts hittills, â Ă€r att skapa och uppdatera resurser i lagret pĂ„ huvudnoden.
Den senaste hÀndelsen aktiverar Kubelet, som övervakar poddar som schemalagts för deras arbetsnoder. Kubelet pÄ arbetsnoden dÀr dina ReplicaSet-poddar Àr tilldelade mÄste ge instruktioner till containermiljön, till exempel Docker, att ladda ner de nödvÀndiga containerbilderna och starta dem.
Vid denna punkt Àr Àntligen din ReplicaSet-applikation igÄng!
API:ets roll i Kubernetes
Som du sÄg i det föregÄende exemplet, övervakar Kubernetes-komponenterna (med undantag för API-servern och lagret) förÀndringar av resurser i lagret och modifierar resursinformation i lagret.
SjÀlvklart interagerar dessa komponenter inte med lagringen direkt, utan endast via Kubernetes API.
LÄt oss titta pÄ följande exempel:
- ReplicaSet-controllern anvÀnder API-slutpunkten med parametern
övervakaför att övervaka förÀndringar i resurserna för ReplicaSet. - ReplicaSet-controllern anvÀnder API-slutpunkten (skapa pod) för att skapa poddar.
- SchemalÀggaren anvÀnder API-slutpunkten (Àndra pod) för att uppdatera poddar med information om den valda arbetsnoden.
Som du kan se, Àr detta samma API som kubectl anvÀnder. Att anvÀnda samma API för att arbeta med interna komponenter och externa anvÀndare Àr en grundlÀggande designkoncept för Kubernetes.
Nu kan vi sammanfatta hur Kubernetes fungerar:
- Lagringen sparar tillstÄndet, det vill sÀga Kubernetes-resurser.
- API-servern erbjuder ett grÀnssnitt till lagringen i form av Kubernetes API.
- Alla andra komponenter och anvÀndare av Kubernetes lÀser, övervakar och manipulerar tillstÄndet (resurserna) i Kubernetes via API.
Att kÀnna till dessa koncept hjÀlper till att bÀttre förstÄ kubectl och anvÀnda det maximalt.
Nu ska vi titta pÄ en rad konkreta tips och trick som kan förbÀttra anvÀndningen av kubectl.
1. Snabba upp inmatningen med kommandokomplettering
Ett av de mest anvÀndbara, men ofta förbisedd tricket för att öka produktiviteten med kubectl Àr kommandokomplettering.
Kommandokomplettering gör att du automatiskt kan fylla i delar av kubectl-kommandon med Tab-tangenten. Detta fungerar för underkommandon, alternativ och argument, inklusive sÄdana som Àr komplexa, som resursnamn.
Se hur kommandokompletteringen fungerar i kubectl:

Kommandokomplettering fungerar för Bash- och Zsh-kommandoradsmiljöer.
innehÄller detaljerade instruktioner för hur du stÀller in autocompletion, men nedan ger vi en kort sammanfattning.
Hur kommandokomplettering fungerar
Kommandokomplettering Àr en skalfunktion som fungerar med hjÀlp av ett kompletteringsskript. Kompletteringsskriptet Àr ett skalprogram som definierar beteendet för kompletteringen för ett specifikt kommando.
Kubectl genererar automatiskt och visar kompletteringsskript för Bash och Zsh med följande kommandon:
$ kubectl completion bashEller:
$ kubectl completion zshTeoretiskt Àr det tillrÀckligt att koppla utdata frÄn dessa kommandon i den motsvarande kommandoradsmiljön för att kubectl ska kunna komplettera kommandon.
I praktiken skiljer sig metoden för anslutning mellan Bash (inklusive skillnader mellan Linux och MacOS) och Zsh. Nedan gÄr vi igenom alla dessa alternativ.
Bash i Linux
Kompletteringsskriptet för Bash beror pÄ paketet bash-completion, sÄ du mÄste först installera det:
$ sudo apt-get install bash-completionEller:
$ yum install bash-completionDu kan testa att paketet har installerats korrekt med följande kommando:
$ type _init_completion Om det hÀr visar koden för kommandot, sÄ Àr bash-completion korrekt installerat. Om kommandot ger ett felmeddelande "Inte hittad", mÄste du lÀgga till följande rad i din fil ~ /.bashrc:
$ source /usr/share/bash-completion/bash_completion Om det behövs att lÀgga till denna rad i filen ~ /.bashrc beror pÄ paketförvaltaren som du anvÀnde för att installera bash-completion. För APT Àr det nödvÀndigt, för YUM Àr det inte.
Efter installationen av bash-completion mÄste allt konfigureras sÄ att kompletteringsskriptet kubectl aktiveras i alla kommandotolk-sessioner.
Ett sÀtt att göra detta Àr att lÀgga till följande rad i filen ~ /.bashrc:
source <(kubectl completion bash) Ett annat sÀtt Àr att lÀgga till kubectl-kompletteringsskriptet i katalogen /etc/bash_completion.d (skapa den om den inte finns):
$ kubectl completion bash >/etc/bash_completion.d/kubectl Alla kompletteringsskript i katalogen /etc/bash_completion.d aktiveras automatiskt i bash-completion.
BÄda alternativen Àr lika giltiga.
Efter omstart av kommandotolken kommer kommandon för kubectl att autokompletteras.
Bash i MacOS
I MacOS Àr instÀllningen lite mer komplicerad. Problemet Àr att MacOS som standard anvÀnder Bash version 3.2, och skriptet för autokomplettering kubectl krÀver Bash version 4.1 eller högre och fungerar inte i Bash 3.2.
AnvÀndningen av den förÄldrade versionen av Bash i MacOS beror pÄ licensfrÄgor. Bash version 4 distribueras under GPLv3-licensen, som Apple inte stöder.
För att stÀlla in autokomplettering för kubectl i MacOS mÄste du installera en nyare version av Bash. Du kan ocksÄ installera den uppdaterade Bash som standardkommandotolk, vilket kommer att spara dig en hel del problem i framtiden. Det Àr enkelt, detaljer finns i artikeln "».
Innan du fortsÀtter, se till att du anvÀnder en ny version av Bash (kontrollera utdata bash --version).
Autokompletteringsskriptet i Bash beror pÄ projektet , sÄ du mÄste först installera det.
Du kan installera bash-completion med :
$ brew install bash-completion@2 HÀr @2 betyder bash-completion version 2. Autokomplettering av kubectl krÀver bash-completion v2, och bash-completion v2 krÀver Bash version minst 4.1.
Kommandots utdata brew-install innehĂ„ller en sektion Caveats, dĂ€r det anges att du behöver lĂ€gga till i filen Ë/.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" Men jag rekommenderar att lĂ€gga till dessa rader inte i Ë/.bash_profile, och i ~/.bashrc. I sĂ„ fall kommer autokomplettering att vara tillgĂ€nglig inte bara i huvudsakliga, utan ocksĂ„ i underliggande kommandotolkar.
Efter att ha startat om kommandotolken kan du kontrollera installationens korrekthet med följande kommando:
$ type _init_completionOm du i utskriften ser en shell-funktion, Àr allt korrekt instÀllt.
Nu behöver du se till att autokomplettering av kubectl Àr aktiverat i alla sessioner.
Ett sÀtt Àr att lÀgga till följande rad i din ~/.bashrc:
source <(kubectl completion bash) Det andra sÀttet Àr att lÀgga till autokompletteringskriptet i mappen /usr/local/etc/bash_completion.d:
$ kubectl completion bash
>/usr/local/etc/bash_completion.d/kubectlDetta sÀtt fungerar endast om du har installerat bash-completion med Homebrew. I sÄ fall laddar bash-completion alla skript frÄn denna katalog.
Om du har installerat , behöver du inte utföra det föregÄende steget, eftersom autokompletteringsskriptet automatiskt kommer att placeras i mappen /usr/local/etc/bash_completion.d vid installationen. I sÄ fall börjar autokomplettering av kubectl fungera sÄ snart du har installerat bash-completion.
I slutÀndan Àr alla dessa alternativ ekvivalenta.
Zsh
Autokompletteringsskript för Zsh krÀver inga beroenden. Allt du behöver göra Àr att aktivera dem vid inlÀsning av kommandotolken.
Du kan göra detta genom att lÀgga till en rad i din ~/.zshrc fil:
source <(kubectl completion zsh) Om du fÄr felet not found: compdef efter att ha startat om din tol kommandotolken, behöver du aktivera den inbyggda funktionencompdef ~/.zshrc följande:
. Du kan aktivera den genom att lÀgga till i början av din filautoload -Uz compinit compinit
2. Snabb översikt av resursdefinitioner
NÀr du skapar YAML-resursdefinitioner behöver du kÀnna till fÀlten och deras vÀrden för dessa resurser. En plats att söka efter denna information Àr i API-handboken, som innehÄller fullstÀndiga specifikationer för alla resurser. kubectl explain, som visar specifikationerna för alla resurser direkt i din terminal.
Kommandots format Àr följande:
$ kubectl explain resource[.field]...Teamet kommer att visa specifikationen för den begÀrda resursen eller fÀltet. Den visade informationen Àr densamma som den som finns i API-dokumentationen.
Som standard kubectl explain visar endast det första nivÄn av fÀltens inbÀddning.
Se hur det ser ut .
Du kan visa hela trÀdet genom att lÀgga till alternativet --recursive:
$ kubectl explain deployment.spec --recursiveOm du inte exakt vet vilka resurser som behövs kan du visa dem alla med följande kommando:
$ kubectl api-resources Detta kommando visar resursnamnen i pluralform, till exempel, deployment istÀllet för deployment. Det visar ocksÄ kortnamnet, till exempel deploy, för de resurser som har det. Oroa dig inte för dessa skillnader. Alla dessa namnformer Àr likvÀrdiga för kubectl. Det betyder att du kan anvÀnda vilken som helst av dem för kubectl explain.
Alla följande kommandon Àr likvÀrdiga:
$ kubectl explain deployments.spec
# eller
$ kubectl explain deployment.spec
# eller
$ kubectl explain deploy.spec3. AnvÀnd ett anpassat format för kolumner
Som standard Àr formatet för kommandoutdata 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 78dDetta format Àr anvÀndbart, men det innehÄller en begrÀnsad mÀngd information. JÀmfört med det kompletta resursdefinitionsformatet visas hÀr bara nÄgra fÄ fÀlt.
I detta fall kan du anvÀnda ett anpassat format för kolumner. Det lÄter dig specificera vilka data som ska visas. Du kan visa vilket fÀlt som helst av resursen i en separat kolumn.
AnvÀndningen av anpassat format definieras med hjÀlp av alternativ:
-o custom-columns=:[,:]... Du kan definiera varje utdata kolumn med ett par , dĂ€r â kolumnnamnet, och <jsonpath> â ett uttryck som definierar resursfĂ€ltet.
LÄt oss titta pÄ ett enkelt exempel:
$ kubectl get pods -o custom-columns='NAME:metadata.name'
NAME
engine-544b6b6467-22qr6
engine-544b6b6467-lw5t8
engine-544b6b6467-tvgmg
web-ui-6db964458-8pdw4Utdatan innehÄller en kolumn med namnen pÄ poddarna.
Uttrycket i alternativet vÀljer namnen pÄ poddarna frÄn fÀltet metadata.name. Detta beror pÄ att poddavsnittets namn definieras i det underliggande fÀltet name i poddens resursbeskrivning. Du kan lÀsa mer i metadata API-dokumentationen kubectl explain pod.metadata.name kubectl förklara pod.metadata.namn.
Anta sÄ att du vill lÀgga till en extra kolumn i utdata, till exempel som visar noden som varje pod körs pÄ. För att göra detta kan du helt enkelt lÀgga till den relevanta kolumnspecifikationen i alternativet för anpassade kolumner:
$ 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 Uttrycket vĂ€ljer nodens namn frĂ„n spec.nodeName â nĂ€r en pod tilldelas en nod skrivs dess namn in i fĂ€ltet spec.nodeName resursens specifikation för podden. Mer information kan ses i utdata frĂ„n kubectl explain pod.spec.nodeName.
Observera att Kubernetes resursfÀlt Àr skiftlÀgeskÀnsliga.
Du kan se vilket resursfÀlt som helst som en kolumn. Titta bara pÄ resursens specifikation och testa med vilka fÀlt du vill.
Men först ska vi titta nÀrmare pÄ fÀltvaluttryck.
JSONPath-uttryck
Uttryck för att vÀlja resursfÀlt baseras pÄ .
JSONPath Àr ett sprÄk för att hÀmta data frÄn JSON-dokument. Att vÀlja ett fÀlt Àr det enklaste anvÀndningsfallet för JSONPath. Det har mycket , inklusive vÀxlare, filter och sÄ vidare.
Kubectl explain stöder ett begrÀnsat antal JSONPath-funktioner. Nedan beskrivs funktionerna och exempel pÄ deras anvÀndning:
# ĐŃбŃаŃŃ ĐČŃĐ” ŃĐ»Đ”ĐŒĐ”ĐœŃŃ ŃпОŃĐșа
$ 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ören [] har en speciell betydelse. MÄnga Kubernetes resursfÀlt Àr listor, och denna operator gör det möjligt att vÀlja element frÄn dessa listor. Den anvÀnds ofta med wildcard som [*] för att vÀlja alla element i listan.
TillÀmpningsexempel
Möjligheterna att anvÀnda anpassad kolumnutdataformat Àr oÀndliga, eftersom du kan visa vilket fÀlt eller kombination av fÀlt som helst i utdata. HÀr Àr nÄgra exempel pÄ anvÀndningar, men tveka inte att utforska dem sjÀlv och hitta anvÀndningar som Àr anvÀndbara för dig.
- Visa containerbilder för poddar:
$ 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 wordpressDetta kommando visar namnen pÄ containerbilderna för varje pod.
Kom ihÄg att ett underlag kan innehÄlla flera containrar, dÄ kommer bildnamnen att visas i en rad separerade med kommatecken.
- Visning av zoner för tillgÀnglighet av noder:
$ 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-1bDetta kommando Àr praktiskt om din kluster Àr vÀrd i en offentlig moln. Det visar tillgÀnglighetszonen för varje nod.
En tillgÀnglighetszon Àr ett molnkonstrukt som begrÀnsar replikeringszonen till ett geografiskt omrÄde.
TillgĂ€nglighetszoner för varje nod fĂ„rs genom en speciell etikett â . Om klustret körs i ett offentligt moln, skapas denna etikett automatiskt och fylls med namnen pĂ„ tillgĂ€nglighetszonerna för varje nod.
Etiketter Àr inte en del av Kubernetes resurs specifikation, sÄ du kommer inte att hitta information om dem i . Men de kan ses (liksom alla andra etiketter) om du begÀr information om noder i YAML eller JSON-format:
$ kubectl get nodes -o yaml # eller $ kubectl get nodes -o jsonDetta Àr ett utmÀrkt sÀtt att lÀra sig mer om resurser, utöver att studera resurs specifikationerna.
4. LÀtt att vÀxla mellan kluster och namnrymder
NÀr kubectl gör en förfrÄgan till Kubernetes API, lÀser den kubeconfig-filen för att fÄ alla nödvÀndiga parametrar för anslutning.
Som standard Àr kubeconfig-filen ~/.kube/config. Denna fil skapas eller uppdateras vanligtvis med ett sÀrskilt kommando.
NÀr du arbetar med flera kluster innehÄller din kubeconfig-fil anslutningsparametrar för alla dessa kluster. Du behöver ett sÀtt att ange för kubectl vilket kluster du arbetar med.
Inom klustret kan du skapa flera namnrymder â en typ av virtuellt kluster inom ett fysiskt kluster. Kubectl bestĂ€mmer vilken namnrymd som ska anvĂ€ndas baserat pĂ„ uppgifterna i kubeconfig-filen. Det betyder att du ocksĂ„ behöver ett sĂ€tt att ange för kubectl vilken namnrymd som ska anvĂ€ndas.
I det hÀr avsnittet kommer vi att förklara hur detta fungerar och hur du kan uppnÄ effektiv drift.
Observera att du kan ha flera kubeconfig-filer listade i miljövariabeln KUBECONFIG. I sÄ fall kommer alla dessa filer att slÄs samman till en gemensam konfiguration under körning. Du kan ocksÄ Àndra den anvÀnda standardkubeconfig-filen genom att köra kubectl med parametern --kubeconfig. Se .
Kubeconfig-filer
LÄt oss titta pÄ vad kubeconfig-filen faktiskt innehÄller:

Som du kan se innehÄller kubeconfig-filen en uppsÀttning kontexter. En kontext bestÄr av tre element:
- Cluster â API-serverns URL för klustret.
- User â autentiseringsuppgifter för anvĂ€ndaren i klustret.
- Namespace â namnutrymme som anvĂ€nds vid anslutning till klustret.
I praktiken anvÀnds ofta en kontext per kluster i din kubeconfig-fil. Du kan dock ha flera kontexter per kluster, som skiljer sig Ät beroende pÄ anvÀndare eller namnutrymme. Men en sÄdan konfiguration med flera kontexter förekommer sÀllan, sÄ det finns vanligtvis en entydig koppling mellan kluster och kontexter.
Vid varje tidpunkt Àr en av kontexterna aktuell:

NÀr kubectl lÀser konfigurationsfilen tas alltid information frÄn den aktuella kontexten. I exemplet ovan kommer kubectl att ansluta till klustret Hare.
För att byta till ett annat kluster mÄste den aktuella kontexten i kubeconfig-filen Àndras:

Nu kommer kubectl att ansluta till klustret Fox.
För att byta till ett annat namnutrymme i samma kluster mÄste vÀrdet för elementet namespace för den aktuella kontexten Àndras:

I det ovanstÄende exemplet kommer kubectl att anvÀnda namnutrymmet Prod för klustret Fox (tidigare var namnutrymmet Test instÀllt).
Observera att kubectl ocksÄ tillhandahÄller parametrar --cluster, --user, --namespace och --context, som gör att du kan skriva över individuella element och sjÀlva den aktuella kontexten, oavsett vad som Àr instÀllt i kubeconfig-filen. Se kubectl options.
Teoretiskt kan du manuellt Àndra parametrarna i kubeconfig-filen. Men det Àr obekvÀmt. För att förenkla dessa operationer finns det olika verktyg som gör det möjligt att Àndra parametrar automatiskt.
AnvÀnd kubectx
Ett mycket populÀrt verktyg för att vÀxla mellan kluster och namnutrymmen.
Verktyget erbjuder kommandon kubectx och kubens för att Àndra den aktuella kontexten och namnrymden dÀrefter.
Som nÀmnts tidigare innebÀr att Àndra den aktuella kontexten att Àndra kluster om du har endast en kontext pÄ klustret.
HÀr Àr ett exempel pÄ att köra dessa kommandon:

I grund och botten redigerar dessa kommandon helt enkelt kubeconfig-filen, som beskrivits ovan.
För att installera kubectx, följ instruktionerna pÄ
BÄda kommandona stöder autocompletion av namn pÄ kontexter och namnrymder, vilket gör att du inte behöver skriva dem helt. Instruktioner för att stÀlla in autocompletion .
En annan anvÀndbar funktion kubectx denna funktion ett omslag runt modulen Crypt::UnixCrypt och utgör ingen fara, men i det levererade arkivet pÄ Sourceforge anropas kod som direkt refererar till \/etc\/shadow, men gör det genom en shell-konstruktion. För att genomföra attacken rÀcker det med att ange tecknet "|" i fÀltet för det gamla lösenordet och koden efter detta kommer att köras med root-behörighet pÄ servern. . Det fungerar tillsammans med verktyget , som mÄste installeras separat. Att installera fzf gör automatiskt det interaktiva lÀget tillgÀngligt i kubectx. I det interaktiva lÀget kan du vÀlja kontext och namnrymd genom det interaktiva grÀnssnittet för fri sökning som fzf tillhandahÄller.
AnvÀndning av kommandoradsalias
Du behöver inga separata verktyg för att Àndra den aktuella kontexten och namnrymden, eftersom kubectl ocksÄ tillhandahÄller kommandon för detta. SÄ kommandot kubectl config tillhandahÄller underkommandon för att redigera kubeconfig-filer.
HÀr Àr nÄgra av dem:
kubectl config get-contexts: lista alla kontexter;kubectl config current-context: fÄ den aktuella kontexten;kubectl config use-context: Àndra den aktuella kontexten;kubectl config set-context: Àndra kontextobjektet.
Men det Àr inte sÀrskilt praktiskt att anvÀnda dessa kommandon direkt eftersom de Àr lÄnga. Du kan skapa alias för kommandoraden som Àr lÀtta att köra.
Jag har skapat en uppsÀttning alias baserade pÄ dessa kommandon som erbjuder funktionalitet liknande kubectx. HÀr kan du se dem i aktion:

Observera att aliasen anvÀnder fzf för att tillhandahÄlla ett interaktivt grÀnssnitt för fri sökning (som i det interaktiva lÀget kubectx). Detta innebÀr att du behöver , för att anvÀnda dessa alias.
HÀr Àr sjÀlva definitionerna av aliasen:
# ĐĐŸĐ»ŃŃĐžŃŃ ŃĐ”ĐșŃŃĐžĐč ĐșĐŸĐœŃĐ”ĐșŃŃ
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/^..//")"' För att installera dessa alias, lÀgg till de ovanstÄende definitionerna i din fil ~/.bashrc eller ~/.zshrc och starta om din shell.
AnvÀndning av plugins
Kubectl tillÄter att ladda plugins som körs precis som huvudkommandona. Du kan till exempel installera pluginet kubectl-foo och köra det genom att utföra kommandot kubectl foo.
Det skulle vara praktiskt att byta kontext och namnrymd pÄ det hÀr sÀttet, till exempel köra kubectl ctx för att byta kontext och kubectl ns för att byta namnrymd.
Jag har skrivit tvÄ plugins som gör detta:
Pluginernas funktionalitet baseras pÄ alias frÄn föregÄende avsnitt.
SÄ hÀr fungerar de:

Observera att plugins anvÀnder fzf för att tillhandahÄlla ett interaktivt grÀnssnitt för fritt sökande (som i interaktivt lÀge kubectx). Det betyder att du behöver, för att anvÀnda dessa alias.
För att installera plugins behöver du ladda ner skripten med namnen och till valfri katalog i din PATH-variabel och göra dem körbara, till exempel med chmod +x. Direkt efter detta kan du anvÀnda kubectl ctx och kubectl ns.
5. Minska inmatningen med autoalias
Kommandoalias i skalet Àr ett bra sÀtt att snabba upp inmatningen. Projektet innehÄller cirka 800 förkortningar för grundlÀggande kubectl-kommandon.
Du kanske undrar â hur minns man 800 alias? Men du behöver inte minnas dem alla, eftersom de bygger pĂ„ ett enkelt mönster som beskrivs nedan:

Till exempel:
- kgpooyaml â kubectl get pods oyaml
- ksysgsvcw â kubectl -n kube-system get svc w
- ksysrmcm â kubectl -n kube-system rm cm
- kgdepallsl â kubectl get deployment all sl
Som du ser bestÄr aliasen av komponenter, dÀr varje komponent representerar en specifik del av kubectl-kommandot. Varje alias kan ha en komponent för grundkommandot, operationen och resursen samt flera komponenter för parametrar. Du "fyller" bara i dessa komponenter frÄn vÀnster till höger enligt mönstret ovan.
Den aktuella detaljerade mallen finns pÄ . DÀr kan du ocksÄ hitta.
Till exempel motsvarar aliaset kgpooyamlall kommandot kubectl get pods -o yaml --all-namespaces.
Den relativa ordningen av alternativen Àr inte viktig: kommandot kgpooyamlall Àr ekvivalent med kommandot kgpoalloyaml.
Du behöver inte anvÀnda alla komponenter som alias. Till exempel vÄgvektor, kg, klo, ksys, kgpo kan ocksÄ anvÀndas. Dessutom kan du kombinera alias och vanliga kommandon eller alternativ i kommandoraden:
Till exempel:
- IstÀllet för
kubectl proxykan skrivas somk proxy. - IstÀllet för
kubectl get roleskan skrivas somkg roles(det finns för nÀrvarande inget alias för resursen Roles). - För att fÄ data om en specifik pod kan du anvÀnda kommandot
kgpo my-pod â kubectl get pod my-pod.
TĂ€nk pĂ„ att vissa alias krĂ€ver ett argument i kommandoraden. Till exempel aliaset kgpol betyder kubectl get pods -l. Alternativet -l krĂ€ver ett argument â etikettens specifikation. Om du anvĂ€nder en alias ser den ut som kgpol app=ui.
Eftersom vissa av aliasen krÀver argument mÄste aliasen a, f och l anvÀndas sist.
I allmÀnhet, nÀr du vÀl behÀrskar detta mönster kan du intuitivt extrahera alias frÄn de kommandon du vill köra och spara mycket tid pÄ inmatning.
Installation
För att installera kubectl-aliases mÄste du ladda ner filen frÄn GitHub och inkludera den i filen ~/.bashrc eller ~/.zshrc:
source ~/.kubectl_aliasesAutokomplettering
Som vi redan har nÀmnt lÀgger du ofta till extra ord till aliaset i kommandoraden. Till exempel:
$ kgpooyaml test-pod-d4b77b989Om du anvÀnder autokomplettering för kubectl, har du sannolikt anvÀnt autokomplettering för sÄdana saker som resursnamn. Men kan detta göras nÀr du anvÀnder alias?
Detta Àr en mycket viktig frÄga, eftersom om autokomplettering inte fungerar, tappar du en del av fördelarna med alias.
Svaret beror pÄ vilken kommandoradstolk du anvÀnder:
- För Zsh fungerar autokomplettering för alias 'ur lÄdan'.
- TyvÀrr, för Bash, krÀvs vissa ÄtgÀrder för att fÄ autokompletteringen att fungera.
Aktivering av autokomplettering för alias i Bash
Problemet med Bash Àr att det försöker komplettera (nÀr du trycker pÄ Tab) aliaset, snarare Àn kommandot som aliaset refererar till (som Zsh gör). Eftersom du inte har kompletteringsskript för alla 800 alias fungerar inte autokomplettering.
Projektet erbjuder en generell lösning pÄ detta problem. Den ansluter sig till kompletteringsmekanismen för alias, kompletterar aliaset till kommandot och returnerar kompletteringsalternativ för det kompletterade kommandot. Detta innebÀr att kompletteringen för aliaset beter sig pÄ samma sÀtt som för det fullstÀndiga kommandot.
NÀst kommer jag först att förklara hur du installerar complete-alias, och sedan hur du konfigurerar det för att aktivera komplettering för alla kubectl-alias.
Installation av complete-alias
Först och frÀmst beror complete-alias pÄ . DÀrför mÄste du kontrollera att bash-completion Àr installerat innan du installerar complete-alias. Installationsanvisningarna gavs tidigare för Linux och MacOS.
Viktigt meddelande till MacOS-anvÀndare: precis som skriptet för autokomplettering kubectl, fungerar complete-alias inte med Bash 3.2, som Àr standard i MacOS. Specifikt beror complete-alias pÄ bash-completion v2 (brew install bash-completion@2), som krÀver minst Bash 4.1. Detta innebÀr att du mÄste installera en nyare version av Bash för att anvÀnda complete-alias pÄ MacOS.
Du behöver ladda ner skriptet frÄn och inkludera det i din fil ~/.bashrc:
source ~/bash_completion.shEfter omstart av kommandotolken kommer complete-alias att vara helt installerat.
Aktivering av autocompletion för kubectl-aliaser
Tekniskt sett tillhandahÄller complete-alias en skalfunktion _complete_alias. Denna funktion kontrollerar aliaset och returnerar förslag för autocompletion av aliaskommandot.
För att koppla funktionen till ett specifikt alias behöver du anvÀnda Baashs inbyggda mekanism , för att stÀlla in _complete_alias som en autocompletionfunktion för aliaset.
Som exempel, lÄt oss ta aliaset k, som representerar kubectl-kommandot. För att stÀlla in _complete_alias som autocompletionfunktion för detta alias mÄste du köra följande kommando:
$ complete -F _complete_alias k Resultatet av detta Àr att varje gÄng du autocompleterar aliaset k, anropas funktionen _complete_alias, som kontrollerar aliaset och returnerar förslag för kommandot kubectl.
Som ett andra exempel, lÄt oss ta aliaset kg, som representerar kubectl get:
$ complete -F _complete_alias kg Precis som i det föregÄende exemplet, nÀr du autocompleterar kg, fÄr du samma förslag som du skulle fÄtt för kubectl get.
Observera att complete-alias kan anvÀndas för vilket alias som helst i ditt system.
DÀrför, för att aktivera autocompletion för alla kubectl-aliaser, mÄste du köra ovanstÄende kommando för var och en av dem. Följande fragment gör just detta, förutsatt att du har installerat kubectl-aliases i ~/ .kubectl-aliases:
for _a in $(sed '/^alias /!d;s/^alias //;s/=.*$//') ~/ .kubectl_aliases);
do
complete -F _complete_alias "$_a"
done Denna kodbit mÄste placeras i din ~/.bashrc, starta om kommandotolken och autocompletion kommer att vara tillgÀnglig för alla 800 kubectl-aliaser.
6. Utvidgning av kubectl med hjÀlp av plugins
FrÄn och med , kubectl stöder , som tillÄter att funktionerna utvidgas med ytterligare kommandon.
Om du Àr bekant med , sÄ Àr kubectl-plugins byggda pÄ samma sÀtt.
I detta kapitel kommer vi att förklara hur man installerar plugins, var man hittar dem och hur man skapar egna plugins.
Installation av plugins
Kubectl-plugins distribueras i form av enkla körbara filer med ett namn som ser ut som kubectl-x. The prefix kubectl- Àr obligatoriskt, följt av en ny underkommandon kubectl som tillÄter att anropa plugin.
Till exempel kommer pluginen hello att distribueras i form av en fil med namnet kubectl-hello.
För att installera pluginet behöver du kopiera filen kubectl-x till en valfri katalog i din PATH-variabel och göra den körbar, till exempel med hjÀlp av chmod +x. Direkt efter detta kan du anropa pluginet med hjÀlp av kubectl x.
Du kan anvÀnda följande kommando för att lista alla plugins som för nÀrvarande Àr installerade i ditt system:
$ kubectl plugin listDetta kommando visar ocksÄ varningar om du har flera plugins med samma namn, eller om det finns en pluginfil som inte Àr körbar.
Sökning och installation av plugins med Krew
Kubectl-plugins Àr lÀmpliga för delad eller ÄteranvÀndning liknande programvarupaket. Men var kan du hitta plugins som andra har delat?
syftar till att erbjuda en enhetlig lösning för att dela, söka, installera och hantera kubectl-plugins. Projektet kallar sig sjÀlv "pakethanterare för kubectl-plugins" (Krew liknar ).
Krew Àr en lista över kubectl-plugins som du kan vÀlja och installera. Dessutom Àr Krew ocksÄ en plugin för kubectl.
Det betyder att installationen av Krew fungerar i praktiken som installation av vilken annan kubectl-plugin som helst. Du kan hitta detaljerade instruktioner pÄ .
De viktigaste kommandona i Krew:
# ĐĐŸĐžŃĐș ĐČ ŃпОŃĐșĐ” ĐżĐ»Đ°ĐłĐžĐœĐŸĐČ
$ kubectl krew search [<query>]
# ĐĐŸŃĐŒĐŸŃŃĐ”ŃŃ ĐžĐœŃĐŸŃĐŒĐ°ŃĐžŃ ĐŸ ĐżĐ»Đ°ĐłĐžĐœĐ”
$ kubectl krew info <plugin>
# ĐŁŃŃĐ°ĐœĐŸĐČĐžŃŃ ĐżĐ»Đ°ĐłĐžĐœ
$ kubectl krew install <plugin>
# ĐĐ±ĐœĐŸĐČĐžŃŃ ĐČŃĐ” ĐżĐ»Đ°ĐłĐžĐœŃ ĐŽĐŸ ĐżĐŸŃĐ»Đ”ĐŽĐœĐ”Đč ĐČĐ”ŃŃОО
$ kubectl krew upgrade
# ĐĐŸŃĐŒĐŸŃŃĐ”ŃŃ ĐČŃĐ” ĐżĐ»Đ°ĐłĐžĐœŃ, ŃŃŃĐ°ĐœĐŸĐČĐ»Đ”ĐœĐœŃĐ” ŃĐ”ŃДз Krew
$ kubectl krew list
# ĐĐ”ĐžĐœŃŃаллОŃĐŸĐČаŃŃ ĐżĐ»Đ°ĐłĐžĐœ
$ kubectl krew remove <plugin>TÀnk pÄ att installation av plugins med Krew inte hindrar installation av plugins pÄ det vanliga sÀttet som beskrivs ovan.
Observera att kommandot kubectl krew list visar endast de plugins som har installerats med Krew, medan kommandot kubectl plugin list listar alla plugins, det vill sÀga de som Àr installerade med Krew och de som Àr installerade pÄ andra sÀtt.
Sökning av plugins pÄ andra stÀllen
Krew Àr ett ungt projekt, för nÀrvarande i dess ungefÀr 30 plugins. Om du inte kan hitta det du behöver, kan du söka efter plugins pÄ andra stÀllen, till exempel pÄ GitHub.
Jag rekommenderar att du kollar avsnittet GitHub . DÀr hittar du flera dussin tillgÀngliga plugins som Àr vÀrda att titta pÄ.
Skriva egna plugins
Du kan sjĂ€lv â det Ă€r inte svĂ„rt. Du behöver skapa en körbar fil som gör det som behövs, namnge den som kubectl-x och installera den som beskrivits ovan.
Filformatet kan vara ett bash-skript, ett python-skript eller en kompilerad go-applikation â det spelar ingen roll. Det enda kravet Ă€r att den ska kunna köras direkt pĂ„ operativsystemet.
LÄt oss skapa ett exempelplugin just nu. I föregÄende avsnitt anvÀnde du kommandot kubectl för att lista containrarna för varje pod. Det Àr enkelt att omvandla detta kommando till ett plugin som du kan kalla, till exempel, med kubectl img.
Skapa en fil kubectl-img med följande innehÄll:
#!/bin/bash
kubectl get pods -o custom-columns='NAME:metadata.name,IMAGES:spec.containers[*].image' Nu gör filen körbar med chmod +x kubectl-img och flytta den till en katalog i din PATH. Direkt efter detta kan du anvÀnda pluginet kubectl img.
Som nÀmnts tidigare kan kubectl-plugins skrivas pÄ vilket programmeringssprÄk eller skriptsprÄk som helst. Om du anvÀnder skript frÄn kommandoraden har du fördelen av att enkelt kunna anropa kubectl frÄn pluginet. Men du kan skriva mer komplexa plugins pÄ riktiga programmeringssprÄk med hjÀlp av . Om du anvÀnder Go kan du Àven anvÀnda , som finns speciellt för att skriva kubectl-plugins.
Hur man delar sina plugins
Om du tycker att dina plugins kan vara anvÀndbara för andra, tveka inte att dela dem pÄ GitHub. Se till att lÀgga till dem i trÄden .
Du kan ocksÄ begÀra att din plugin lÀggs till i . Instruktioner om hur man gör detta finns i .
Autocompletion av kommandon
För nÀrvarande stöder plugins inte autocompletion. Det innebÀr att du mÄste skriva hela namnet pÄ pluginet och hela namnen pÄ argumenten.
Det finns en i GitHub-repositoriet för kubectl för denna funktion. SÄ det Àr möjligt att denna funktion kommer att realiseras nÄgon gÄng i framtiden.
Lycka till!!!
Vad mer att lÀsa om Àmnet:
- .
- .
- .
KĂ€lla: habr.com







