Troubleshoot

A liken machine reports its problems in the Machine resource. Read in this order: the phase, then the condition that is False, then the status field that the condition’s message names.

kubectl get machines
kubectl describe machine <name>

The phase gives the machine’s state in one word. Ready means every condition is true. Blocked means a change exists that the system refuses to apply, and more time will not fix it. Lost means the machine’s heartbeat stopped. The sections below start from the symptom you see.

The machine stays at the stick menu

The menu has no timeout, so a machine at the menu waits for a person. Select an entry.

If the machine returned to the menu after an installation, the stick is still connected. The stick is first in the boot order. Power the machine off, remove the stick, and power it on again. It then boots from its own disk.

The installation refuses a disk

install as <name> claims blank disks only, so it does not erase data that it did not write. To replace an installation that liken made, select wipe and reinstall as <name> instead. Install a cluster explains both paths, and the disk-replacement case between them.

The installation fails and holds

A failed installation prints its error, lists the machine’s disks, and holds the console. Correct the cause and boot the installation again. An installation is idempotent, so a second attempt is safe.

If the error says that a disk needs a driver the boot path does not carry, run the hardware report. The report names the driver and keeps that disk out of the proposed layout. Install a cluster describes the report.

A machine does not join the cluster

Install the first leader first. A follower that boots before any leader serves waits for one.

A declared network port with no cable delays each boot, because the machine waits a maximum of thirty seconds for that port. Remove the port from the manifest, or connect the cable.

If the machine still does not appear in kubectl get machines, watch its console. Every step of the boot prints there, and a boot that fails holds its reason on the screen.

A machine shows Lost

The machine stopped sending its heartbeat, so the cluster operator wrote the phase on its behalf. The machine is powered off, or it cannot reach the cluster. When the machine returns, its next report overwrites the phase. If the machine is running and Lost, check its network path to the leaders.

A machine shows Blocked

A change exists that the system refuses to stage. The condition that is False names the reason:

A machine returned to the old version

The machine tried the new version one time, the trial failed, and the machine fell back to the slot it had proved. Its conditions show RejectedLastBoot, and status.boot.systemRejection records what happened. The machine does not try that version again until spec.version points at a different release. Roll back describes the fallback and the correction.

The fleet stays on the old version

kubectl get machines shows each machine’s version in the LIKEN column. For a machine that did not move, read its conditions:

If the Cluster’s Progressing condition is False with the reason RolloutStalled, a machine with a granted turn did not return. The cluster grants no more turns until you examine that machine, so the rest of the fleet is safe while you do.

A machine crashed

A kernel crash survives the reboot. The next boot reads the crash from the machine’s crash journal and reports it in the Machine’s status.lastCrash, with the log lines that the kernel wrote as it failed:

kubectl get machine <name> -o jsonpath='{.status.lastCrash}' | jq

A machine needs a reboot and nothing is staged

A machine converges to its documents, so a machine that already matches them stages nothing and reboots for nothing. Some faults clear only at boot anyway. A kernel driver that bound the wrong device holds it until the machine restarts, and no edit takes it back.

liken request-reboot asks for that boot:

./liken request-reboot mycluster <name>

The machine waits for its reboot turn, cordons, and drains, the same as a machine applying a staged change. If its rebootPolicy is Manual, it reports RebootPending and waits for liken approve-reboot. The RebootRequestHonored condition reports where the request is.

A pod with a device claim stays Pending

Give a workload a device gives the checks, in order.

Reading logs

liken stern tails the logs of many pods at once, with the deployment’s credential:

./liken stern mycluster <pod-name-pattern>

When the logs do not explain a problem, the Cluster’s spec.runtime section raises the log level of k3s or containerd, one field each, and says what each level costs.