PerfectScalePerfectScale

PerfectScale

Cheat Sheet kubectl: lavorare con cluster, pod, deployment e molto altro

Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.

Tania Duggal
By Tania Duggal
Oct 13, 202625 min read

Ciao e benvenuto! Abbiamo raccolto per te i comandi più utilizzati in Kubernetes, tutti in un'unica cheat sheet kubectl pronta all'uso. La cheat sheet fornisce istruzioni passo passo su come gestire il tuo cluster Kubernetes con lo strumento a riga di comando kubectl.

Di seguito trovi un rapido riepilogo dei comandi più importanti. Vai alla cheat sheet completa qui sotto.

Context e configurazione del cluster:

  • Elencare i context: kubectl config get-contexts
  • Cambiare il context attivo: kubectl config use-context <context-name>
  • Visualizzare i dettagli del cluster: kubectl cluster-info
  • Verificare la versione: kubectl version

Deployment e gestione delle applicazioni:

  • Eseguire il deploy da un manifest: kubectl apply -f <filename.yaml>
  • Eliminare risorse da un manifest: kubectl delete -f <filename.yaml>
  • Scalare un deployment: kubectl scale deployment <deployment-name> --replicas=<N>
  • Verificare lo stato del rollout di un deployment: kubectl rollout status deployment/<deployment-name>
  • Eseguire il rollback di un deployment: kubectl rollout undo deployment/<deployment-name>

Ispezione e debugging:

  • Visualizzare tutte le risorse in tutti i namespace: kubectl get all -A
  • Visualizzare stato e dettagli di un pod: kubectl describe pod <pod-name>
  • Seguire i log di un pod: kubectl logs -f <pod-name>
  • Eseguire comandi all'interno di un container: kubectl exec -it <pod-name> -- <command>
  • Aprire una shell in un pod: kubectl exec -it <pod-name> -- /bin/bash
  • Inoltrare una porta locale a un pod: kubectl port-forward <pod-name> <local-port>:<container-port>

Consigli e flag per la produttività:

  • Impostare un alias: alias k=kubectl
  • Configurare l'autocompletamento: source <(kubectl completion bash)
  • Filtrare le risorse per namespace: usa il flag -n <namespace>
  • Testare le modifiche senza applicarle: kubectl apply -f <filename.yaml> --dry-run=client
  • Visualizzare le risorse in YAML: kubectl get pod <pod-name> -o yaml

Che cos'è kubectl?

Kubectl è lo strumento CLI di Kubernetes che ti permette di interagire con i tuoi cluster e di creare, gestire, modificare ed eliminare risorse con facilità. Comunica con l'API server di Kubernetes, così puoi monitorare e controllare le tue applicazioni.

Come funziona kubectl?

Illustrazione intitolata Come funziona kubectl: un comando kubectl viene letto dal file kubeconfig, trasformato in una chiamata REST API, autenticato e inviato via HTTPS all'API server nel control plane, che lo elabora e restituisce una risposta JSON che kubectl formatta e visualizza

Kubectl funziona inviando comandi all'API server di Kubernetes, che esegue poi le operazioni richieste all'interno del cluster. Quando esegui un comando kubectl, ad esempio per distribuire un'applicazione o recuperare lo stato delle risorse, kubectl comunica con l'API server via HTTP, trasmettendo le tue istruzioni. L'API server elabora queste richieste, aggiorna lo stato del cluster in etcd (un archivio chiave-valore distribuito) e indica ad altri componenti, come lo scheduler o il controller manager, di eseguire le azioni necessarie per raggiungere lo stato desiderato. Questa interazione ti permette di gestire e monitorare in modo efficiente le risorse Kubernetes dalla riga di comando.

Nota: nelle versioni precedenti di Kubernetes, kubectl utilizzava i generatori per creare configurazioni di risorse in base a input specifici. Questi generatori permettevano agli utenti di specificare il tipo di risorsa da creare, come Pod, Deployment o Job, usando il flag --generator. Ad esempio, kubectl run nginx --image=nginx --generator=run-pod/v1 creava una risorsa Pod. Questo approccio consentiva agli utenti di automatizzare e scriptare la creazione di risorse con risultati prevedibili. Tuttavia, è importante sapere che il flag --generator è stato deprecato in Kubernetes v1.12 e rimosso nella v1.18. A partire dalla v1.18, kubectl run è stato semplificato per creare solo Pod e l'uso dei generatori è stato sostituito da comandi più espliciti e dichiarativi come kubectl create e kubectl apply

Ora, iniziamo:

Configurare kubectl: versione, informazioni sul cluster e autocompletamento

Il primo passo dopo l'installazione di kubectl è verificare che sia installato correttamente e che possa comunicare con il cluster. Il comando seguente mostra la versione del client e, se un cluster è configurato, mostra anche la versione del server:

Terminal window
kubectl version

Per confermare che kubectl sia connesso al cluster corretto, usa:

Terminal window
kubectl cluster-info

Questo comando mostra gli indirizzi del control plane di Kubernetes e dei servizi principali. Se il comando restituisce un errore, verifica che il file kubeconfig sia configurato correttamente e che il cluster di destinazione sia raggiungibile.

Puoi anche ispezionare la configurazione corrente e i context disponibili con:

Terminal window
kubectl config get-contexts
kubectl config current-context

Se lavori con più cluster, passare dall'uno all'altro è semplicissimo:

Terminal window
kubectl config use-context <context-name>

Sostituendo <context-name> con il context desiderato, il cluster attivo viene aggiornato per tutti i comandi kubectl successivi.

Per migliorare la produttività, abilita l'autocompletamento della shell. In questo modo la shell completa automaticamente comandi, nomi delle risorse, namespace e altri argomenti quando premi il tasto Tab. Per Bash, esegui:

Terminal window
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

Per Zsh, usa:

Terminal window
echo 'source <(kubectl completion zsh)' >> ~/.zshrc
source ~/.zshrc

Una scorciatoia utile è creare un alias per kubectl e abilitare l'autocompletamento anche per quest'ultimo:

Terminal window
alias k=kubectl
complete -o default -F __start_kubectl k

Se usi Zsh, sostituisci l'ultima riga con:

Terminal window
compdef __start_kubectl k

Con verifica della versione, connettività al cluster, gestione dei context e autocompletamento configurati, il tuo ambiente è pronto per l'amministrazione quotidiana di Kubernetes.

La cheat sheet kubectl definitiva

Anatomia di un comando kubectl: kubectl get pods -n prod -o wide, scomposto in programma, azione, risorsa, flag del namespace e flag di output

Flag opzionali

Kubectl offre flag opzionali che migliorano l'output dei comandi e la gestione delle risorse. Ad esempio:

Formati di output:

Output JSON:

Puoi usare il flag -o=json per formattare l'output del comando come JSON.

Terminal window
kubectl get pods -o=json

Output YAML:

Puoi usare il flag -o=yaml per formattare l'output del comando come YAML.

Terminal window
kubectl get pods -o=yaml

Output esteso (wide):

L'opzione -o=wide fornisce un output testuale dettagliato (ad esempio, mostra il nome del nodo per i pod).

Terminal window
kubectl get pods -o=wide

Per output più personalizzati, kubectl offre il flag --custom-columns, che permette di definire le colonne specifiche da visualizzare.

Ad esempio, per elencare i pod con i loro nomi e i nodi su cui sono in esecuzione:

Terminal window
kubectl get pods -o=custom-columns="POD NAME:.metadata.name,NODE:.spec.nodeName"

Questo comando produrrà il seguente output:

POD NAME NODE
nginx-deployment-1 node-1
nginx-deployment-2 node-2

Specifica del namespace:

Per impostazione predefinita, i comandi kubectl operano nel namespace definito dal context corrente. Per operare su un namespace specifico, puoi usare il flag -n o --namespace:

Terminal window
kubectl get pods -n <namespace_name>

Per visualizzare le risorse in tutti i namespace si usa il flag -A o --all-namespaces:

Terminal window
kubectl get pods -A

E per impostare un namespace predefinito per il context corrente:

Terminal window
kubectl config set-context --current --namespace=ns_name

Input da file:

Il flag -f serve a specificare un nome di file, una directory o un URL durante la creazione di una risorsa.

Terminal window
kubectl create -f ./file_name

Filtro per label:

Puoi usare il flag -l per filtrare le risorse in base a label specifiche.

Terminal window
kubectl get pods -l name=label_name

Guida:

Per visualizzare la guida dei comandi kubectl, usa il flag -h.

Terminal window
kubectl -h

Modalità watch:

Puoi monitorare continuamente le modifiche alle risorse con il flag --watch (o -w):

Terminal window
kubectl get pods -w

Ordinamento dell'output:

Puoi ordinare l'output in base a un campo specifico usando il flag --sort-by:

Terminal window
kubectl get pods --sort-by=.metadata.name

Usare kubectl con gli alias

Lavorare con kubectl significa digitare comandi lunghi, con conseguente perdita di tempo e rischio di errori. Per migliorare l'efficienza, molti sviluppatori creano alias per i comandi usati più di frequente.

Configurare un alias di base

Terminal window
alias k=kubectl
echo 'alias k=kubectl' >> ~/.bashrc

In questo modo puoi usare k al posto di kubectl.

Puoi usare il repository kubectl-aliases, che offre centinaia di alias predefiniti per eseguire i comandi più rapidamente.

Gestione del cluster, context e configurazione

Gestire il cluster significa configurarlo, visualizzarlo e modificarlo.

Comando Descrizione
kubectl cluster-info Mostra gli endpoint e le informazioni di base sul tuo cluster Kubernetes.
kubectl config get-contexts Elenca tutti i context definiti nel file kubeconfig.
kubectl config current-context Mostra il context attualmente attivo.
kubectl config use-context <context> Imposta come attivo il context specificato.
kubectl config delete-context <context> Rimuove un context dal file kubeconfig.
kubectl api-versions Elenca tutte le versioni API disponibili nel cluster.
kubectl api-resources Elenca tutti i tipi di risorsa disponibili nel cluster, con dettagli su gruppi API e namespace.
kubectl config view Mostra i dettagli di configurazione del file kubeconfig (cluster, context, impostazioni utente).
kubectl version Stampa le informazioni di versione sia del client kubectl sia del server Kubernetes.

Gestione dei pod

Shortcode: po

Un Pod è l'unità più piccola di Kubernetes e rappresenta una singola istanza di un processo in esecuzione nel cluster. Può contenere uno o più container che condividono storage e risorse di rete.

Comando Descrizione
kubectl get pods Elenca tutti i pod nel namespace corrente.
kubectl describe pod <pod-name> Fornisce informazioni dettagliate sul pod specificato, inclusi stato, eventi e dettagli dei container.
kubectl exec -it <pod-name> <command> Esegue il comando indicato all'interno del pod specificato in modalità interattiva (i flag -it abilitano l'accesso interattivo al terminale).
kubectl delete pod <pod-name> Elimina il pod specificato dal cluster.
kubectl run <pod-name> --image=<image_name> Crea ed esegue un pod con l'immagine specificata.
kubectl get pod -n <namespace_name> Elenca tutti i pod nel namespace specificato.
kubectl exec <pod-name> -c <container-name> <command> Esegue un comando all'interno di un container specifico di un pod.
kubectl top pod Mostra l'utilizzo delle risorse (come CPU e memoria) dei pod.
kubectl annotate pod <pod-name> <annotation> Aggiunge o aggiorna un'annotazione sul pod specificato.
kubectl get pods --field-selector=status.phase=Running Elenca i pod attualmente in fase Running filtrando in base allo stato del pod.
kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' Ordina l'elenco dei pod in base al numero di riavvii del primo container di ciascun pod.

Per i ReplicaSet

Shortcode: rs

Un ReplicaSet garantisce che sia in esecuzione il numero di repliche di pod specificato. La differenza principale è che i ReplicaSet supportano selettori di label basati su insiemi.

Comando Descrizione
kubectl get rs Elenca tutti i ReplicaSet nel namespace corrente.
kubectl get rs <replicaset_name> -o yaml Mostra la configurazione del ReplicaSet specificato in formato YAML.
kubectl get rs <replicaset_name> -o json Mostra la configurazione del ReplicaSet specificato in formato JSON.
kubectl describe rs <rs_name> Fornisce informazioni dettagliate sul ReplicaSet specificato.
kubectl get rs --namespace=<ns_name> Elenca tutti i ReplicaSet nel namespace specificato.
kubectl delete rs <rs_name> --cascade=orphan Elimina il ReplicaSet specificato lasciando in esecuzione i pod che gestisce (i pod diventano orfani).
kubectl delete rs <rs_name> Elimina il ReplicaSet specificato insieme a tutti i pod che gestisce.
kubectl scale rs <rs_name> --replicas=<count> Regola (scala) il numero di pod gestiti dal ReplicaSet specificato portandolo al valore indicato.
kubectl edit rs <rs_name> Apre la configurazione del ReplicaSet nel tuo editor predefinito, permettendoti di apportare modifiche in tempo reale.
kubectl replace -f <rs_file.yaml> Sostituisce la configurazione esistente del ReplicaSet con quella fornita nel file YAML.

Per i DaemonSet

Shortcode: ds

Un DaemonSet garantisce che un pod specifico sia in esecuzione su tutti i nodi (o su alcuni) del cluster. È utile per attività come l'esecuzione di un agente di monitoraggio su ogni nodo.

Comando Descrizione
kubectl get daemonset Elenca tutti i DaemonSet nel namespace corrente.
kubectl describe daemonset <ds_name> Fornisce informazioni dettagliate su un DaemonSet specifico.
kubectl get daemonset <daemonset_name> -o yaml Mostra la configurazione del DaemonSet specificato in formato YAML.
kubectl get daemonset <ds_name> -o json Mostra la configurazione del DaemonSet specificato in formato JSON.
kubectl delete daemonset <ds_name> Elimina il DaemonSet specificato dal cluster.
kubectl label daemonset <ds_name> <key>=<value> Aggiunge o aggiorna una label sul DaemonSet specificato.
kubectl annotate daemonset <ds_name> <key>=<value> Aggiunge o aggiorna un'annotazione sul DaemonSet specificato.
kubectl rollout status daemonset <ds_name> Verifica lo stato del rollout di un DaemonSet.
kubectl rollout history daemonset <ds_name> Mostra la cronologia dei rollout di un DaemonSet.

Per gli StatefulSet

Shortcode: sts

Gli StatefulSet gestiscono il deployment e lo scaling dei pod, garantendo a ciascuno un'identità univoca e stabile e uno storage persistente. Questo è importante per le applicazioni stateful.

Comando Descrizione
kubectl get statefulset Elenca tutti gli StatefulSet nel namespace corrente.
kubectl describe statefulset <statefulset_name> Fornisce informazioni dettagliate sullo StatefulSet specificato.
kubectl get statefulset <sts_name> -o yaml Mostra la configurazione dello StatefulSet specificato in formato YAML.
kubectl get statefulset <sts_name> -o json Mostra la configurazione dello StatefulSet specificato in formato JSON.
kubectl edit statefulset <sts_name> Apre la configurazione dello StatefulSet specificato nel tuo editor di testo predefinito, permettendoti di apportare modifiche in tempo reale.
kubectl scale statefulset <sts_name> --replicas=<number> Regola il numero di repliche di pod gestite dallo StatefulSet specificato portandolo al valore indicato.
kubectl rollout status statefulset <statefulset_name> Verifica e mostra lo stato del rollout dello StatefulSet specificato.

Per i namespace

Shortcode: ns

I namespace offrono un modo per suddividere le risorse del cluster tra più utenti o applicazioni.

Comando Descrizione
kubectl get namespace Elenca tutti i namespace del cluster (i namespace del context corrente).
kubectl create namespace <namespace_name> Crea un nuovo namespace con il nome specificato.
kubectl describe namespace <namespace_name> Fornisce informazioni dettagliate sul namespace specificato.
kubectl edit namespace <namespace_name> Apre la configurazione del namespace specificato nel tuo editor di testo predefinito per apportare modifiche in tempo reale.
kubectl delete namespace <namespace_name> Elimina il namespace specificato dal cluster insieme a tutte le risorse che contiene.

Per i Service

Shortcode: svc

Un Service definisce un insieme logico di pod e una policy per accedervi. Abilita la comunicazione tra le diverse parti della tua applicazione e può esporre l'applicazione al traffico esterno.

Comando Descrizione
kubectl get services Elenca tutti i service nel namespace corrente
kubectl create service <svc-type> <svc-name> --tcp=<port> Crea un nuovo service del tipo specificato (ad esempio clusterip, nodeport o loadbalancer) con il nome indicato, mappando TCP su una determinata porta
kubectl edit service <svc-name> Apre un editor per modificare la configurazione del service specificato
kubectl describe service <svc-name> Fornisce informazioni dettagliate sul service specificato
kubectl delete service <svc-name> Elimina il service specificato dal cluster
kubectl get endpoints <svc-name> Elenca gli endpoint (ovvero gli indirizzi IP dei pod) che supportano il service specificato
kubectl expose deployment [deploy_name] Crea un service che espone il deployment specificato; le risorse esponibili includono pod (po), service (svc) e replicaset (rs)

Per i Service Account

Shortcode: sa

Un ServiceAccount fornisce un'identità ai processi in esecuzione in un pod, consentendo loro di interagire in modo sicuro con l'API di Kubernetes.

Comando Descrizione
kubectl get serviceaccounts Elenca tutti i service account nel namespace corrente
kubectl describe serviceaccount <sa-name> Mostra informazioni dettagliate sul service account specificato
kubectl replace -f <sa.yaml> Sostituisce (aggiorna) un service account con una nuova configurazione
kubectl delete serviceaccount <sa_name> Elimina il service account specificato dal cluster.

Per i Deployment

Shortcode: deploy

Un Deployment fornisce aggiornamenti dichiarativi per pod e ReplicaSet. Puoi definire lo stato desiderato della tua applicazione e il controller del Deployment porta lo stato effettivo verso quello desiderato a un ritmo controllato.

Comando Descrizione
kubectl get deployment Elenca tutti i deployment nel namespace corrente.
kubectl describe deployment <deployment_name> Mostra informazioni dettagliate sul deployment specificato
kubectl create deployment <deployment-name> --image=<img-name> Crea un nuovo deployment denominato <deployment-name> usando l'immagine container specificata
kubectl edit deployment <deployment_name> Apre la configurazione del deployment nel tuo editor di testo predefinito per modifiche in tempo reale
kubectl scale deployment <deployment-name> --replicas=<replica-count> Regola il numero di repliche di pod gestite dal deployment portandolo al valore specificato.
kubectl set image deployment/<deployment-name> <container-name>=<new-image-name> Aggiorna l'immagine di un container specifico all'interno del deployment
kubectl rollout status deployment/<deployment-name> Mostra lo stato attuale del rollout del deployment
kubectl rollout pause deployment/<deployment-name> Mette in pausa il processo di rollout, impedendo ulteriori aggiornamenti fino alla ripresa
kubectl rollout resume deployment/<deployment-name> Riprende un rollout del deployment in pausa
kubectl rollout undo deployment/<deployment-name> Ripristina il deployment alla revisione precedente
kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number> Esegue il rollback del deployment a un numero di revisione specifico
kubectl delete deployment <deployment-name> Elimina il deployment specificato insieme ai pod che gestisce

Per Job e CronJob

Shortcode: job, cj

Un Job esegue uno o più pod finché un'attività non viene completata con successo. Un CronJob crea Job in base a una pianificazione, risultando utile per backup, report e altre attività ricorrenti.

Comando Descrizione
kubectl get jobs Elenca tutti i Job nel namespace corrente.
kubectl describe job <job-name> Mostra informazioni dettagliate sul Job specificato.
kubectl create job <job-name> --image=<image-name> Crea un Job che esegue l'immagine container specificata.
kubectl delete job <job-name> Elimina il Job specificato.
kubectl get cronjobs Elenca tutti i CronJob nel namespace corrente.
kubectl describe cronjob <cronjob-name> Mostra informazioni dettagliate sul CronJob specificato.
kubectl create cronjob <cronjob-name> --image=<image-name> --schedule="<cron-expression>" Crea un CronJob con la pianificazione specificata.
kubectl create job --from=cronjob/<cronjob-name> <job-name> Crea un Job una tantum a partire da un CronJob esistente.
kubectl patch cronjob <cronjob-name> -p '{"spec":{"suspend":true}}' Sospende le esecuzioni future del CronJob.
kubectl delete cronjob <cronjob-name> Elimina il CronJob specificato.

Per gli Horizontal Pod Autoscaler

Shortcode: hpa

Un Horizontal Pod Autoscaler (HPA) regola automaticamente il numero di repliche di pod in base a metriche come l'utilizzo di CPU o memoria.

Comando Descrizione
kubectl get hpa Elenca tutti gli Horizontal Pod Autoscaler.
kubectl describe hpa <hpa-name> Mostra informazioni dettagliate sull'HPA specificato.
kubectl autoscale deployment <deployment-name> --cpu-percent=<target> --min=<min> --max=<max> Crea un HPA per il deployment specificato.
kubectl edit hpa <hpa-name> Apre la configurazione dell'HPA per modifiche in tempo reale.
kubectl delete hpa <hpa-name> Elimina l'HPA specificato.
kubectl get hpa -w Osserva in tempo reale le metriche e gli eventi di scaling dell'HPA.
kubectl top pods Mostra l'utilizzo delle risorse dei pod rilevato dal Metrics Server.
kubectl top nodes Mostra l'utilizzo di CPU e memoria dei nodi.

Per RBAC e verifica dei permessi

Il Role-Based Access Control (RBAC) controlla quali utenti e service account possono accedere alle risorse Kubernetes.

Comando Descrizione
kubectl get roles Elenca tutti i Role nel namespace corrente.
kubectl get rolebindings Elenca tutti i RoleBinding nel namespace corrente.
kubectl get clusterroles Elenca tutti i ClusterRole.
kubectl get clusterrolebindings Elenca tutti i ClusterRoleBinding.
kubectl describe role <role-name> Mostra informazioni dettagliate sul Role specificato.
kubectl describe clusterrole <clusterrole-name> Mostra informazioni dettagliate sul ClusterRole specificato.
kubectl auth can-i <verb> <resource> Verifica se l'utente corrente può eseguire un'azione su una risorsa.
kubectl auth can-i <verb> <resource> --as=<user> Verifica i permessi di un altro utente.
kubectl auth can-i --list Elenca tutti i permessi disponibili per l'utente corrente.

Per le risorse Ingress

Shortcode: ing

Un Ingress gestisce l'accesso HTTP e HTTPS esterno ai service di un cluster Kubernetes. In genere richiede un Ingress controller.

Comando Descrizione
kubectl get ingress Elenca tutte le risorse Ingress nel namespace corrente.
kubectl describe ingress <ingress-name> Mostra informazioni dettagliate sull'Ingress specificato.
kubectl create ingress <ingress-name> --rule="<host>/<path>=<service>:<port>" Crea un Ingress con una regola di routing.
kubectl edit ingress <ingress-name> Apre la configurazione dell'Ingress per modifiche in tempo reale.
kubectl delete ingress <ingress-name> Elimina l'Ingress specificato.
kubectl get ingress -A Elenca le risorse Ingress in tutti i namespace.
kubectl get ingress <ingress-name> -o yaml Mostra la configurazione dell'Ingress in formato YAML.

Per il debugging avanzato

Questi comandi aiutano a risolvere problemi di applicazioni, rete e risorse in un cluster Kubernetes.

Comando Descrizione
kubectl logs <pod-name> Mostra i log del pod specificato.
kubectl logs <pod-name> -c <container-name> Mostra i log di un container specifico in un pod multi-container.
kubectl logs -f <pod-name> Mostra i log del pod specificato in streaming.
kubectl logs <pod-name> --previous Mostra i log dell'istanza precedente di un container andato in crash.
kubectl exec -it <pod-name> -- /bin/sh Apre una shell interattiva all'interno di un container in esecuzione.
kubectl port-forward pod/<pod-name> <local-port>:<pod-port> Inoltra una porta locale a un pod per il debugging.
kubectl debug <pod-name> -it --image=busybox Crea un container di debug effimero collegato al pod specificato.
kubectl get events --sort-by=.metadata.creationTimestamp Elenca gli eventi del cluster in ordine cronologico.
kubectl describe node <node-name> Mostra le condizioni del nodo, le risorse allocate e gli eventi recenti.
kubectl cp <pod-name>:<remote-path> <local-path> Copia file da un pod alla macchina locale.

Per gli eventi

Shortcode: ev

Gli eventi sono registrazioni di ciò che è accaduto nel cluster, come creazioni ed eliminazioni di pod o errori.

Comando Descrizione
kubectl get events Elenca tutti gli eventi nel namespace corrente
kubectl get events --field-selector type!=Normal Mostra gli eventi che non sono di tipo Normal
kubectl get events --field-selector type=Warning Filtra e mostra solo gli eventi di tipo Warning
kubectl get events -w Osserva i nuovi eventi in tempo reale
kubectl get events --field-selector involvedObject.name=<object_name> Mostra gli eventi relativi a un oggetto specifico, come un pod o un nodo

Log

I log sono l'output delle applicazioni in esecuzione e dei componenti di sistema.

Comando Descrizione
kubectl logs <pod_name> Recupera e mostra i log del container principale del pod specificato
kubectl logs -f <pod_name> Mostra in tempo reale i log del pod specificato
kubectl logs --since=6h <pod_name> Mostra i log del pod specificato generati nelle ultime 6 ore
kubectl logs --tail=50 <pod_name> Mostra le ultime 50 righe di log del pod specificato
kubectl logs -f <pod_name> -c <container_name> Mostra in tempo reale i log di un container specifico all'interno di un pod
kubectl logs <pod_name> > podfile.log Salva i log di un pod in un file denominato podfile.log
kubectl logs --previous <pod_name> Mostra i log dell'istanza precedente di un container nel pod specificato

Per Secret e ConfigMap

Shortcode per le ConfigMap: cm

I Secret memorizzano informazioni sensibili come password o chiavi, mentre le ConfigMap contengono dati di configurazione non sensibili. Entrambi permettono di disaccoppiare gli artefatti di configurazione dal contenuto delle immagini, mantenendo le applicazioni portabili.

Comando Descrizione
kubectl get secrets Elenca tutti i secret nel namespace corrente
kubectl get configmaps Elenca tutte le ConfigMap nel namespace corrente
kubectl describe secret <secret-name> Fornisce informazioni dettagliate sul secret specificato
kubectl delete secret <secret-name> Elimina il secret specificato dal cluster
kubectl describe configmap <configmap-name> Fornisce informazioni dettagliate sulla ConfigMap specificata
kubectl create configmap <config-map-name> --from-file=<path-to-file> Crea una nuova ConfigMap con il nome indicato usando il contenuto del file specificato
kubectl create secret <secret-type> <secret-name> --from-literal=key=value Crea un nuovo secret del tipo specificato usando una coppia chiave-valore

Per la gestione dei nodi

Shortcode: no

Un Node è una macchina worker in Kubernetes.

Comando Descrizione
kubectl get nodes Elenca tutti i nodi del cluster
kubectl describe node <node-name> Fornisce informazioni dettagliate sul nodo specificato
kubectl drain <node-name> Prepara il nodo per la manutenzione espellendo tutti i pod e contrassegnandolo come non schedulabile
kubectl uncordon <node-name> Contrassegna come nuovamente schedulabile un nodo precedentemente isolato (non schedulabile), consentendo la pianificazione di nuovi pod su di esso
kubectl label node <node_name> <key>=<value> Aggiunge o aggiorna una label sul nodo specificato
kubectl cordon <node_name> Contrassegna il nodo specificato come non schedulabile
kubectl taint node <node_name> <key>=<value>:<taint-effect> Applica un taint al nodo specificato
kubectl top node <node_name> Mostra le metriche di utilizzo delle risorse (come CPU e memoria) del nodo specificato
kubectl annotate node <node_name> <key>=<value> Aggiunge o aggiorna un'annotazione sul nodo specificato

Per lo storage (PV, PVC)

Shortcode per i Persistent Volume: pv

Shortcode per le Persistent Volume Claim: pvc

I PersistentVolume sono risorse di storage nel cluster, mentre le PersistentVolumeClaim sono richieste di storage da parte degli utenti.

Comando Descrizione
kubectl get pv Elenca tutti i Persistent Volume del cluster
kubectl describe pv <pv-name> Fornisce informazioni dettagliate su un Persistent Volume specifico
kubectl get pvc Elenca tutte le Persistent Volume Claim nel namespace corrente
kubectl describe pvc <pvc-name> Mostra informazioni dettagliate su una Persistent Volume Claim specifica

Per copiare file e directory

Puoi trasferire file tra il tuo sistema locale e il container di un pod, utile per il debugging o il backup dei dati.

Comando Descrizione
kubectl cp <local-path> <namespace>/<pod-name>:<container-path> Copia un file o una directory dalla tua macchina locale a un container nel pod e nel namespace specificati.
kubectl cp <source-pod-name>:<source-container-path> <local-path> -n <namespace> Copia un file o una directory da un container all'interno di un pod (nel namespace indicato) alla tua macchina locale.
kubectl cp <local-path> <destination-namespace>/<destination-pod-name>:<destination-container-path> Copia un file o una directory dalla tua macchina locale al pod e al namespace di destinazione.

Per la verbosità dell'output e il debugging

La verbosità indica il livello di dettaglio incluso nei log generati da componenti come kubectl e kubelet. Puoi regolare la verbosità dei comandi kubectl.

Comando Descrizione
kubectl get <resource-type> --v=<verbosity-level> È la forma generale per impostare il livello di verbosità. Indica a kubectl quanto output di debug includere nell'esecuzione del comando sul tipo di risorsa specificato.
kubectl get <resource-type> --v=0 Esegue il comando con un output di debug minimo (il livello predefinito).
kubectl get <resource-type> --v=7 Fornisce un livello di verbosità più alto, con informazioni di debug aggiuntive, incluse le intestazioni delle richieste HTTPS inviate dal client.
kubectl get <resource-type> --v=8 Aumenta ulteriormente la verbosità. Al livello 8 vengono mostrati anche i contenuti delle richieste e delle risposte HTTP (dati del body).

FAQ

Che cos'è kubectl? kubectl è lo strumento a riga di comando di Kubernetes. Invia i tuoi comandi all'API server di Kubernetes, che esegue la richiesta nel cluster, permettendoti di creare, gestire, modificare ed eliminare risorse e di monitorare le tue applicazioni.

Come passo da un cluster all'altro con kubectl? Esegui kubectl config get-contexts per elencare i context nel file kubeconfig, poi esegui kubectl config use-context <context-name> per attivarne uno. Tutti i comandi kubectl successivi verranno eseguiti su quel cluster.

Come elenco i pod in tutti i namespace? Aggiungi il flag -A (o --all-namespaces), ad esempio kubectl get pods -A. Per limitarti a un singolo namespace, usa invece -n <namespace_name>.

Come visualizzo i log di un container andato in crash? Esegui kubectl logs <pod-name> --previous per vedere i log dell'istanza precedente del container. Aggiungi -c <container-name> se il pod ha più di un container.

Come eseguo il rollback di un deployment? Esegui kubectl rollout undo deployment/<deployment-name> per tornare alla revisione precedente. Per scegliere una revisione specifica, aggiungi --to-revision=<revision-number>.

Come configuro un alias e l'autocompletamento per kubectl? Esegui alias k=kubectl per usare k al posto di kubectl e aggiungilo al tuo ~/.bashrc per renderlo permanente. Per l'autocompletamento in Bash, aggiungi source <(kubectl completion bash) a ~/.bashrc. La cheat sheet copre anche Zsh.

Riduci i costi del cloud fino al 50% con PerfectScale

PerfectScale è uno strumento potente progettato per integrarsi perfettamente con Kubernetes. Integrando PerfectScale nel tuo ambiente Kubernetes, puoi semplificare e ottimizzare l'orchestrazione dei tuoi container. Questa integrazione aumenta l'efficienza nella gestione dei cluster, permettendoti di allocare le risorse in modo più efficace, ridurre i costi operativi e migliorare la stabilità e la resilienza complessive delle tue applicazioni. Gli insight basati sull'AI di PerfectScale offrono una visibilità completa sulle prestazioni del tuo sistema, consentendo interventi proattivi per rispondere a esigenze dinamiche. In questo modo puoi garantire prestazioni ottimali riducendo al contempo i costi fino al 50% grazie ad azioni autonome e basate sui dati che ottimizzano continuamente ogni livello del tuo stack Kubernetes. Per toccare con mano i vantaggi di PerfectScale, prenota una demo e inizia la prova gratuita oggi stesso!