Usa la CLI, Luke: kubectl day-by-day

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:

The API Server services REST operations and provides the frontend to the cluster’s shared state through which all other components interact.

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 esecuzione
kubectl 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 documentazionekubectl 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

krew is a tool that makes it easy to use kubectl plugins. krew helps you discover plugins, install and manage them on your machine. It is similar to tools like apt, dnf or brew. Today, over 70 kubectl plugins are available on krew.

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!