Skip to main content
Version: 0.1.0

Use this runbook when

  • Pods are running but remain sealed and not ready
  • the cluster reports OpenBaoSealed=True
  • cloud KMS, transit, TLS, or static-key dependencies might be blocking startup
  • you need to decide whether this is a seal problem or a broader quorum problem

Decision matrix

Read the first conditions before you dig into logs

Read the first conditions before you dig into logs.
Condition or signalWhat it usually meansWhere to look next
CloudUnsealIdentityReady=FalseThe workload identity or cloud credentials for a cloud KMS backend are not usable.Inspect the identity binding, IAM policy, and KMS reachability.
TLSReady=FalseThe cluster may not trust the configured certificates or may be missing required TLS material.Inspect the rendered TLS Secrets and pod logs for x509 errors.
The cluster unseals but still does not become active.This may no longer be a seal problem.Move to Recover from No Leader.

Diagram

Sealed-cluster triage

Confirm the cluster is actually sealed, identify the configured seal mode, then narrow the failure to credentials, trust, or network before using any emergency manual path.

Inspect the operator-visible state first

Inspect

Read the current conditions and seal mode

bash

kubectl get openbaocluster <name> -n <namespace> \
-o jsonpath='{range .status.conditions[*]}{.type}={.status} {.reason}{"\n"}{end}'
kubectl get openbaocluster <name> -n <namespace> -o yaml | yq '.spec.unseal'
kubectl logs -n <namespace> <pod-name> | grep -i unseal

Focus on OpenBaoSealed, CloudUnsealIdentityReady, and TLSReady. These usually tell you whether the next step is credentials, trust, or network rather than generic application debugging.

Diagnose by seal mode

Use this path when the cluster reads its unseal key from a Kubernetes Secret.

Inspect

Verify the static unseal Secret

bash

kubectl get secret -n <namespace> <cluster-name>-unseal-key
kubectl get secret -n <namespace> <cluster-name>-unseal-key -o jsonpath='{.data}'

The Secret must exist and use the expected key name key.

Apply

Create or replace the static unseal Secret

bash

kubectl create secret generic <cluster-name>-unseal-key -n <namespace> \
--from-literal=key=<UNSEAL_KEY> \
--dry-run=client -o yaml | kubectl apply -f -

Verify the cluster is actually serving again

Verify

Check seal status and cluster readiness

bash

kubectl get openbaocluster <name> -n <namespace>
kubectl exec -n <namespace> -it <pod-name> -- bao status

If the cluster unseals but only reaches standby state or still cannot elect a leader, move to Recover from No Leader.

Continue with the right recovery path

Published release documentation

You are reading docs for version 0.1.0. Use the version menu to switch to next or another archived release.

Was this page helpful?

Use Needs work to open a structured GitHub issue for this page. The Yes button only acknowledges the signal locally.