Helm сбрасывает ресурсы в заведомо исправное состояние

Helm сбрасывает ресурсы в заведомо исправное состояние

Мы начинаем управлять ресурсами Kubernetes с помощью Helm, и у нас есть некоторые пользователи, которые привыкли управлять ресурсами с помощью kubectl edit. Мы хотели бы, чтобы Helm очищал развернутые ресурсы каждый раз при запуске, возвращая их в заведомо исправное состояние.

Я заметил, что это helm upgradeне перезаписывает мои ConfigMaps. Вместо этого он объединяет атрибуты между развернутым ConfigMap и шаблоном Helm, давая мне части моего шаблонного ConfigMap и части отредактированного вручную. Если в шаблоне Helm ConfigMap не было изменений, Helm делаетнетсбросить любую часть моего развернутого ConfigMap обратно в заведомо исправное состояние.

Как мне указать Helm всегда сбрасывать все мои ресурсы Kubernetes до версий, созданных в шаблоне Helm?

решение1

Это не является целью разработки Helm и продолжает ею не быть. Helm не имеет права манипулировать объектами, которые не были созданы Helm, или игнорировать внеполосные изменения объектов, находящихся под его «управлением» — это функция, которая делает Helm совместимым с другими системами, которые могут изменять манифесты, и делает Helm безопасным для использования. Помните, что это система рендеринга YAML, а не система управления конфигурацией, как Puppet или SaltStack. Она не «навязывает» конфигурации.

Если вы хотите добиться описанного вами поведения, вы можете удалить соответствующие объекты перед их повторным созданием с помощью Helm. Вы можете потенциально использовать пространства имен Kubernetes, чтобы надежно добиться этого, предоставив каждому чарту собственное пространство имен и удалив пространство имен перед установкой чарта в качестве формы «жесткого сброса».

Или запретите этим пользователям, которые привыкли редактировать манифесты, kubectlделать это, и вместо этого направьте их на внесение этих изменений в диаграммы или значения. Кажется неразумным отменять их изменения, если их нужно было внести — именно поэтому Helm изначально выполняет трехсторонние операции слияния манифестов. Я понимаю желание сохранить конфигурацию в одной точке оркестровки, но не ожидайте, что вы достигнете этого, не используя одну точку оркестровки.

Эта проблема постоянно возникает при применении более высокоуровневых методов оркестровки к командам, которые привыкли к низкоуровневым методам оркестровки, и никоим образом концептуально не ограничена Helm. Helm хорошо справляется с ситуацией изящно, выполняя операции слияния, но приводит к функционирующему беспорядку методологий оркестровки (по крайней мере, он ничего не ломает и просто не дает сбой). Начните с того, чтобы не создавать беспорядок или ограничить беспорядок черновой средой и перенести его в диаграммы Helm для производства.

Связанный контент