Виправлення помилок у шаблонах
Відлагодження шаблонів може бути складним, оскільки відрендерений шаблон надсилається на сервер API Kubernetes, який може відхилити файли YAML з причин, не повʼязаних із форматуванням.
Існує кілька команд, які можуть допомогти у відлагодженні.
helm lint— це ваш основний інструмент для перевірки того, чи відповідає ваш чарт найкращим практикамhelm template --debugперевірить рендеринг шаблонів чартів локально.helm install --dry-run --debugтакож візуалізує чарт локально без його встановлення, але також перевірить, чи конфліктують ресурси з іншими, що вже працюють у кластері. Встановлення--dry-run=serverдодатково виконає будь-якийlookupу чарті щодо сервера.helm get manifest: це хороший спосіб перевірити, які шаблони встановлені на сервері.
Коли ваш YAML не проходить перевірку, але ви хочете побачити, що було згенеровано, простий спосіб отримати YAML — закоментувати проблемний розділ у шаблоні, а потім повторно запустити helm install --dry-run --debug:
apiVersion: v2
# деяка: проблемна секція
# {{ .Values.foo | quote }}
Вищезазначене буде відтворено та повернуто з коментарями без змін:
apiVersion: v2
# деяка: проблемна секція
# "bar"
Це забезпечує швидкий спосіб перегляду згенерованого контенту без блокування помилками парсингу YAML.
Відлагодження функції lookup
Функція lookup запитує ресурси Kubernetes під час рендерингу шаблону. Коли lookup повертає порожній результат, буває складно зʼясувати чому. Щоб бачити діагностичні повідомлення, увімкніть режим налагодження:
helm install --debug myrelease ./mychart
З увімкненим журналюванням налагодження Helm записує в журнал apiVersion, kind, namespace та імʼя, коли lookup повертає порожній результат:
- "lookup: resource not found" — Конкретний ресурс не знайдено в кластері (для пошуку одного обʼєкта, як-от
lookup "v1" "ConfigMap" "default" "my-config") - "lookup: resource list not found" — Жоден ресурс не відповів запиту (для пошуку списків, як-от
lookup "v1" "ConfigMap" "default" "")
Часті причини, чому lookup може повертати порожній результат:
- Ресурс не існує в кластері
- Дозволи RBAC перешкоджають доступу до ресурсу
- Запуск
helm templateбез доступу до кластера (використовуйте--dry-run=server, щоб підключитися) - Невірні параметри apiVersion, kind, namespace або name