Skip to main content
CRDs (CustomResourceDefinitions) define the API for custom resources, but an operator is the component that acts on those resources. An operator is a controller: it continuously watches custom resources and reconciles the cluster state to match the desired state declared in those resources. For example, you create a Certificate resource and the operator provisions the actual TLS certificate; delete the Certificate and the operator will clean up or re-create associated objects as needed. This lesson walks through how to read operator status and conditions using cert-manager as a concrete example. In both exams and production troubleshooting, you often need to infer what an operator is doing without access to its source code. cert-manager exposes several CRDs that map to TLS lifecycle concepts (Certificate, Issuer, CertificateRequest, Order, Challenge, etc.). The operator watches these resources and reconciles them.

Verify cert-manager CRDs exist

First, confirm that cert-manager’s CRDs are installed:
Example output:

Quick reference: cert-manager CRDs and their roles

Create a test Issuer (self-signed)

To issue a certificate you need two things: an Issuer that defines how the certificate will be issued and a Certificate resource that declares what you want. For quick testing, a self-signed Issuer is convenient. Save this manifest as /root/selfsigned-issuer.yaml:
Apply the Issuer and inspect its status:
Example output from creating and describing the Issuer:
Notice the Status block and the Conditions entry reporting Ready: True. This indicates the operator successfully reconciled the Issuer.

Create a Certificate that uses the Issuer

Next, create a Certificate that references the self-signed Issuer. Save this as /root/test-certificate.yaml:
Apply and check status:
Expected results after applying:
Describing the Certificate reveals status conditions, validity times, renewal time, and related events:
Example excerpt:
The Message and Reason fields provide the operator’s human-readable summary of the resource state. When troubleshooting, these are your primary starting points.

Inspect the Secret created by the operator

cert-manager stores the issued certificate and private key in a Kubernetes Secret named as specified by secretName in the Certificate resource. Check the Secret:
Example output showing a TLS Secret with three keys:
These artifacts were created by cert-manager as a result of reconciling the Certificate resource.

Demonstrate the reconciliation loop

To see reconciliation in action, delete the Secret and watch the operator recreate it:
Example interaction:
Operators continuously watch their owned resources and reconcile until the observed state matches the desired state. Deleting side-effect resources (for example, Secrets or ConfigMaps created by an operator) does not permanently break the system — the operator will typically restore them.
Always start troubleshooting custom resources by inspecting their status.conditions. Use kubectl describe <kind> <name> -n <namespace> (or kubectl get <kind> <name> -n <namespace> -o yaml) to see the operator-reported Status, Reason, human-readable Message, and related events.

Key takeaways (exam & production)

  1. Use kubectl get and kubectl describe on custom resources to read their status and conditions. The operator reports its view through the resource’s status.
  2. Operators continuously reconcile and will restore resources they manage. Deleting dependent resources (e.g., Secrets created by an operator) may result in them being recreated automatically.
  3. If a resource is not in the desired state, status.conditions usually contains a False condition with a Reason and Message that help diagnose what went wrong. Always check events shown by kubectl describe as well.

Watch Video

Practice Lab