6.3 Kubernetes YAML Manifest Format
Kubernetes YAML Manifest Format defines how applications are structured and deployed in Kubernetes using declarative configurations.
Kubernetes YAML Manifest Format is the specific dialect and set of syntactic conventions of the YAML data serialization language as applied to Kubernetes manifests, covering scalar quoting rules, multi-line string handling, and a number of YAML-specific parsing behaviors and pitfalls that matter disproportionately when authoring manifests, since a subtle YAML ambiguity can silently produce a manifest that means something different from what was intended.
Scalar Value Interpretation
Implicit Typing of Unquoted Values
YAML parsers infer the type of an unquoted scalar from its literal form, meaning true, false, numeric-looking tokens, and certain other reserved words are automatically interpreted as booleans, numbers, or null rather than as strings, which becomes a real hazard when a field expects a string value that happens to look like one of these reserved forms.
The Classic Country-Code Problem
A commonly cited YAML pitfall in Kubernetes manifests involves values like NO, Yes, or on, which older YAML 1.1 parsers interpret as boolean equivalents of false or true rather than as literal strings, a source of real-world configuration bugs that is avoided entirely by explicitly quoting any string value that could be misread as a boolean, number, or null.
When Quoting Is Required
Explicit quoting, using either single or double quotes, is necessary whenever a string value would otherwise be ambiguous, including values starting with special characters such as *, &, !, or %, values that are purely numeric but meant as strings, such as a version string like "1.20", and any value containing a colon followed by a space, which YAML would otherwise interpret as introducing a new mapping.
Multi-Line String Handling
Literal Block Scalars
The pipe character, |, introduces a literal block scalar, preserving line breaks exactly as written, commonly used for embedding shell scripts or configuration file content directly within a ConfigMap's data field where exact formatting, including newlines, must be preserved.
Folded Block Scalars
The greater-than character, >, introduces a folded block scalar, which converts line breaks within the block into spaces, producing a single flowing string, useful for long descriptive text that should read as one continuous line without the source manifest itself needing excessively long unwrapped lines.
Chomping Indicators
Both block scalar styles accept an optional chomping indicator, - to strip any trailing newline entirely or + to keep all trailing newlines, giving fine control over exactly how the final whitespace of a multi-line value is represented, which matters for content like scripts where trailing newline behavior can be significant.
Structural Syntax Details
Flow Versus Block Style
YAML supports both block style, using indentation and newlines to express structure, and flow style, using inline brackets and braces resembling JSON, such as containers: [{name: app, image: myimage}]; Kubernetes manifests conventionally use block style throughout for readability, though flow style remains valid and is occasionally used for very short, simple lists.
Null and Empty Values
An explicitly empty field, or a field with the literal value null or the tilde character ~, is interpreted as YAML null, which is distinct from an omitted field entirely from the API server's perspective in most cases, since a present-but-null field can trigger different validation or defaulting behavior than a field that was never included in the submitted document at all.
Practical Authoring Guidance
Consistent Indentation Discipline
Because YAML has no closing braces or brackets to signal the end of a nested block, indentation errors are among the most common sources of manifest authoring mistakes, making consistent, tool-enforced indentation, typically via an editor configured for YAML, an important practical safeguard.
Linting and Schema Validation Tools
Editor plugins and standalone linters that validate a manifest's YAML syntax and, ideally, cross-check it against the relevant resource's OpenAPI schema before submission catch many structural and semantic errors earlier in the authoring workflow than waiting for the API server's own validation to reject a malformed request.
YAML Version Used by Kubernetes Tooling
YAML 1.1 Behavior in Practice
Most Kubernetes tooling, including kubectl, historically parses manifests according to YAML 1.1 semantics rather than the newer YAML 1.2 specification, which is directly responsible for some of the boolean-like string ambiguities described earlier, since YAML 1.2 narrowed the set of tokens implicitly treated as booleans compared to YAML 1.1.