Negli esami pratici basati sulle prestazioni come il Certified Kubernetes Administrator (CKA) e il CKAD, il principale collo di bottiglia non è la conoscenza teorica: è la gestione del tempo.
Scrivere manifest YAML da zero o sfogliare la documentazione ufficiale alla ricerca della sintassi durante la prova è il modo più rapido per perdere minuti preziosi.
I candidati con i punteggi più alti fanno affidamento sulla memoria muscolare, sui generatori di comandi imperativi, sul cambio rapido di namespace e su comandi one-liner collaudati per il troubleshooting.
Ecco un Cheat Sheet pratico e senza fronzoli per la CLI di kubectl da utilizzare durante la preparazione e nelle operazioni quotidiane sui cluster.
1. Configurazione Rapida della Shell
All’avvio della sessione di terminale, configura immediatamente queste scorciatoie essenziali:
# 1. Alias principale per kubectl
alias k=kubectl
# 2. Generatore rapido di manifest YAML
export do="--dry-run=client -o yaml"
Suggerimento: Negli ambienti d’esame della Linux Foundation, il completamento automatico bash per
kubectlè già abilitato per impostazione predefinita. L’aliaske la variabile$doti daranno una velocità immediata.
2. Cambio Rapido di Namespace e Contesto
Evita di digitare -n <namespace> alla fine di ogni singolo comando. Se una domanda richiede molteplici operazioni nello stesso namespace, imposta subito il contesto corrente:
# Imposta il namespace predefinito per il contesto attivo
k config set-context --current --namespace=finance
# Verifica il contesto corrente e il namespace attivo
k config get-contexts
k config current-context
3. Generatori YAML Imperativi (Mai Scrivere YAML da Zero)
Genera sempre un manifest di base con $do (--dry-run=client -o yaml) e reindirizzalo su file o invialo in pipe a kubectl apply.
3.1. Pod
# Pod Nginx base
k run nginx-pod --image=nginx $do > pod.yaml
# Pod con comando e argomenti personalizzati
k run busybox-pod --image=busybox --restart=Never $do -- /bin/sh -c "sleep 3600" > pod.yaml
# Pod con label e porta del container esposta
k run web --image=httpd:alpine --port=80 --labels="tier=frontend,app=web" $do > web-pod.yaml
3.2. Deployment e Scalabilità
# Crea un Deployment con 3 repliche
k create deployment web-deploy --image=nginx:1.25 --replicas=3 $do > deploy.yaml
# Scala il deployment al volo
k scale deployment web-deploy --replicas=5
# Aggiorna l'immagine e controlla la cronologia del rollout
k set image deployment/web-deploy nginx=nginx:1.26
k rollout status deployment/web-deploy
k rollout undo deployment/web-deploy
3.3. Esposizione dei Service (ClusterIP, NodePort, LoadBalancer)
# Esponi un Deployment come ClusterIP (Porta 80 -> TargetPort 8080)
k expose deployment web-deploy --port=80 --target-port=8080 --name=web-service
# Esponi come NodePort esportando il manifest YAML
k expose deployment web-deploy --type=NodePort --port=80 --target-port=80 --name=web-np $do > svc-nodeport.yaml
# Creazione diretta del Service
k create service clusterip backend-svc --tcp=8080:8080 $do > svc.yaml
4. Ingress e Gateway API
4.1. Creazione Imperativa di Ingress
# Ingress base con regole di routing per host e percorso
k create ingress web-ingress --rule="app.example.com/api*=backend-svc:8080" --rule="app.example.com/*=web-service:80" $do > ingress.yaml
# Ingress con backend predefinito
k create ingress simple-ingress --default-backend=fallback-svc:8080 $do > ingress-default.yaml
4.2. Template YAML per Ingress (Host + TLS + Annotazioni)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: secure-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts:
- secure.example.com
secretName: tls-secret
rules:
- host: secure.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
4.3. Gateway API (Routing Moderno in Kubernetes)
# 1. Definizione del Gateway
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: prod-gateway
spec:
gatewayClassName: eg-gateway-class
listeners:
- name: http
protocol: HTTP
port: 80
---
# 2. Definizione di HTTPRoute
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-route
spec:
parentRefs:
- name: prod-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: backend-svc
port: 8080
5. ConfigMap, Secret e Variabili d’Ambiente
# ConfigMap da valori letterali
k create configmap app-config --from-literal=DB_HOST=10.0.0.5 --from-literal=DB_PORT=5432
# ConfigMap da un file di configurazione esistente
k create configmap nginx-conf --from-file=nginx.conf
# Secret da password letterale o file .env
k create secret generic db-secret --from-literal=password=SuperSecret123
k create secret generic app-secret --from-env-file=.env
# Inietta ConfigMap o Secret direttamente nelle variabili d'ambiente di un Deployment
k set env deployment/web-deploy --from=configmap/app-config
k set env deployment/web-deploy --from=secret/db-secret
6. Storage: PersistentVolume e PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
storageClassName: standard
Montaggio all’interno di un Pod:
spec:
volumes:
- name: storage-vol
persistentVolumeClaim:
claimName: data-pvc
containers:
- name: app
image: nginx
volumeMounts:
- name: storage-vol
mountPath: /var/data
7. Sicurezza, RBAC e ServiceAccount
# 1. Crea un ServiceAccount
k create serviceaccount app-sa
# 2. Crea un Ruolo con permessi specifici su determinate risorse
k create role pod-reader --verb=get,list,watch --resource=pods,pods/log
# 3. Associa il Ruolo al ServiceAccount nel namespace
k create rolebinding read-pods-binding --role=pod-reader --serviceaccount=default:app-sa
# 4. Permessi a livello di intero cluster (ClusterRole e ClusterRoleBinding)
k create clusterrole node-viewer --verb=get,list --resource=nodes
k create clusterrolebinding view-nodes-binding --clusterrole=node-viewer --serviceaccount=default:app-sa
# 5. Verifica dei permessi (Posso eseguire questa azione?)
k auth can-i create deployments --as=system:serviceaccount:default:app-sa
k auth can-i delete pods -n production
8. NetworkPolicy: Isolamento Rapido
Regola di Ingress Default Deny per blindare un namespace:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
Consenti il traffico solo da specifici pod di frontend sulla porta 80:
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:
- protocol: TCP
port: 80
9. Troubleshooting, JSONPath e Diagnostica Avanzata
9.1. Query JSONPath ad Alta Efficienza
# Estrai gli IP interni di tutti i Worker Node
k get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
# Mostra i nomi dei Pod e i rispettivi Nodi di esecuzione in colonne dedicate
k get pods -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName,STATUS:.status.phase
# Decodifica il valore di un Secret senza passaggi manuali con base64
k get secret db-secret -o jsonpath='{.data.password}' | base64 -d
9.2. Debugging in Tempo Reale e Container di Diagnostica
# Avvia un container temporaneo di debug nella rete del cluster
k run net-debug --rm -i --tty --image=curlimages/curl -- /bin/sh
# Segui i log in streaming con timestamp e limite di righe
k logs -f deployment/web-deploy --tail=50 --timestamps
# Visualizza l'utilizzo delle risorse nei nodi e nei pod
k top nodes
k top pods -A --sort-by=cpu
k top pods -A --sort-by=memory
# Ispeziona gli eventi ordinati per data di creazione recente
k get events -A --sort-by='.metadata.creationTimestamp'
Checklist Rapida per il Giorno dell’Esame
- Configura subito
alias k=kubectleexport do="--dry-run=client -o yaml". - Imposta il namespace di contesto (
k config set-context --current --namespace=...) se una domanda comprende passaggi multipli. - Genera sempre manifest con
$do > file.yamlinvece di copiare blocchi massicci dalla documentazione. - Verifica sempre i risultati finali con
k get <risorsa>o testando gli endpoint con container effimeri.
Padroneggia questi one-liner durante le tue sessioni di laboratorio e completerai i compiti dell’esame CKA con ampio margine di tempo! 🎯





Community Discussion 0