Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Kubectl Cheat Sheet: padroneggi Kubernetes con questi comandi [PDF gratuito incluso]

By DoiTApr 14, 202511 min read

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

persona che programma su un laptop

Nella cassetta degli attrezzi di ogni amministratore Kubernetes non può mancare kubectl: la potente interfaccia a riga di comando pensata per gestire i cluster Kubernetes in modo efficiente.

Kubectl (si pronuncia "kube-control" o "kube-C-T-L") è il canale di comunicazione diretto con l'API server di Kubernetes e le consente di distribuire applicazioni, ispezionare risorse, consultare i log ed eseguire praticamente qualsiasi operazione all'interno del cluster. Che si tratti di un DevOps engineer, di un platform administrator o di uno sviluppatore alle prese con applicazioni containerizzate, padroneggiare kubectl è imprescindibile per una gestione efficace di Kubernetes nel cloud computing.

Questo pratico cheat sheet raccoglie i comandi kubectl più utili, con esempi concreti e suggerimenti per portare le sue attività quotidiane su Kubernetes a un livello superiore.

Quali sono le categorie principali dei comandi kubectl?

Logo di Kubectl Logo di Kubectl

I comandi kubectl si possono raggruppare in tre categorie principali, ciascuna dedicata a un aspetto diverso della gestione del cluster:

1. Comandi per le informazioni sul cluster

Questi comandi offrono una visione d'insieme dello stato e della configurazione del cluster Kubernetes:

  • Ottenere informazioni sui componenti del cluster
  • Visualizzare lo stato e le risorse dei nodi
  • Verificare lo stato di salute dell'apiserver
  • Ispezionare i componenti del control plane

2. Comandi per la gestione delle risorse

I comandi per la gestione delle risorse permettono di creare, modificare, eliminare e ispezionare le risorse Kubernetes:

  • Creare e aggiornare risorse
  • Elencare e descrivere risorse
  • Eliminare risorse
  • Scalare risorse verso l'alto o verso il basso
  • Modificare risorse in tempo reale

3. Comandi per il deployment delle applicazioni

Infine, i comandi per il deployment delle applicazioni semplificano la distribuzione e la gestione del ciclo di vita applicativo:

  • Distribuire applicazioni da YAML o JSON
  • Gestire deployment e rollout
  • Configurare l'autoscaling
  • Aggiornare le configurazioni delle applicazioni
  • Gestire il networking delle applicazioni

Tenendo a mente queste tre categorie, vediamo nel dettaglio alcuni comandi kubectl specifici che userà spesso nel suo percorso con Kubernetes.

Andiamo più a fondo: cheat sheet dei comandi kubectl

persona che programma su un laptop persona che programma su un laptop

Di seguito un cheat sheet da tenere sempre a portata di mano, con i comandi kubectl che probabilmente userà più spesso, corredati di esempi per snellire i flussi di lavoro su Kubernetes.

Pod

I Pod sono le unità deployabili più piccole di Kubernetes e sono composti da uno o più container che condividono storage e risorse di rete.

Elencare tutti i pod:

kubectl get pods

Elencare i pod con maggiori dettagli:

kubectl get pods -o wide

Ottenere informazioni dettagliate su un pod specifico:

kubectl describe pod

Creare un pod da un file YAML:

kubectl apply -f pod.yaml

Eliminare un pod:

kubectl delete pod

Eseguire un comando all'interno del container di un pod:

kubectl exec -it --

Ottenere i log di un pod:

kubectl logs

Visualizzare in streaming i log di un pod in tempo reale:

kubectl logs -f

Ottenere i log di un container specifico in un pod multi-container:

kubectl logs -c

Effettuare il port-forward verso un pod:

kubectl port-forward :

Copiare file da/verso un pod:

kubectl cp :/path/to/file /local/path

kubectl cp /local/path :/path/in/pod

Service

I Service creano una rete stabile per i pod e, grazie a un livello di astrazione, semplificano la comunicazione tra i diversi componenti.

Elencare tutti i service:

kubectl get services

Ottenere informazioni dettagliate su un service:

kubectl describe service

Creare un service da un file YAML:

kubectl apply -f service.yaml

Esporre un deployment come service:

kubectl expose deployment --port= --target-port=

Eliminare un service:

kubectl delete service

Visualizzare gli endpoint associati a un service:

kubectl get endpoints

Creare un service ClusterIP:

kubectl create service clusterip --tcp=:

Creare un service NodePort:

kubectl create service nodeport --tcp=:

Creare un service LoadBalancer:

kubectl create service loadbalancer --tcp=:

Deployment

I Deployment forniscono aggiornamenti dichiarativi per Pod e ReplicaSet e semplificano lo scaling e l'aggiornamento delle applicazioni.

Elencare tutti i deployment:

kubectl get deployments

Ottenere informazioni dettagliate su un deployment:

kubectl describe deployment

Creare un deployment da un file YAML:

kubectl apply -f deployment.yaml

Creare un deployment direttamente dalla riga di comando:

kubectl create deployment --image=

Scalare un deployment:

kubectl scale deployment --replicas=

Aggiornare l'immagine del container di un deployment:

kubectl set image deployment/ =

Effettuare il rollback di un deployment a una revisione precedente:

kubectl rollout undo deployment/

Visualizzare lo stato di rollout del deployment:

kubectl rollout status deployment/

Visualizzare la cronologia di rollout del deployment:

kubectl rollout history deployment/

Mettere in pausa il rollout di un deployment:

kubectl rollout pause deployment/

Riprendere il rollout di un deployment:

kubectl rollout resume deployment/

ConfigMap e Secret

Le ConfigMap e i Secret servono a memorizzare, rispettivamente, dati di configurazione e informazioni sensibili.

Nota importante sulla sicurezza: per impostazione predefinita, sia le ConfigMap sia i Secret sono memorizzati in etcd in chiaro. Se gestisce dati sensibili, è bene abilitare la crittografia at rest.

Elencare le ConfigMap:

kubectl get configmaps

Creare una ConfigMap da valori letterali:

kubectl create configmap --from-literal=key1=value1 --from-literal=key2=value2

Creare una ConfigMap da un file:

kubectl create configmap --from-file=

Ottenere informazioni dettagliate su una ConfigMap:

kubectl describe configmap

Eliminare una ConfigMap:

kubectl delete configmap

Elencare i Secret:

kubectl get Secrets

Creare un Secret da valori letterali:

kubectl create secret generic --from-literal=key1=value1 --from-literal=key2=value2

Creare un Secret da un file:

kubectl create secret generic --from-file=

Ottenere informazioni dettagliate su un Secret:

kubectl describe secret

Eliminare un Secret:

kubectl delete secret

Consigli da esperto per usare kubectl

persona che guarda il telefono mentre programmapersona che guarda il telefono mentre programma

Lo strumento da riga di comando kubectl è imprescindibile per lavorare con i cluster Kubernetes e gestirne le risorse. Imparare a usarlo bene può semplificarle molto la vita e aiutarla a fare deployment, scaling e troubleshooting in modo più efficiente. Con kubectl edit, poi, può modificare al volo risorse come pod e deployment direttamente dalla riga di comando.

Usare i namespace in modo efficace

I namespace sono una funzionalità chiave di Kubernetes che le consente di suddividere il cluster in sotto-cluster virtuali. Sono particolarmente utili negli scenari multi-tenant o quando si gestiscono applicazioni più articolate.

Elencare le risorse in un namespace specifico:

kubectl get -n

Creare una risorsa in un namespace specifico:

kubectl apply -f <file.yaml> -n

Impostare il namespace predefinito per tutti i comandi kubectl:

kubectl config set-context --current --namespace=

Visualizzare le risorse in tutti i namespace:

kubectl get --all-namespaces

Creare un nuovo namespace:

kubectl create namespace

È buona prassi raggruppare le risorse correlate in namespace dedicati per definire confini chiari tra app o team. Scelga nomi che ne rendano evidente lo scopo, come dev-frontend, prod-backend o monitoring.

Selettori di label per filtrare le risorse

Le label sono coppie chiave-valore associate agli oggetti Kubernetes. Sono uno strumento eccellente per organizzare, selezionare e gestire più facilmente gruppi di risorse.

Elencare le risorse con una label specifica:

kubectl get -l key=value

Elencare le risorse con più condizioni di label:

kubectl get -l ‘key1=value1,key2=value2’

Elencare le risorse che hanno una determinata chiave di label (indipendentemente dal valore):

kubectl get -l ‘key’

Elencare le risorse che non hanno una determinata label:

kubectl get -l ‘!key’

Aggiungere una label a una risorsa esistente:

kubectl label key=value

Rimuovere una label da una risorsa:

kubectl label key-

Una strategia di etichettatura coerente è fondamentale per gestire le risorse in modo efficace. Provi a utilizzare label come app, environment, tier, version e owner per costruire un sistema chiaro e ordinato.

Implementare i rolling update

Con i rolling update, Kubernetes consente di aggiornare le applicazioni senza downtime. Questa strategia sostituisce gradualmente le istanze della vecchia versione con quelle della nuova.

Aggiornare un deployment con una nuova immagine (avvia il rolling update):

kubectl set image deployment/ =:

Verificare lo stato del rollout:

kubectl rollout status deployment/

Configurare la strategia di aggiornamento in un YAML di deployment:

spec:

strategy:

type: RollingUpdate

rollingUpdate:

 maxUnavailable: 25%

 maxSurge: 25%

Tornare alla versione precedente in caso di problemi:

kubectl rollout undo deployment/

Mettere in pausa il rollout di un deployment:

Copykubectl rollout pause deployment/

Si tratta di un'opzione particolarmente utile nei deployment a fasi: consente di rilasciare a un sottoinsieme di pod, verificarne il funzionamento e poi proseguire il rollout dopo la convalida.

Riprendere il rollout di un deployment:

Copykubectl rollout resume deployment/

Per le applicazioni critiche, valuti l'uso del flag --record quando applica modifiche al deployment. Aggiunge una nota con il comando utilizzato, così potrà ricostruire facilmente la cronologia delle modifiche:

kubectl apply -f deployment.yaml --record

Gestire con attenzione quote e limiti delle risorse

La gestione delle risorse ha un ruolo centrale in Kubernetes. Impostare correttamente request e limit è essenziale per mantenere stabile il cluster e garantire una distribuzione equa delle risorse.

Visualizzare le quote risorse in un namespace:

kubectl get resourcequota -n

Creare una quota risorse per un namespace:

kubectl create quota --hard=cpu=1,memory=1G,pods=10 -n

Verificare l'utilizzo delle risorse dei pod:

kubectl top pods

Verificare l'utilizzo delle risorse dei nodi:

kubectl top nodes

Quando definisce le specifiche dei container, imposti sempre request e limit:

resources:

requests:

memory: "64Mi"

cpu: "250m"

limits:

memory: "128Mi"

cpu: "500m"

Tenga presente che le request aiutano lo scheduler a decidere dove collocare il pod, mentre i limit definiscono il consumo massimo oltre il quale i container possono essere terminati. Una buona regola è impostare le request in base al consumo previsto a regime e i limit in base a ciò che è accettabile nei picchi di utilizzo.

Padroneggiare il debugging con kubectl

Il debugging è fondamentale per mantenere efficienti le applicazioni Kubernetes. Per fortuna, kubectl mette a disposizione numerosi comandi che semplificano la risoluzione dei problemi.

Ottenere i log di un container:

kubectl logs -c

Debugging interattivo con un pod temporaneo:

kubectl run debug --rm -it --image=busybox -- sh

Creare un container di debug collegato a un pod esistente:

kubectl debug -it --image=busybox --share-processes --copy-to=

Visualizzare gli eventi in un namespace:

kubectl get events -n

Verificare condizioni e dettagli di stato di un pod:

Copykubectl describe pod

Restituisce un output più strutturato delle condizioni del pod, mostrando l'intera cronologia delle transizioni e lo stato attuale in un formato facile da leggere.

Verificare la connettività tra pod con un container per il debug di rete:

kubectl run test-connectivity --rm -it --image=nicolaka/netshoot -- bash

Per i problemi persistenti, valuti l'uso del flag --previous per consultare i log dei container che si sono arrestati in precedenza:

kubectl logs --previous

Best practice di sicurezza con kubectl

due persone che programmano su un laptopdue persone che programmano su un laptop

Mantenere sicuro il cluster Kubernetes è fondamentale, e kubectl gioca un ruolo chiave in questo. Ecco alcune best practice per restare sempre un passo avanti sul fronte della sicurezza:

Gestire i controlli di accesso con RBAC

Il Role-Based Access Control (RBAC) è lo standard per l'autorizzazione in Kubernetes e le permette di definire permessi dettagliati per utenti e service account.

Visualizzare i ruoli in un namespace:

kubectl get roles -n

Visualizzare i cluster role:

kubectl get clusterroles

Visualizzare i role binding:

kubectl get rolebindings -n

Visualizzare i cluster role binding:

kubectl get clusterrolebindings

Creare un ruolo con permessi specifici:

kubectl create role developer --verb=get,list,watch --resource=pods,deployments -n

Associare un ruolo a un utente:

kubectl create rolebinding dev-user-binding --role=developer --user=dev-user -n

Quando possibile, opti sempre per i RoleBinding al posto dei ClusterRoleBinding, così da limitare i permessi a un namespace specifico. È un'applicazione concreta del principio del minimo privilegio: l'accesso viene circoscritto solo ai namespace che ne hanno realmente bisogno, riducendo l'impatto potenziale di un'eventuale compromissione delle credenziali.

Si attenga al principio del minimo privilegio, concedendo a utenti e service account soltanto i permessi indispensabili al loro lavoro. Prenda l'abitudine di rivedere periodicamente i role binding per verificare che siano ancora coerenti con l'evolversi di ruoli e responsabilità.

Gestione sicura dei Secret

I Secret di Kubernetes vanno gestiti con attenzione, perché contengono informazioni sensibili come API key, password e certificati.

Creare un secret in modo sicuro da un file:

kubectl create secret generic db-credentials --from-file=./username.txt --from-file=./password.txt

Creare un secret TLS:

kubectl create secret tls tls-secret --cert=path/to/cert --key=path/to/key

Montare i Secret come variabili d'ambiente:

env:

- name: DB_PASSWORD

valueFrom:

 secretKeyRef:

   name: db-credentials

   key: password

Montare i Secret come file:

volumes:

- name: secret-volume

secret:

 secretName: ssl-certificates

Per rafforzare la sicurezza, valuti l'adozione di strumenti esterni per la gestione dei secret come HashiCorp Vault, AWS Secrets Manager o Sealed Secrets. Offrono funzionalità preziose come rotazione dei secret, audit trail e crittografia.

Usare kubectl con un context sicuro

Verifichi sempre di operare nel context corretto, per evitare di intervenire per errore sul cluster sbagliato.

Visualizzare tutti i context disponibili:

kubectl config get-contexts

Passare a un context specifico:

kubectl config use-context

Visualizzare il context corrente:

kubectl config current-context

Impostare il namespace per il context corrente:

kubectl config set-context --current --namespace=

Negli ambienti di produzione critici è una buona idea ricorrere a segnali visivi, come prompt di shell personalizzati, per evidenziare cluster e namespace correnti. È un accorgimento che riduce il rischio di azioni accidentali sulle risorse sbagliate.

Usare le network policy

Le Network Policy agiscono come firewall all'interno del cluster Kubernetes e regolano la comunicazione tra i pod.

Elencare le network policy:

kubectl get networkpolicies

Creare una network policy che nega per impostazione predefinita tutto il traffico in ingresso:

kubectl apply -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: default-deny-ingress

spec:

podSelector: {}

policyTypes:

- Ingress

EOF

Creare una network policy che consente traffico specifico:

kubectl apply -f - <<EOF

apiVersion: networking.k8s.io/v1

kind: NetworkPolicy

metadata:

name: allow-frontend-to-backend

spec:

podSelector:

matchLabels:

 app: backend

ingress:

- from:

- podSelector:

   matchLabels:

     app: frontend

ports:

- port: 8080

EOF

Parta da una network policy "deny-all" come baseline e poi consenta solo il traffico effettivamente necessario. In questo modo applicherà il principio del minimo privilegio mantenendo la superficie d'attacco quanto più ridotta possibile.

Padroneggi la gestione di Kubernetes con questi comandi kubectl e best practice

Kubectl è uno strumento imprescindibile nel mondo dei comandi Kubernetes: l'interfaccia di riferimento per gestire e operare sui cluster Kubernetes. Imparando questi comandi e seguendo le best practice di questo cheat sheet, sarà pronto ad affrontare le sfide delle applicazioni containerizzate con la massima sicurezza.

Tenga presente che Kubernetes è in continua evoluzione, e così pure kubectl. Resti aggiornato su nuove funzionalità e novità per affinare costantemente le sue competenze nella gestione dei cluster.

Se desidera approfondire argomenti più avanzati, come l'espansione degli intervalli di IP dei service Kubernetes, dia un'occhiata alla nostra guida dettagliata su come espandere gli intervalli di IP dei service in modo trasparente.

Man mano che il suo ambiente Kubernetes cresce e diventa più complesso, disporre degli strumenti e delle competenze giuste diventa ancora più importante. È qui che entra in gioco DoiT. Il nostro team globale di cloud architect è specializzato nell'aiutare le aziende a costruire infrastrutture cloud efficienti sui costi, scalabili e resilienti. Siamo al suo fianco per affrontare le sfide più complesse di configurazione e integrazione di Kubernetes, supportandola nel troubleshooting e nel miglioramento dell'efficienza operativa.

Ci contatti per scoprire come possiamo aiutarla a ottimizzare la sua strategia di orchestrazione dei container, ottenendo prestazioni migliori e maggiori risparmi.