KYAML для Kubernetes: як зменшити неоднозначність маніфестів без поспішної міграції

KubernetesYAMLконфігурація

Порівняння YAML, KYAML і JSON для одного навчального маніфесту Kubernetes
Новина та зміна

Поняття, потрібні для статті

Їх не потрібно знати наперед. Якщо термін незнайомий — відкрийте пояснення.

Навіщо читати цю новину

Kubernetes підтримує бажаний стан контейнерних застосунків на групі машин. Якщо контейнер, Pod, вузол або кластер поки незнайомі, спочатку прочитайте «Що таке Kubernetes: де він потрібен і коли краще обрати простіше». Тут розглянуто вужчу тему — спосіб запису маніфестів Kubernetes.

У маніфесті команда описує, який об’єкт має існувати та як його налаштувати. Такі файли часто пишуть у YAML. У ньому відступи визначають вкладеність, а парсер може сприйняти значення без лапок як число або логічне значення. Через це файл іноді виглядає правильним для людини, хоча програма читає іншу структуру.

KYAML звужує набір дозволених способів запису й залишається валідним YAML. Він робить структуру та рядкові значення явнішими, але не змінює роботу кластера й не виправляє помилкову конфігурацію.

Виведення kubectl -o kyaml з’явилося як alpha у Kubernetes 1.34 і стало beta у 1.35. Офіційний допис підтверджує beta-етап від версії 1.35. KYAML однаково треба явно вибирати через -o kyaml: він не стає типовим форматом і не зобов’язує команди перетворювати наявні маніфести.

Як програма читає маніфест

Ресурс Kubernetes — це об’єкт, яким керує система. У наскрізному прикладі використано ConfigMap: ресурс для неконфіденційних конфігураційних значень. Його поле data містить пари, значення яких мають бути текстовими рядками.

apiVersion: v1
kind: ConfigMap
metadata:
  name: demo-settings
data:
  FEATURE_ENABLED: "true"
  RETRY_LIMIT: "3"

Поля означають таке:

  • apiVersion: v1 указує версію Kubernetes API, у якій визначено цей тип ресурсу;
  • kind: ConfigMap називає тип ресурсу;
  • metadata.name задає ім’я demo-settings;
  • data містить два конфігураційні значення.

Спочатку YAML-парсер перетворює текст на загальну структуру даних. Потім Kubernetes перевіряє її за схемою ресурсу: чи відомі поля та чи мають значення дозволені типи.

Тип даних визначає, чи є значення рядком, числом, логічним значенням, списком або об’єктом. Лапки показують, що true і 3 тут є рядками. Без лапок парсер може прочитати їх як логічне значення та число. Точна поведінка залежить від версії YAML і конкретного парсера.

Відступи теж несуть зміст. Якщо посунути RETRY_LIMIT ліворуч, ключ може вийти з data й опинитися на іншому рівні. Інший зсув може зробити файл синтаксично неправильним. Лінтер знаходить частину синтаксичних і стильових проблем, але не може сам визначити задум автора.

Той самий об’єкт у KYAML і JSON

KYAML використовує flow style. Межі структур із парами «ключ — значення» позначено {}, а межі списків — []. Рядкові значення беруть у подвійні лапки. Офіційний запис також має початковий маркер документа --- і кінцеві коми.

---
{
  apiVersion: "v1",
  kind: "ConfigMap",
  metadata: {
    name: "demo-settings",
  },
  data: {
    # Ці значення мають залишитися рядками.
    FEATURE_ENABLED: "true",
    RETRY_LIMIT: "3",
  },
}

Це валідний YAML, а не окрема мова. Його може прочитати звичайний YAML-парсер; окремий KYAML-парсер не потрібен.

JSON також використовує явні дужки й лапки, але в ньому треба брати в лапки й ключі. Стандартний JSON не дозволяє коментарі або кінцеві коми.

{
  "apiVersion": "v1",
  "kind": "ConfigMap",
  "metadata": {
    "name": "demo-settings"
  },
  "data": {
    "FEATURE_ENABLED": "true",
    "RETRY_LIMIT": "3"
  }
}

Практична різниця така:

  • YAML зазвичай коротший і підтримує коментарі, але структура залежить від відступів, а типи значень без лапок можуть бути неочевидними.
  • KYAML зберігає коментарі та сумісність із YAML, проте явно позначає структури й рядки. Ціна — довший і менш звичний запис.
  • JSON теж явно позначає структуру та широко підтримується інструментами, але не дозволяє коментарі й кінцеві коми.

Коментар у написаному вручну KYAML не входить до структури даних. Якщо отримати об’єкт із кластера через kubectl get, коментарі з початкового маніфесту не відновляться: Kubernetes API їх не зберігає.

Що відомо про статус KYAML

KYAML розвивається в межах KEP 5295. KEP, або Kubernetes Enhancement Proposal, описує мотивацію, межі й технічний дизайн зміни.

У kubectl 1.34 можливість була alpha й потребувала окремого ввімкнення. У 1.35 вона перейшла в beta та стала ввімкненою за замовчуванням, хоча формат виведення однаково треба вибирати параметром -o kyaml.

Станом на 15 серпня 2026 року офіційний список релізів називає 1.36 останньою випущеною minor-версією, а 1.37 — upcoming. Водночас KEP уже має позначки STABLE, Implemented і Latest v1.37. Вони описують реалізацію та цільовий milestone майбутнього релізу, але не доводять, що 1.37 вже доступна користувачам. Тому стаття називає beta підтвердженим етапом від 1.35, а stable — запланованим станом для 1.37.

Майбутня стабілізація не зробить формат обов’язковим автоматично. Звичайний kubectl get не починає друкувати KYAML, і KEP не вимагає міграції проєктів. Формат треба вибрати явно. Наприклад, на окремому тестовому кластері з відповідною версією клієнта синтаксис має такий вигляд:

kubectl get deployment my-app -o kyaml

Ця команда не є частиною локального уроку нижче: вона звертається до кластера. Для першого знайомства достатньо порівняти синтаксис на одноразовій локальній копії. Перед використанням у репозиторії окремо перевірте фактичні редактори, форматери, лінтери та CI.

KYAML не виправляє неправильну назву поля, неприпустиме значення чи хибну логіку конфігурації. Синтаксично валідний файл може не відповідати схемі Kubernetes. Відповідність схемі також не доводить, що конфігурація реалізує задум автора.

Один локальний експеримент з агентом

Створіть нову одноразову порожню теку й збережіть у ній перший синтетичний приклад як demo-settings.yaml. Не використовуйте робочий репозиторій, справжній маніфест або приватні дані. Для цього кроку не потрібні kubectl, кластер, мережа чи облікові дані.

Запит агенту:

У вказаній мною новій порожній теці є лише синтетичний demo-settings.yaml із
цієї статті. Прочитай тільки його. Не змінюй оригінал. Створи поруч лише
demo-settings.kyaml з тією самою структурою та notes.md із поясненням змін.
Не запускай команд, не читай інші теки, не використовуй мережу, Git, kubectl,
kubeconfig чи секрети. Покажи повний diff. Зупинися, якщо шлях неоднозначний,
тека не порожня, дані не синтетичні або потрібна додаткова програма.

Очікуваний результат: новий файл починається з ---, структури записано у flow style з {}, рядкові значення взято в лапки, а елементи мають кінцеві коми. apiVersion, kind, metadata.name і дві пари в data мають залишитися незмінними.

Незалежна перевірка: не вважайте фразу агента «структури однакові» доказом. Самостійно зіставте всі ключі та значення з оригіналом. Якщо на комп’ютері вже є довірений YAML-парсер, окремо порівняйте нормалізовані структури. Не встановлюйте програму лише заради цього уроку. Якщо дані змінилися, з’явився третій файл або знадобився доступ поза текою, експеримент не пройдено.

Чи варто використовувати KYAML

У навчальному файлі KYAML допомагає побачити межі об’єктів і рядкові значення. У новому репозиторії його можна випробувати на одному маніфесті після перевірки редактора, форматера, лінтера, парсера, версії kubectl і CI.

У наявній кодовій базі спершу з’ясуйте, чи команда справді стикається з помилками відступів або неоднозначними типами. Якщо звичайний YAML уже має узгоджений стиль і надійні перевірки, масове перетворення створить великий diff без гарантованої користі.

Висновок простий: локальний експеримент на копії виправданий, термінова міграція — ні. KYAML робить структуру й рядки помітнішими, але не замінює схеми, тести та перевірку людиною. Рішення слід приймати лише після перевірки фактичних інструментів команди. Якщо сама роль платформи ще неясна, поверніться до базового пояснення Kubernetes, а вже потім оцінюйте формат маніфесту.

Джерела

Практика з ШІ-агентом

Зрозумійте новину про KYAML до будь-якого експерименту

Ця гілка не потребує кластера. Агент пояснює формат і може змінити лише одноразову локальну копію в окремій порожній теці.

Виконано кроків:0 / 0

Я ще не маю навчального Kubernetes-кластераПрацюйте лише з прикладами статті та офіційними джерелами.
1
Зрозуміти

Спочатку зрозумійте Kubernetes і маніфест

Пояснити, яку роль має маніфест і яку вузьку проблему запису розв’язує KYAML.

Очікуваний результат:Два речення своїми словами: що робить Kubernetes і що робить KYAML.
Межі, перевірка й завдання агенту

Спочатку зрозумійте

  • KYAML не замінює Kubernetes і не є окремою системою розгортання.

Безпечний контекст для агента

  • Базова стаття про Kubernetes і перші три абзаци цієї новини.

Дозволено

  • Пояснювати терміни та ставити перевірочні запитання без команд.

Заборонено

  • Просити доступ до репозиторію, кластера, kubeconfig або секретів.

Зупиніться, якщо

  • Ви не можете відрізнити маніфест від фактичного ресурсу в кластері.

Як перевірити

  • Звірте перше речення з базовою статтею, друге — з офіційним дописом KYAML.
Мета: Пояснити, яку роль має маніфест і яку вузьку проблему запису розв’язує KYAML.

Безпечний контекст для агента:
- Базова стаття про Kubernetes і перші три абзаци цієї новини.

Дозволено:
- Пояснювати терміни та ставити перевірочні запитання без команд.

Заборонено:
- Просити доступ до репозиторію, кластера, kubeconfig або секретів.

Зупиніться, якщо:
- Ви не можете відрізнити маніфест від фактичного ресурсу в кластері.

Очікуваний результат: Два речення своїми словами: що робить Kubernetes і що робить KYAML.

Як перевірити:
- Звірте перше речення з базовою статтею, друге — з офіційним дописом KYAML.
2
Оглянути

Порівняйте три записи одного об’єкта

Знайти дужки, лапки, відступи, коментарі та кінцеві коми у YAML, KYAML і JSON.

Очікуваний результат:Перелік відмінностей для одного й того самого `ConfigMap`.
Межі, перевірка й завдання агенту

Спочатку зрозумійте

  • Вигляд тексту і структура даних — пов’язані, але не тотожні речі.

Безпечний контекст для агента

  • Три приклади `ConfigMap` у цій статті.

Дозволено

  • Анотувати лише наведені публічні приклади.

Заборонено

  • Читати реальні маніфести або робити висновки про інструменти, яких не перевіряли.

Зупиніться, якщо

  • Агент стверджує, що KYAML є окремою мовою або що JSON підтримує коментарі.

Як перевірити

  • Самостійно знайдіть кожну зазначену ознаку в блоках коду.
Мета: Знайти дужки, лапки, відступи, коментарі та кінцеві коми у YAML, KYAML і JSON.

Безпечний контекст для агента:
- Три приклади `ConfigMap` у цій статті.

Дозволено:
- Анотувати лише наведені публічні приклади.

Заборонено:
- Читати реальні маніфести або робити висновки про інструменти, яких не перевіряли.

Зупиніться, якщо:
- Агент стверджує, що KYAML є окремою мовою або що JSON підтримує коментарі.

Очікуваний результат: Перелік відмінностей для одного й того самого `ConfigMap`.

Як перевірити:
- Самостійно знайдіть кожну зазначену ознаку в блоках коду.
3
Спланувати

Складіть план перевірки тверджень

Відокремити офіційні факти про версії та формат від редакційної поради.

Очікуваний результат:План перевірки версії, статусу, синтаксису й меж рекомендації.
Межі, перевірка й завдання агенту

Спочатку зрозумійте

  • Запис KEP про stable milestone не доводить випуск версії; дату релізу звіряють окремо.

Безпечний контекст для агента

  • Офіційний блог Kubernetes, KEP 5295 і перелік із попереднього кроку.

Дозволено

  • Скласти перелік «твердження → первинне джерело».

Заборонено

  • Домислювати підтримку редакторів, форматерів або CI.

Зупиніться, якщо

  • Версію або статус неможливо знайти в первинному джерелі.

Як перевірити

  • Кожен факт має пряме офіційне посилання.
Мета: Відокремити офіційні факти про версії та формат від редакційної поради.

Безпечний контекст для агента:
- Офіційний блог Kubernetes, KEP 5295 і перелік із попереднього кроку.

Дозволено:
- Скласти перелік «твердження → первинне джерело».

Заборонено:
- Домислювати підтримку редакторів, форматерів або CI.

Зупиніться, якщо:
- Версію або статус неможливо знайти в первинному джерелі.

Очікуваний результат: План перевірки версії, статусу, синтаксису й меж рекомендації.

Як перевірити:
- Кожен факт має пряме офіційне посилання.
4
Виконати

Перепишіть лише одноразову локальну копію

Побачити різницю між YAML і KYAML без команд, репозиторію чи доступу до кластера.

Очікуваний результат:Локальні `demo-settings.kyaml` і `notes.md` без конфігурації та облікових даних.
Межі, перевірка й завдання агенту

Спочатку зрозумійте

  • Зміна навчальної копії не доводить її придатність для production.

Безпечний контекст для агента

  • Абсолютний шлях до нової порожньої теки та синтетичний `demo-settings.yaml` із цієї статті.

Дозволено

  • Прочитати лише `demo-settings.yaml`, створити поруч `demo-settings.kyaml` і `notes.md`, потім показати повний diff.

Заборонено

  • Змінювати оригінал, запускати команди, читати інші теки, звертатися до мережі, `kubeconfig`, Git або кластера.

Зупиніться, якщо

  • Тека не порожня, шлях неоднозначний, приклад містить реальні дані або потрібне встановлення програми.

Як перевірити

  • Людина звіряє набір ключів і значень з оригіналом; за наявності локального парсера — порівнює нормалізовані структури без установлення пакетів.
Мета: Побачити різницю між YAML і KYAML без команд, репозиторію чи доступу до кластера.

Безпечний контекст для агента:
- Абсолютний шлях до нової порожньої теки та синтетичний `demo-settings.yaml` із цієї статті.

Дозволено:
- Прочитати лише `demo-settings.yaml`, створити поруч `demo-settings.kyaml` і `notes.md`, потім показати повний diff.

Заборонено:
- Змінювати оригінал, запускати команди, читати інші теки, звертатися до мережі, `kubeconfig`, Git або кластера.

Зупиніться, якщо:
- Тека не порожня, шлях неоднозначний, приклад містить реальні дані або потрібне встановлення програми.

Очікуваний результат: Локальні `demo-settings.kyaml` і `notes.md` без конфігурації та облікових даних.

Як перевірити:
- Людина звіряє набір ключів і значень з оригіналом; за наявності локального парсера — порівнює нормалізовані структури без установлення пакетів.
5
Перевірити

Перевірте нотатки незалежно

Вилучити непідтверджені або надто широкі висновки.

Очікуваний результат:Перевірений локальний diff і нотатка без рекомендації масової міграції.
Межі, перевірка й завдання агенту

Спочатку зрозумійте

  • Відповідь агента не є первинним джерелом або доказом еквівалентності.

Безпечний контекст для агента

  • Обидва локальні файли, їхній diff, `notes.md`, офіційний блог і KEP.

Дозволено

  • Перечитати джерела й позначити факт, висновок та невідоме.

Заборонено

  • Перевіряти твердження на робочому кластері.

Зупиніться, якщо

  • Хоча б одне твердження про версію або статус не збігається.

Як перевірити

  • Людина відкрила джерела й знайшла підтвердження самостійно.
Мета: Вилучити непідтверджені або надто широкі висновки.

Безпечний контекст для агента:
- Обидва локальні файли, їхній diff, `notes.md`, офіційний блог і KEP.

Дозволено:
- Перечитати джерела й позначити факт, висновок та невідоме.

Заборонено:
- Перевіряти твердження на робочому кластері.

Зупиніться, якщо:
- Хоча б одне твердження про версію або статус не збігається.

Очікуваний результат: Перевірений локальний diff і нотатка без рекомендації масової міграції.

Як перевірити:
- Людина відкрила джерела й знайшла підтвердження самостійно.
6
Пояснити

Поясніть, кому новина корисна

Сформулювати різницю між навчальним експериментом і рішенням для репозиторію.

Очікуваний результат:Ваш короткий висновок: користь, межа й наступна безпечна перевірка.
Межі, перевірка й завдання агенту

Спочатку зрозумійте

  • Вибір формату залежить від фактичних інструментів команди.

Безпечний контекст для агента

  • Перевірена нотатка й висновок статті.

Дозволено

  • Після вашої відповіді агент може вказати одну суперечність із джерелом.

Заборонено

  • Дозволяти агенту підмінити пояснення або пропонувати міграцію.

Зупиніться, якщо

  • Ви не можете назвати, що KYAML робить явнішим і чого не виправляє.

Як перевірити

  • Інша людина може відтворити логіку висновку за джерелами.
Мета: Сформулювати різницю між навчальним експериментом і рішенням для репозиторію.

Безпечний контекст для агента:
- Перевірена нотатка й висновок статті.

Дозволено:
- Після вашої відповіді агент може вказати одну суперечність із джерелом.

Заборонено:
- Дозволяти агенту підмінити пояснення або пропонувати міграцію.

Зупиніться, якщо:
- Ви не можете назвати, що KYAML робить явнішим і чого не виправляє.

Очікуваний результат: Ваш короткий висновок: користь, межа й наступна безпечна перевірка.

Як перевірити:
- Інша людина може відтворити логіку висновку за джерелами.

Короткий чеклист

  • Перевіряти KYAML лише в новій одноразовій теці на синтетичному файлі без секретів.
  • Зафіксувати версії вже наявних парсера, форматера, редактора й лінтера, якщо вони беруть участь у тесті.
  • Порівняти нормалізовану структуру YAML- і KYAML-варіантів, а не лише їхній вигляд.
  • Не запускати `kubectl`, не читати `kubeconfig` і зупинитися, якщо перевірка потребує кластера або встановлення програм.
  • Не планувати масове перетворення, доки один файл не пройде локальні перевірки, CI та перевірку іншою людиною.