Skip to main content

Documentation Index

Fetch the complete documentation index at: https://dorguai.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

The ApplicationPersona controller continuously validates each deployment against its persona’s declared constraints. It reconciles on watch events and on a 60-second timer, reporting issues in the persona’s .status.validation field.

Reconciliation flow

The controller matches deployments to personas using the app.kubernetes.io/name label. The label value must match the persona’s spec.name field.

Validation checks

Resource validation

Checks container resource limits and requests against persona constraints.
CheckSeverityCondition
CPU limit exceeds persona limitwarningContainer CPU limit > spec.resources.limits.cpu
Memory limit exceeds persona limitwarningContainer memory limit > spec.resources.limits.memory
No resource requests setwarningContainer has no CPU or memory requests

Replica validation

Checks the deployment replica count against the persona’s scaling parameters.
CheckSeverityCondition
Below minimum replicaserrorDeployment replicas < spec.scaling.minReplicas
Above maximum replicaswarningDeployment replicas > spec.scaling.maxReplicas

Health probe validation

Checks that the deployment configures probes matching the persona’s health specification.
CheckSeverityCondition
Missing liveness probewarningPersona specifies livenessPath but container has no HTTP liveness probe
Liveness path mismatchinfoProbe path differs from persona’s livenessPath
Missing readiness probewarningPersona specifies readinessPath but container has no readiness probe

Security context validation

Checks pod and container security settings against persona policies.
CheckSeverityCondition
runAsNonRoot not enforcederrorPersona requires runAsNonRoot but pod security context does not set it
readOnlyRootFilesystem not setwarningPersona requires read-only root but container does not set it
Privilege escalation allowederrorPersona forbids privilege escalation but container allows it

Severity levels

SeverityMeaningEffect on phase
errorPolicy violation that must be fixedPhase becomes Degraded or Failed
warningBest practice deviationPhase remains Active unless combined with health issues
infoInformational differenceNo effect on phase

Phase determination

The persona phase is derived from validation results and deployment health:
ConditionPhase
Healthy + no validation errorsActive
Validation errors presentDegraded
Unhealthy deploymentFailed
No matching deployment foundPending
Partially healthy or warnings onlyDegraded

Health derivation

The controller derives health from the deployment’s status conditions:
Deployment stateHealth status
Available + all replicas readyHealthy
Available + some replicas readyDegraded
Progressing (rollout in progress)Unknown
Not availableUnhealthy
When health is not Healthy, the controller also queries pod statuses for specific failure reasons:
  • CrashLoopBackOff
  • ImagePullBackOff / ErrImagePull
  • CreateContainerConfigError
  • OOMKilled
  • RunContainerError
These appear in .status.health.podFailures[] with the pod name, container name, reason, and message.

Conditions

The controller sets two standard Kubernetes conditions:
ConditionStatusWhen
ReadyTruePhase is Active
ReadyFalseAny other phase
ValidatedTrueNo validation errors
ValidatedFalseOne or more validation errors

Checking validation status

Use the CLI to inspect validation results:
dorgu persona status my-app -n production
Or query the resource directly:
kubectl get applicationpersona my-app -n production -o jsonpath='{.status.validation}'

Webhook validation

Block non-compliant deployments at admission time

CRD specification

Full ApplicationPersona and ClusterPersona schema