L’architettura di Kubernetes prevede, tra i diversi componenti che compongono il cluster, un componente che prende il nome di kube-apiserver
.
Dalla documentazione ufficiale:
Lo strumento principe per poter interrogare queste API e’ la CLI di kubernetes: kubectl.
Tramite questo tool e’ possibile interagire con le API esposte da kube-apiserver
, come mostrato nell’immagine seguente:
Qualsiasi risorsa esposta da k8s e’ interrogabile con kubectl
, con dei semplici comandi:
kubectl get pod
per ottenere la lista dei pod in esecuzionekubectl describe pod POD_ID
per ottenere dettagli del pod con id POD_ID
e cosi via.
Lavorare con kubernetes significa lavorare a stretto contatto con kubectl
. Ottimizzare l’utilizzo di kubectl
significa rendere piu’ piacevole e soprattutto produttivo il nostro lavoro con k8s.
In questo post vedremo alcuni veloci tips per poter migliorare “l’ergonomia” di kubectl.
Alias
La prima cosa assolutamente da fare e’ creare un alias per il comando kubectl
.
Aggiungendo alias k=kubectl
al file ~/.bashrc o ~/.zshrc, tutti i comandi precedenti si semplificano notevolmente:
k get pod
k describe pod POD_ID
Per chi lavora tutto il giorno con kubectl
…7 tasti al costo di 1.
Questo e’ solo il primo piccolo passo, sfruttando il meccanismo degli alias per poter ottimizzare la propria produttivita’ con kubectl
.
In questo repository su GitHub ci sono circa altri 600 alias che potrebbero tornare utili nell’utilizzo quotidiano di k8s.
Al primo impatto possono sembrare incomprensibili e difficili da ricordare, ma come spiega l’autore in questo post, alcuni pattern ricorrenti dei vari comandi si assimilano molto velocemente con un utilizzo continuativo di kubectl
.
Dai piu’ semplici
kg
=> kubectl get
krm
=> kubectl delete
ai ben piu’ articolati:
krmingall
=> kubectl delete ingress --all-namespaces
ksysgpooyamll
=> kubectl --namespace=kube-system get pods -o=yaml -l
Autocompletion
Le risorse interrogabili con kubectl
sono davvero diverse. Ricordarne il nome e soprattutto digitarlo correttamente per intero potrebbe non essere cosi produttivo. Attivare l’autocompletamento e’ uno delle primissime funzionalita’ da abilitare.
Anche in questo caso il comando da aggiungere alla configurazione del proprio terminale e’ semplicissimo:
source <(kubectl completion bash)
o source <(kubectl completion zsh)
A questo punto, ogni comando e ogni risorsa sono a distanza di TAB
Switching context
Usando k8s tutti i giorni e su diversi cluster, poter passare da un context
ad un altro in modo efficiente diventa particolarmente importante. Anche in questo kubectl
ci viene in aiuto:
Il comando kubectl config get-contexts
restituisce tutti i cluster configurati, mentre il comando kubectl config use-context CONTEXT_NAME
imposta il cluster selezionato come attualmente in uso.
Anche con i precedenti “trucchi” abilitati, i due comandi risultano comunque lunghi da digitare e ricordare.
Ci viene in soccorso kubectx: ora la lista dei vari contexts e la possibilita’ di passare da uno all’altro molto velocemente e’ a distanza di un semplice comando:
melkio@TERRA:~ $ kubectx
minikube
cluster1
cluster2
...
melkio@TERRA:~ $ kubectx cluster1
Switched to context "cluster1".
Extending kubectl
Come spiegato nella documentazione, kubectl
e’ completamente estendibile, e, come per K8s, la community si e’ sbizzarrita con una serie di plugin per arricchire le funzionalita’ base della CLI.
Ma da dove partire per capire quale plugin puo’ fare al caso nostro se non da un “plugin manager”? Ed ecco krew,
dalla documentazione ufficiale
Direi che per ora puo’ bastare cosi, aspettatevi altri post su kubectl e kubernetes in genere. Il 2020 e’ partito alla grande…ora non avete piu’ scuse per diventare dei kubectl-ninja!