Errors
Kubernetes

Kubernetes: Kubernetes: Cannot convert int64 to string. Kubernetes fails to interpret integer value in helmchart values.yaml file

Ты прописал в `values.yaml` аккуратную строку `'10'`, перебрал все мыслимые комбинации кавычек в шаблоне, но деплой всё равно падает с загадочным `cannot conver

Ты прописал в values.yaml аккуратную строку "10", перебрал все мыслимые комбинации кавычек в шаблоне, но деплой всё равно падает с загадочным cannot convert int64 to string. И кажется, что Kubernetes специально издевается.

Всё дело в том, как Helm обрабатывает типы данных. Даже если в values.yaml значение в кавычках, при рендеринге шаблона Helm может привести его к “нативному” типу — integer. А потом Kubernetes, видя в манифесте число без кавычек, пытается загнать его в строковую переменную окружения и ломается.

Решение — явно сказать Helm, что результат подстановки должен быть строкой. Есть два рабочих способа.

Первый — обернуть всю подстановку в двойные кавычки прямо в deployment.yaml:

- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
  value: "{{ .Values.spring_datasource_hikari_maximum_pool_size }}"

Второй — использовать вспомогательную функцию quote:

- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
  value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}

Оба метода заставляют итоговый YAML содержать строковое значение: value: "10". Без этих манипуляций в манифесте окажется value: 10, что и есть корень проблемы.

Если бы это был не продакшен, можно было проверить рендеринг шаблона без деплоя:

helm template . --debug

Эта команда покажет итоговые манифесты и сразу выявит проблему с типами. Всегда держи её наготове.

Итог: Helm — не телепат. Когда ему передаёшь значение, похожее на число, он и делает из него число. Всегда явно указывай нужный тип на этапе рендеринга шаблона, особенно для переменных окружения, которые по своей природе всегда строки.