Kubernetes Manifest Validator & Kubeval Linter

Audit your Kubernetes resource configurations (Deployments, Pods, Services, Ingresses) client-side against schema requirements to catch configuration errors before running kubectl apply.

How to Validate Kubernetes YAML Manifests Online

1

Paste Manifest YAML

Paste or upload your Kubernetes deployment YAML configuration. Supports multiple documents separated by standard --- bounds.

2

Real-Time Lint Diagnostics

Manifest specifications, metadata keys, and resource types parse and validate automatically as you type or paste.

3

Audit Highlighted Errors

Inspect flagged configuration errors (e.g. missing metadata, invalid replicas, target selector mismatches) with actionable warnings.

Tool Options

Multi-Document Isolation

Splits YAML configurations by standard document markers and reports validation status for each resource object separately.

Kubectl Schema Checkers

Audits mandatory parameters for Kubernetes core API resources: Service, Pod, Ingress, and Deployment namespaces.

Privacy First Verification

Your cluster deployment topologies are validated inside browser space, keeping sensitive keys and namespace names secure.

Your Data Privacy

Web Tool
Privacy-First Architecture
Most of our web tools process your data entirely in-browser. Where server processing is technically required, payloads are evaluated statelessly in-memory and are never stored, saved, or logged.
REST API
Stateless In-Memory Processing
When you use our API endpoints, your requests are processed strictly in-memory without persistent database storage, disk logging, or data retention.
Want to learn more about how we safeguard your information and infrastructure?
Read our full Privacy Policy for detailed security standards, data retention principles, and compliance guarantees.

What does the Kubernetes Manifest Validator & Kubeval Linter do?

The Kubernetes Manifest Validator & Kubeval Linter parses and audits Kubernetes resource manifests (Deployments, Pods, Services, Ingresses, ConfigMaps) against standard Kubernetes OpenAPI schema constraints. It splits multi-document YAML manifests separated by --- and checks mandatory fields, metadata names, replica types, container image specifications, and selector match labels.

Core Concepts

Understanding Kubernetes manifest schema validation rules:

  • Mandatory Root Keys: Every valid Kubernetes manifest must define apiVersion, kind, and metadata.name.
  • Resource Kind Verification:
    • Pods: Verifies spec.containers contains valid image references and container names.
    • Deployments: Validates spec.replicas integers, spec.selector.matchLabels, and spec.template.spec.containers.
    • Services: Validates spec.ports array with required port integers and protocol configurations.
  • Multi-Document Support: Automatically segments and validates multiple resource documents declared within a single YAML file.

How to use the tool?

  1. Paste Manifest YAML: Enter, upload, or paste your Kubernetes YAML configuration (single or multi-document) into the editor or click Sample.
  2. Real-Time Validation: Manifests parse and audit automatically as you type or paste.
  3. Inspect Diagnostics: Review real-time resource validation cards highlighting compliant specs or missing mandatory fields.

Related Developer Utilities

If you work with Kubernetes manifests, container orchestration, and YAML configurations, explore these complementary tools:

REST API Integration

blueutils.com provides a free REST API endpoint (POST https://blueutils.com/api/yaml/kubernetes-manifest-validator) to programmatically audit your Kubernetes deployment manifest configurations against standard resource schemas.

API Request Parameters

Name Type Description Example
rawText String / Object / Array Multi-document Kubernetes resource configuration YAML string or native parsed object/array (aliases: rawYaml, yaml, data, payload, input, manifest). "apiVersion: v1\nkind: Pod\n..."

API Request Payload Examples

cURL

curl -X POST https://blueutils.com/api/yaml/kubernetes-manifest-validator \
  -H "Content-Type: application/json" \
  -d '{
    "rawText": "apiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx\nspec:\n  containers:\n  - name: nginx\n    image: nginx:1.14.2"
  }'

Python

import requests

url = "https://blueutils.com/api/yaml/kubernetes-manifest-validator"
payload = {
    "rawText": "apiVersion: v1\nkind: Pod\nmetadata:\n  name: nginx\nspec:\n  containers:\n  - name: nginx\n    image: nginx:1.14.2"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.json())

Java

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws Exception {
        String jsonPayload = """
            {
                "rawText": "apiVersion: v1\\nkind: Pod\\nmetadata:\\n  name: nginx\\nspec:\\n  containers:\\n  - name: nginx\\n    image: nginx:1.14.2"
            }
            """;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://blueutils.com/api/yaml/kubernetes-manifest-validator"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
            .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

API Response Parameters

Name Type Description Example
isValid Boolean Indicates whether all parsed documents comply with schemas. true
documentsCount Number Count of successfully parsed resource document blocks. 1
results Array Summary validation results for each parsed resource document. [{"documentIndex":1,"kind":"Pod"}]

API Response Payload Examples

Success Response (HTTP 200 OK)

{
  "isValid": true,
  "documentsCount": 1,
  "results": [
    {
      "documentIndex": 1,
      "apiVersion": "v1",
      "kind": "Pod",
      "name": "nginx",
      "isValid": true,
      "errors": []
    }
  ]
}

Validation Failure Response (HTTP 400 Bad Request)

{
  "isValid": false,
  "documentsCount": 1,
  "results": [
    {
      "documentIndex": 1,
      "apiVersion": "v1",
      "kind": "Pod",
      "name": "nginx",
      "isValid": false,
      "errors": [
        "Container at index 0 is missing its \"image\" reference."
      ]
    }
  ]
}

Rate Limit Exceeded Response (HTTP 429 Too Many Requests)

{
  "error": "API rate limit exceeded. Please wait or contact support@blueutils.com."
}

Why use an API to validate Kubernetes manifests?

Incorporating this validation check during pre-commit hooks, CI/CD runners, or deployment pipelines provides critical advantages:

  • Rapid Script Validation: Catches missing container images or broken selector labels before applying configurations to production Kubernetes clusters.
  • Optimized Token Efficiency for AI Agents: LLMs frequently emit incomplete Kubernetes specs. Calling the validator flags structural schema gaps deterministically with minimal token usage.
  • Deterministic Accuracy Without Hallucinations: Ensures 100% schema compliance against core Kubernetes resource specifications without cluster dependencies.

Native Usage

How to validate Kubernetes manifests locally in terminal environments or scripts:

Windows (CMD / PowerShell)

# Validate manifest syntax using kubectl dry-run in PowerShell
kubectl apply --dry-run=client -f .\deployment.yaml

Linux / Unix (Bash)

# Validate local file specifications using kubeval or kubeconform in Linux
kubeval deployment.yaml

Python

Using Python yaml:

import yaml

with open('deployment.yaml', 'r') as f:
    docs = list(yaml.safe_load_all(f))

for i, doc in enumerate(docs):
    assert 'apiVersion' in doc and 'kind' in doc and 'metadata' in doc, f"Doc {i+1} missing root fields"
    print(f"Doc {i+1} ({doc['kind']}: {doc['metadata'].get('name')}) is syntactically valid.")

Java

Using Java and SnakeYAML:

import org.yaml.snakeyaml.Yaml;
import java.io.FileInputStream;
import java.util.Map;

public class K8sValidatorExample {
    public static void main(String[] args) throws Exception {
        Yaml yaml = new Yaml();
        try (FileInputStream in = new FileInputStream("deployment.yaml")) {
            for (Object data : yaml.loadAll(in)) {
                Map<?, ?> doc = (Map<?, ?>) data;
                if (doc.containsKey("apiVersion") && doc.containsKey("kind")) {
                    System.out.println("Valid K8s Resource: " + doc.get("kind"));
                }
            }
        }
    }
}

Frequently Asked Questions (FAQ)

What does the Kubernetes Manifest Validator do?

It parses your configuration YAML, isolates separate document blocks (separated by ---), and audits each resource spec against standard API schema regulations.

How does the validator handle multi-document YAML manifests?

It automatically splits multi-document YAML files by standard --- delimiters and validates each Kubernetes resource block independently with distinct error cards.

What errors are commonly caught in Kubernetes Deployment templates?

Common issues caught include missing spec.selector.matchLabels, non-integer replicas values, missing template metadata labels, and missing container image definitions.

Which API resources are verified?

The linter contains offline validation rules for Deployments (replicas, selectors, templates), Services (ports structures), Pods (containers specs), and Ingress API namespaces.

Does this online tool send manifest topologies to remote servers?

No. The validator executes entirely inside your client browser memory, ensuring your cluster names, namespaces, and credentials remain private.

Rate Limits

UI Limits
100 uses per 15 minutes
Max payload size: 5 MB
API Limits
5 requests per 60 minutes
Max payload size: 256 KB
Need higher API rate limits, increased payload sizes, or custom developer solutions?
Contact our engineering team at support@blueutils.com for custom rate limit increases, higher quota allocations, or tailored enterprise integrations.