> ## Content Index
> Fetch the complete content index at: https://www.sredevops.org/llms.txt
> Use this file to discover other available public pages before exploring further.

# KYAML: Convergencia entre la robustez de JSON y la flexibilidad de YAML en Kubernetes
- URL: https://www.sredevops.org/es/kyaml-convergencia-entre-la-robustez-de-json-y-la-flexibilidad-de-yaml-en-kubernetes/
- Published: 2026-02-02T22:03:48.000Z
- Updated: 2026-02-02T22:03:48.000Z
- Author: Manuel Morejon
- Tags: Kubernetes, DevOps, Automatización, Cloud Native, #es, Español

En la gestión operativa de Kubernetes, la definición de manifiestos ha oscilado históricamente entre dos extremos. Por un lado, **YAML**, el estándar de facto, ofrece legibilidad humana pero es intrínsecamente frágil debido a su dependencia de la indentación y la ambigüedad en el tipado de datos. Por otro lado, **JSON**, preferido por las máquinas por su estructura estricta, carece de soporte para comentarios y obliga a la definición monolítica de objetos, lo que dificulta su mantenimiento en entornos complejos gestionados por herramientas como Helm o Kustomize.

Con la llegada de **Kubernetes 1.35**, se consolida una solución que unifica las mejores características de ambos formatos: **KYAML**.

## ¿Qué es KYAML?

KYAML no es un nuevo lenguaje, sino la adopción estandarizada del **estilo de flujo (flow style)** de YAML. Su sintaxis se caracteriza por el uso explícito de delimitadores:

- **Objetos:** Encapsulados en llaves `{}`.
- **Arrays:** Definidos mediante corchetes `[]`.
- **Tipado:** Exige que todos los valores de tipo *string* estén delimitados por comillas dobles (`""`).

Esta aproximación elimina la ambigüedad del parseo sin sacrificar la ergonomía del desarrollador.

## Beneficios Técnicos y Operativos

La adopción de KYAML impacta directamente en la estabilidad de los pipelines de CI/CD y en la experiencia de desarrollo (DevEx):

1. **Integridad Estructural:** Al utilizar bloques delimitados (`{}` y `[]`), el manifiesto se vuelve inmune a los errores de indentación. La estructura lógica prevalece sobre la visual, eliminando los fallos críticos provocados por espacios en blanco errantes durante operaciones de *copy-paste*.
2. **Capacidad de Documentación:** A diferencia de JSON, KYAML conserva la capacidad de YAML para incluir comentarios (`#`). Esto es vital para documentar decisiones de infraestructura (ej. *requests/limits*, *magic numbers*) directamente en el código.
3. **Seguridad de Tipos:** La obligatoriedad de comillas para los strings mitiga errores de coerción de tipos implícita (como el conocido caso del código de país “NO” interpretado como booleano `false` en YAML 1.1).

## Estado de Madurez y Adopción

La transición a KYAML está diseñada para ser transparente y de baja fricción:

- **Retrocompatibilidad:** `kubectl` procesa KYAML nativamente, ya que cumple con la especificación YAML existente.
- **Sin cambios en la extensión:** Los ficheros mantienen la extensión `.yaml`, facilitando la integración con herramientas de linting y validación actuales.
- **Soporte Nativo en v1.35:** Kubernetes 1.35 introduce soporte explícito en el CLI. Ahora es posible serializar objetos existentes al nuevo formato mediante `kubectl ... -o kyaml`.
- **Soporte en IDEs:** Editores modernos como VSCode o Cursor interpretan la sintaxis correctamente, aunque la diferenciación visual (coloreado de sintaxis) entre claves y valores aún tiene margen de mejora en el ecosistema de extensiones.

## Implementación Práctica: YAML vs. KYAML

A continuación, se contrasta la definición de un objeto `Deployment` en ambos formatos. Estos ejemplos están disponibles en el repositorio de referencia [erase-una-vez-k8s/encodings](https://github.com/mmorejon/erase-una-vez-k8s/tree/main/encodings?ref=sredevops.org).

### Formato Clásico (Block Style)

Dependiente de la indentación y verticalidad:

```yaml
# fragmento de manifiesto en formato YAML (Block Style)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: erase-una-vez-2-prod
  labels:
    app: erase-una-vez-2
    env: prod
    tier: frontend
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 25%
  selector:
    matchLabels:
      app: erase-una-vez-2
  template:
    metadata:
      labels:
        app: erase-una-vez-2
    spec:
      containers:
      - name: server
        image: ghcr.io/mmorejon/erase-una-vez-2:v0.5.0

        ports:
        - containerPort: 8000
          name: http

        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 500m
            memory: 256Mi

```

## Formato KYAML (Flow Style)

Estructurado, compacto y con tipado explícito:

```yaml
# fragmento de manifiesto en formato KYAML (Flow Style)
apiVersion: "apps/v1"
kind: "Deployment"
metadata: {
  name: "erase-una-vez-2-prod",
  labels: { app: "erase-una-vez-2", env: "prod", tier: "frontend" }
}
spec: {
  replicas: 3,
  strategy: {
    type: "RollingUpdate",
    rollingUpdate: { maxUnavailable: 1, maxSurge: "25%" }
  },
  selector: {
    matchLabels: { app: "erase-una-vez-2" }
  },
  template: {
    metadata: {
      labels: { app: "erase-una-vez-2" }
    },
    spec: {
      containers: [
        {
          name: "server",
          image: "ghcr.io/mmorejon/erase-una-vez-2:v0.5.0",

          ports: [{ containerPort: 8000, name: "http" }],
          resources: {
            requests: { cpu: "100m", memory: "128Mi" },
            limits:   { cpu: "500m", memory: "256Mi" }
          }
        }
      ]
    }
  }
}

```

## KYAML en la práctica

Primero necesitas un clúster con la versión 1.35\. Puedes utilizar el repositorio [erase-una-vez-k8s](https://github.com/mmorejon/erase-una-vez-k8s?ref=sredevops.org) para levantar un clúster local compatible en cuestión de segundos (aproximadamente 40 segundos).

```bash
git clone https://github.com/mmorejon/erase-una-vez-k8s.git

cd erase-una-vez-k8s

./bash/cluster.sh create

```

Garantiza el estés utilizando la versión 1.35 de `kubectl`:

```bash
kubectl version --client

Client Version: v1.35.0
Kustomize Version: v5.7.1

```

Una vez tengas el clúster, envía el manifiesto en formato KYAML a tu clúster:

```bash
kubectl apply --filename https://raw.githubusercontent.com/mmorejon/erase-una-vez-k8s/refs/heads/main/encodings/kyaml/deployment.yaml

deployment.apps/erase-una-vez-2-prod created

```

Verifica que el deployment se ha creado correctamente:

```bash
kubectl get deployment erase-una-vez-2-prod

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
erase-una-vez-2-prod   3/3     3            3           33s

```

Aprovecha esta oportunidad para exportar el manifiesto en formato KYAML:

```bash
kubectl get deployment erase-una-vez-2-prod -o kyaml

```

KYAML representa el siguiente paso lógico en la madurez de la configuración de Kubernetes: la precisión que exigen las máquinas con la flexibilidad que necesitan los humanos.

[KYAML: Convergencia entre la robustez de JSON y la flexibilidad de YAML en KubernetesDescubre cómo KYAML elimina los errores de indentación de YAML y permite comentarios que JSON no soporta, mejorando la experiencia de desarrollo DevOps![](https://www.sredevops.org/content/images/icon/favicon-32x32-2.png)mmorejon![](https://www.sredevops.org/content/images/thumbnail/thumbnail-1.webp)](https://mmorejon.io/blog/kyaml-convergencia-entre-json-y-yaml/?ref=sredevops.org)