Skip to content

Guida Comandi di Debug – OpenShift / RHEL CoreOS (journalctl, crictl & co.)

🧾 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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

ComandoDescrizione
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

StrumentoComandoDescrizione
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

CasoComandoObiettivo
Kubelet non si avviajournalctl -u kubelet -p errVedere errori recenti.
Etcd non partecrictl ps -a | grep etcd + crictl logs <id>Verifica log etcd.
Problema di retejournalctl -u NetworkManager -p errErrori DHCP/DNS.
CRI-O non rispondesystemctl restart crio + journalctl -u crio -bRiavvia runtime e analizza log.
Container crashloopcrictl ps -a --name <container>Controlla exit code.
Bootstrap bloccatojournalctl -b -u bootkube.serviceIndividua punto di blocco.

🔹 Sezione 6 – Raccolta log completa

Raccogli log per analisi esterna:

Terminal window
sos report --all-logs --batch

Oppure manualmente:

Terminal window
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.