Hur man effektivt anvÀnder kubectl: en detaljerad guide

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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 Kubernetes aaS frÄn Mail.ru ö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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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.yaml

Som 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}/replicasets

API-slutpunkterna för alla Kubernetes-operationer kan hittas i API-dokumentationen inklusive den angivna slutpunkten ovan). 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:

  1. Lagring — lagrar resursdefinitioner (vanligtvis etcd).
  2. API-servern — tillhandahĂ„ller API och hanterar lagringen.
  3. Controller Manager — sĂ€kerstĂ€ller att resursstatusar överensstĂ€mmer med specifikationerna.
  4. SchemalĂ€ggare — planerar pods pĂ„ arbetande noder.

Och hÀr Àr en av de viktigaste komponenterna pÄ arbetande noder:

  1. 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 API-slutpunkten för ReplicaSet (skickade resursdefinitionen av ReplicaSet).

Vad hÀnder i klustret?

  1. Efter att ha kört kubectl create -f replicaset.yaml API-servern sparar din ReplicaSet-resursdefinition i lagringen:

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

  2. DĂ€refter startar ReplicaSet-controllern i Controller Manager, som hanterar skapande, modifiering och borttagning av ReplicaSet-resurser:

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

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

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

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

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

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

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

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

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

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

    Hur man effektivt anvÀnder kubectl: en detaljerad guide

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:

  1. ReplicaSet-controllern anvÀnder API-slutpunkten lista ReplicaSets med parametern övervaka för att övervaka förÀndringar i resurserna för ReplicaSet.
  2. ReplicaSet-controllern anvÀnder API-slutpunkten skapa Pod (skapa pod) för att skapa poddar.
  3. SchemalÀggaren anvÀnder API-slutpunkten patch Pod (À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:

  1. Lagringen sparar tillstÄndet, det vill sÀga Kubernetes-resurser.
  2. API-servern erbjuder ett grÀnssnitt till lagringen i form av Kubernetes API.
  3. 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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
Kommandokomplettering fungerar för Bash- och Zsh-kommandoradsmiljöer.

Den officiella dokumentationen 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 bash

Eller:

$ kubectl completion zsh

Teoretiskt À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-completion

Eller:

$ yum install bash-completion

Du 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 "Uppgradering av Bash i MacOS».

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 bash-completion, sÄ du mÄste först installera det.

Du kan installera bash-completion med Homebrew:

$ 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_completion

Om 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/kubectl

Detta 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 kubectl med Homebrew, 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 fil

autoload -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 kan göras hÀr..

Du kan visa hela trÀdet genom att lÀgga till alternativet --recursive:

$ kubectl explain deployment.spec --recursive

Om 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.spec

3. 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       78d

Detta 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-8pdw4

Utdatan 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 eller skriva kommandot 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.

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 mer funktionalitet, 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.

  1. 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      wordpress

    Detta 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.

  2. 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-1b

    Detta 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 — failure-domain.beta.kubernetes.io/zone. 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 eller skriva kommandot. 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 json

    Detta À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 den officiella dokumentationen.

Kubeconfig-filer

LÄt oss titta pÄ vad kubeconfig-filen faktiskt innehÄller:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
I grund och botten redigerar dessa kommandon helt enkelt kubeconfig-filen, som beskrivits ovan.

För att installera kubectx, följ instruktionerna pÄ Github.

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 ). Ett typiskt exempel pÄ anvÀndning:.

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. interaktivt lÀge. Det fungerar tillsammans med verktyget fzf, 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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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 installera fzf, 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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
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 installera fzf, för att anvÀnda dessa alias.

För att installera plugins behöver du ladda ner skripten med namnen kubectl-ctx och kubectl-ns 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 kubectl-aliases 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:

Hur man effektivt anvÀnder kubectl: en detaljerad guide
Till exempel:

  1. kgpooyaml — kubectl get pods oyaml
  2. ksysgsvcw — kubectl -n kube-system get svc w
  3. ksysrmcm — kubectl -n kube-system rm cm
  4. 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Ä GitHub. DÀr kan du ocksÄ hitta den fullstÀndiga listan med alias.

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:

  1. IstÀllet för kubectl proxy kan skrivas som k proxy.
  2. IstÀllet för kubectl get roles kan skrivas som kg roles (det finns för nÀrvarande inget alias för resursen Roles).
  3. 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 .kubectl_aliases frÄn GitHub och inkludera den i filen ~/.bashrc eller ~/.zshrc:

source ~/.kubectl_aliases

Autokomplettering

Som vi redan har nÀmnt lÀgger du ofta till extra ord till aliaset i kommandoraden. Till exempel:

$ kgpooyaml test-pod-d4b77b989

Om 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:

  1. För Zsh fungerar autokomplettering för alias 'ur lÄdan'.
  2. 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 complete-alias 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Ä bash-completion. 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 bash_completion.sh frÄn frÄn GitHub-repo och inkludera det i din fil ~/.bashrc:

source ~/bash_completion.sh

Efter 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 complete, 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 frÄn version 1.12, kubectl stöder pluginmekanismen, som tillÄter att funktionerna utvidgas med ytterligare kommandon.

Om du Àr bekant med pluginmekanismerna i Git, 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 list

Detta 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?

Projektet Krew 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 Brew).

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Ä GitHub-sidan.

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 lista 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 kubectl-plugins. DÀr hittar du flera dussin tillgÀngliga plugins som Àr vÀrda att titta pÄ.

Skriva egna plugins

Du kan sjĂ€lv skapa plugins — 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 Kubernetes-klientbiblioteket. Om du anvÀnder Go kan du Àven anvÀnda cli-runtime-biblioteket, 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 kubectl-plugins.

Du kan ocksÄ begÀra att din plugin lÀggs till i Krew-listan. Instruktioner om hur man gör detta finns i GitHub-repo.

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 öppen förfrÄgani 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:

  1. Tre nivÄer av automatisk skalning i Kubernetes och hur man anvÀnder dem effektivt.
  2. Kubernetes i piratanda med en implementeringsmall.
  3. VÄr kanal Om Kubernetes pÄ Telegram.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster