1. Worker Operations
  2. Maintain
  3. Troubleshooting
Website
  • Worker operations
  • Kubernetes requirements
  • CPU and memory for workers and Jobs
  • Install a worker
  • Configure a worker
  • Scratch storage
  • Networking and egress
  • Worker security model
  • Worker health
  • Upgrade a worker
  • Troubleshooting

Troubleshooting

Diagnose worker registration, identity, RBAC, connectivity, image, Secret, and scratch-storage failures.

Loading documentation…

Upgrade a worker< Previous

Powered by heyo

On this page

Diagnostic sequenceCommon symptomsCheck failures after recent worker changesVerify RBAC without broadening itWorker target and TLSWhen to escalate

Start with the customer-visible symptom, then inspect the agent Pod and the affected restore Job. Do not change RBAC, disable NetworkPolicy, or expose Secret values as a first response.

Diagnostic sequence

  1. 1

    Check the worker detail page

    Record status, last seen, configured capacity, advertised capacity, effective capacity, and Accepting jobs. Open the Logs tab when the worker is connected.

  2. 2

    Check the agent Pod

    bash
    kubectl -n <AGENT_NAMESPACE> get deployment,podskubectl -n <AGENT_NAMESPACE> describe pod <AGENT_POD>kubectl -n <AGENT_NAMESPACE> logs <AGENT_POD> --tail=200kubectl -n <AGENT_NAMESPACE> logs <AGENT_POD> --previous --tail=200
  3. 3

    Check generated prerequisites

    bash
    kubectl -n <AGENT_NAMESPACE> get secret restoretrust-worker-identitykubectl -n <JOB_NAMESPACE> get serviceaccount restoretrust-jobkubectl -n <JOB_NAMESPACE> get networkpolicy restoretrust-job-egress-floor

    Do not decode or print the identity Secret.

  4. 4

    Check the restore workload

    For a failed or stuck check:

    bash
    kubectl -n <JOB_NAMESPACE> get jobs,pods,pvc,networkpolicykubectl -n <JOB_NAMESPACE> describe pod <RESTORE_POD>kubectl -n <JOB_NAMESPACE> describe pvc <SCRATCH_PVC>

    Compare Kubernetes events with the check's General and Logs pages in RestoreTrust.

  5. 5

    Make one targeted correction

    Correct the generated resource, StorageClass, DNS path, firewall rule, or local Secret that matches the evidence. Re-run a small manual check before restoring normal schedules.

Common symptoms

SymptomLikely causeWhat to do
Worker remains CreatedAgent never connectedConfirm the Deployment exists, inspect Pod logs, and allow the generated worker target
Agent Pod is CreateContainerConfigErrorIdentity Secret is missing or malformedReapply the original identity manifest; if it is unavailable, create a replacement worker
Agent is in CrashLoopBackOff immediatelyInvalid namespace, capacity, scratch, CIDR, identity, RBAC, or egress-floor configurationRead the first error in current or previous agent logs and restore the generated settings
Logs say another agent uses the identityTwo Pods or Deployments share one worker identityReturn the generated Deployment to one replica and remove the duplicate; create another worker for scale-out
Worker is Online but not accepting jobsKubernetes cache not ready, job identity invalid, graceful drain, or temporary local backpressureDescribe the Pod, inspect logs, and verify the job ServiceAccount and API access
Worker is OfflinePod stopped, session connectivity failed, or worker was removedCheck replicas, Pod state, DNS, outbound TLS, and whether the worker still exists
Console agent logs report forbiddenCurrent agent-namespace RBAC is missingReapply the current generated RBAC that grants get on pods and pods/log in the agent namespace
Agent image stays unknown after an updateThe agent may not read its own PodReapply the current generated RBAC that grants get on pods and pods/log in the agent namespace
Restore Pod cannot resolve its sourceEgress floor does not allow the active cluster resolverAdd NodeLocal or custom resolver IPs to the floor while retaining the CoreDNS selector
Source address is deniedAddress falls in a built-in, cluster, deny, or outside-allow rangeCorrect DNS or revise customer CIDRs; do not allow Kubernetes, metadata, loopback, or management ranges
Restore Pod stays Pending on its PVCStorageClass, quota, topology, or attach limitDescribe Pod and PVC; fix provisioning or reduce parallelism
Restore Pod stays Pending, Insufficient cpu or Insufficient memory; exit 49The schedule's database container requests more CPU or memory than any node has freeLower the schedule's requests, reduce concurrent restores, or add node capacity
Restore reports insufficient storageScratch PVC filled or Pod was evictedIncrease the schedule's scratch size; inspect node disk pressure
Restore container reports missing SecretSelected source or encryption Secret is absent from the job namespaceCreate the expected Secret in the job namespace and verify its name and keys
ImagePullBackOff or ErrImagePullRegistry egress, registry policy, or node credentialsAllow the registry referenced by the Pod and verify the exact image can be pulled
Job has no PodAdmission rejected the Pod or restoretrust-job is missing/unsafeInspect Job events and restore the generated ServiceAccount without cloud identity or token automount

Check failures after recent worker changes

Check result or messageMeaningWhat to do
Start not confirmed after the attempt limit; exit 41Repeated claims could not become a confirmed start; the default limit is 10Check agent connectivity, admission, and capacity before a new manual run
query exceeded the gate time limitOne query exceeded its timeout_seconds, not necessarily the overall run limitSimplify the query or raise its limit within 1–3,600 seconds; for large MongoDB counts consider an estimated count
Duration gate failed after a reconnectThe server interval or worker duration did not satisfy the gateCompare both values and the timing anomaly; a reconnect alone does not fail a measurable gate
server-side timing not observedA gated completed stage lacks a usable timing interval or worker durationInspect missing/out-of-order stage reports and agent connectivity
MySQL/MariaDB sidecar hardening failure; exit 48The temporary database lacks required hardening settings; this is an infrastructure failureBring the API, validator release, and worker installation into the supported combination; do not loosen the database settings
Database container was OOM-killedKubernetes killed the database for memory pressure or at the schedule's memory limitInspect Pod and node events; raise the schedule's memory limit, reduce concurrent restores, or provide more memory
No matching S3 file after changing the pathPaths select one folder, not a recursive key prefix or a single objectSet the containing folder and put filename matching in the filename pattern

For a finished check whose worker capacity is still reserved, inspect the retained Job and Pod and the agent's connection. Cleanup requires an evidence handoff; do not strip finalizers or delete scratch volumes as a routine fix. See Reconnection and capacity recovery.

Verify RBAC without broadening it

Run the checks as the agent ServiceAccount:

bash
kubectl auth can-i --as=system:serviceaccount:<AGENT_NAMESPACE>:restoretrust-k8s-agent \  list jobs.batch -n <JOB_NAMESPACE>kubectl auth can-i --as=system:serviceaccount:<AGENT_NAMESPACE>:restoretrust-k8s-agent \  list pods -n <JOB_NAMESPACE>kubectl auth can-i --as=system:serviceaccount:<AGENT_NAMESPACE>:restoretrust-k8s-agent \  create networkpolicies.networking.k8s.io -n <JOB_NAMESPACE>kubectl auth can-i --as=system:serviceaccount:<AGENT_NAMESPACE>:restoretrust-k8s-agent \  get pods -n <AGENT_NAMESPACE>kubectl auth can-i --as=system:serviceaccount:<AGENT_NAMESPACE>:restoretrust-k8s-agent \  get pods/log -n <AGENT_NAMESPACE>kubectl auth can-i --as=system:serviceaccount:<AGENT_NAMESPACE>:restoretrust-k8s-agent \  get secrets -n <JOB_NAMESPACE>

The first five should return yes; Secret access should return no. If either agent-namespace check fails, apply the current self-read RBAC.

Also confirm that the job ServiceAccount has token automount disabled and no cloud identity annotations:

bash
kubectl -n <JOB_NAMESPACE> get serviceaccount restoretrust-job -o yaml

Worker target and TLS

Read the target from the running Deployment:

bash
kubectl -n <AGENT_NAMESPACE> get deployment restoretrust-k8s-agent \  -o jsonpath='{.spec.template.spec.containers[?(@.name=="agent")].env[?(@.name=="WORKER_GRPC_TARGET")].value}{"\n"}'

Verify that cluster DNS and firewalls permit that exact host and port. Use the CA Secret and TLS settings generated by RestoreTrust; do not replace them with an insecure target.

When to escalate

Contact RestoreTrust support when:

  • the generated install says it is not ready;
  • an immutable image digest cannot be pulled although registry access works;
  • a correctly configured agent repeatedly connects and becomes Offline;
  • the worker stays Online but cannot accept jobs after RBAC, identity, storage, and network checks pass;
  • a Job remains after its result was finalized and no debug retention is enabled;
  • you need egress admission for multiple job namespaces in one cluster.

Include the evidence listed in Worker health. Never include worker identity JSON, Secret values, source credentials, or decryption material.

Related topics

  • Interpret worker health
  • Check networking and egress
  • Check scratch storage
  • Upgrade or uninstall a worker