🧾 Guida Comandi di Debug – OpenShift / RHEL CoreOS (journalctl, crictl & co.)
Questa guida raccoglie i principali comandi utili per il debug dei nodi OpenShift 4.x , in particolare nella fase di bootstrap o durante problemi runtime con kubelet e CRI-O.
🔹 Sezione 1 – journalctl: analisi dei log di sistema
journalctl mostra i log di systemd , utili per analizzare errori dei servizi di sistema.
📘 Comandi generali
Comando Descrizione journalctl -xeMostra gli ultimi log con dettagli su errori e warning. journalctl -fSegue i log in tempo reale. journalctl -bLog dall’ultimo boot del sistema. journalctl -kLog del kernel. journalctl --since "10 min ago"Log degli ultimi 10 minuti. journalctl --since yesterdayLog da ieri. journalctl --since "2025-11-07 14:00"Log da un’ora/data specifica. journalctl --no-pagerMostra tutto senza paginazione.
🔍 Log per servizio specifico
Comando Descrizione journalctl -u kubeletLog del servizio kubelet. journalctl -u crioLog del container runtime CRI-O. journalctl -u NetworkManagerLog del servizio rete. journalctl -u bootkube.serviceLog del processo bootstrap. journalctl -u release-image.serviceLog del servizio che scarica e lancia l’immagine release. journalctl -u ignitionLog del provisioning tramite Ignition. journalctl -u systemd-resolvedLog del resolver DNS locale.
🧩 Filtri avanzati
Comando Descrizione journalctl -p errMostra solo messaggi di livello error. journalctl -p warningMostra warning ed errori. journalctl -t crioFiltra per tag (es. log generati da CRI-O). journalctl -u kubelet -n 50Mostra ultime 50 righe del servizio kubelet. journalctl -u crio --grep "Failed"Cerca nei log la stringa “Failed”. journalctl -u kubelet -S -1h -U nowLog kubelet dell’ultima ora. journalctl _PID=1234Log di un processo specifico.
📦 Export dei log
Comando Descrizione journalctl -u kubelet > /tmp/kubelet.logEsporta log di kubelet. journalctl --no-pager --all > /tmp/all_logs.txtEsporta tutti i log. journalctl --list-bootsMostra i boot precedenti. journalctl -b -1Log del boot precedente.
🔹 Sezione 2 – crictl: debug container runtime (CRI-O)
crictl interagisce direttamente con CRI-O per ispezionare container e pod.
📘 Comandi base
Comando Descrizione crictl psElenca container in esecuzione. crictl ps -aElenca tutti i container, anche terminati. crictl imagesElenca le immagini presenti localmente. crictl infoMostra info generali del runtime. crictl versionVersione di client/server CRI-O.
🧩 Ispezione e log container
Comando Descrizione crictl inspect <container-id>Dettagli JSON di un container. crictl inspectp <pod-id>Dettagli del pod sandbox. crictl logs <container-id>Mostra log stdout/stderr del container. crictl statsStatistiche dei container attivi. crictl podsElenca i pod sandbox gestiti. crictl stopp <pod-id>Arresta un pod sandbox. crictl rm <container-id>Rimuove un container. crictl rmp <pod-id>Rimuove un pod sandbox.
⚙️ Gestione immagini
Comando Descrizione crictl pull quay.io/...Pull manuale di un’immagine. crictl rmi <image-id>Rimuove un’immagine locale. crictl imagefsinfoInfo sul filesystem delle immagini.
🧠 Debug avanzato
Comando Descrizione crictl config runtime-endpointMostra o imposta il socket runtime. `crictl inspect grep -i logPath` `crictl inspectp jq .status.sandboxID` crictl exec <container-id> ls /Esegue comandi all’interno del container. crictl ps --name etcdFiltra container per nome.
🔹 Sezione 3 – systemctl: gestione servizi
Comando Descrizione systemctl list-units --type=serviceElenca servizi attivi. systemctl restart kubeletRiavvia kubelet. systemctl restart crioRiavvia CRI-O. systemctl enable crio --nowAbilita CRI-O al boot. systemctl status crio -lMostra stato esteso di CRI-O. systemctl cat kubeletMostra file unit systemd di kubelet.
🔹 Sezione 4 – Altri strumenti utili
Strumento Comando Descrizione oc get nodesVerifica se il nodo è visibile al cluster. oc get coStato dei Cluster Operators. oc describe node <node>Dettagli su kubelet e taint del nodo. podman ps -aElenca container (se CRI-O non parte). rpm-ostree statusMostra versione OS e commit. nmcli dev showMostra configurazione rete. ss -tulpnMostra porte TCP/UDP aperte.
🔹 Sezione 5 – Troubleshooting rapido
Caso Comando Obiettivo Kubelet non si avvia journalctl -u kubelet -p errVedere errori recenti. Etcd non parte crictl ps -a | grep etcd + crictl logs <id>Verifica log etcd. Problema di rete journalctl -u NetworkManager -p errErrori DHCP/DNS. CRI-O non risponde systemctl restart crio + journalctl -u crio -bRiavvia runtime e analizza log. Container crashloop crictl ps -a --name <container>Controlla exit code. Bootstrap bloccato journalctl -b -u bootkube.serviceIndividua punto di blocco.
🔹 Sezione 6 – Raccolta log completa
Raccogli log per analisi esterna:
sos report --all-logs --batch
Oppure manualmente:
tar czf /tmp/bootstrap_debug_logs.tar.gz /var/log /etc/kubernetes /etc/systemd/system /var/lib/kubelet /var/lib/containers /etc/containers
💡 Suggerimento: combinare journalctl, crictl e systemctl fornisce un quadro completo del comportamento del nodo e dei container durante il bootstrap.