#kubernetes #kubernetes-helm
Вопрос:
Возможно, я просто очень медленный, но я не могу понять это.
- Существуют репозитории / концентраторы (artifacthub и т. Д.) С указателями на другие репозитории, в которых есть диаграммы helm
- Я могу добавить эти диаграммы в качестве «зависимости» в свою диаграмму helm.файл yaml, если я знаю имя / версию / репозиторий
- Например, для https://artifacthub.io/packages/helm/vultr/cert-manager-webhook-vultr версия = 1.0.0, зависимость = vultr/cert-manager-webhook-vultr и репозиторий = https://vultr.github.io/helm-charts (это правильно? Почему эти 3 значения не видны. Это всегда похоже на игру в угадайку при попытке свернуть диаграммы)
- На artifacthub есть раздел «шаблоны», в котором есть различные файлы yaml. Это то, какие свойства можно изменить на диаграмме? Как эти yaml шаблона helm, которые я определяю, применяются к установленным мной диаграммам? (Например, если у меня есть оба входа nginx и traefik, получат ли они оба все yaml для kind: Ingress, примененные к ним?)
- Почему helm требует, чтобы я перенес кластер в мое локальное хранилище, чтобы использовать его? Используют ли люди helm для отслеживания релизов в «реальном мире»?
- В каком сценарии я бы просто сделал «helm install X», а не добавлял его в свою диаграмму.зависимости yaml?
Документы helm (и множество руководств) очень кратки и содержат только один пример сценария. Разве я не должен хотеть, чтобы вся моя «инфраструктура как код»? Я не понимаю постоянных предложений «helm add repo» и «helm install», а затем махать рукой над любыми настройками?
Ответ №1:
Я думаю, что самая интересная часть этого вопроса — это последний пункт, касающийся того, что делать helm install
; остальное — детали.
Я могу представить четыре разных «вида» диаграмм руля:
- Диаграммы библиотеки содержат только
{{- define -}}
блоки шаблонов, но не ресурсы Kubernetes. Это первоклассная концепция в Helm 3, но довольно редкая в дикой природе. - Диаграммы «Инфраструктуры» содержат предварительно упакованную часть программного обеспечения, например PostgreSQL или Redis, которые вы, вероятно, не используете напрямую. Они могут зависеть от библиотечных диаграмм.
- Диаграммы «Приложения» содержат, скажем, один микросервис, который вы используете напрямую. Они, вероятно, зависят от диаграмм инфраструктуры, например, для получения локальной базы данных.
- «Зонтичные» диаграммы зависят от конкретных версий нескольких приложений и описывают объединенную систему.
Итак, если у вас есть система, состоящая из нескольких сервисов, и вы хотите отслеживать их релизы, у вас есть несколько вариантов. Один из них заключается в создании зонтичной диаграммы и helm upgrade
этой диаграммы по мере поступления новых сборок компонентов; у этого есть механическая проблема, связанная с тем, что Helm любит комбинировать зависимости, поэтому все зависимости «сервис-локальной» базы данных будут объединены в одну. Вы можете helm install
создавать диаграммы приложений по отдельности или использовать такой инструмент, как Helmfile или Helmsman, для управления набором смежных установленных диаграмм.
Однако в рамках этой иерархии вы обычно устанавливаете диаграммы «зонтика» или «приложения», но не устанавливаете диаграммы «инфраструктуры» или библиотеки напрямую. За исключением ранних экспериментов, которые вы обычно не helm install bitnami/redis
делали, а вместо этого включали его как зависимость от вашего фактического приложения.
Вы в основном правы в механике использования диаграмм зависимостей. Каждая диаграмма включает в себя templates
каталог, и шаблонные файлы YAML там установлены в кластере. Каждая диаграмма также включает values.yaml
файл на своем верхнем уровне, и это единственный способ настроить диаграмму зависимостей. Родительская диаграмма может включать конфигурацию для своих зависимостей под ключом с именем зависимости
# application/values.yaml
# Chart.yaml depends on a specific chart named "infrastructure"
infrastructure:
# This would be a top-level key in values.yaml in
# the "infrastructure" chart
username: foo
Вы не можете изменить фактическое содержимое шаблона из диаграмм зависимостей; вы можете настроить только то, что создается путем установки значений. Некоторые диаграммы имеют лучше документированные значения, чем другие, а у лучших есть все детали в их README.md
файле.
Вы спрашиваете о нескольких вариантах реализации, и на них трудно дать конкретные ответы. Вам нужно загрузить зависимости в локальный charts
подкаталог (например, with helm dep up
), но я не уверен, почему; Я могу представить варианты использования в автономном режиме, когда вы переносите диаграмму и ее зависимости в изолированную сеть и запускаете там установку, но я также могу представить, что Helm предпочитает charts
каталог и автоматическая загрузка. Аналогично, поиск диаграмм на самом деле может быть сложным, но одна из причин этого заключается в том, что поддержание хранилища пакетов является как финансово, так и операционно сложным. Раньше существовало официальное «стабильное» хранилище графиков, но оно было прекращено.
И последнее, что я здесь затрону, — это понятие «кластерная инфраструктура». Вы можете представить, что хотите запустить, например, контроллер входа или агент ведения журнала, который может быть упакован в виде диаграммы управления. В моей первоначальной иерархии я бы рассматривал их как «приложения»; служебная диаграмма может иметь type: Ingress
ресурс, но сама по себе не будет зависеть от входных контроллеров Nginx или Traefik. Вы можете настроить Helmfile для кластерной инфраструктуры параллельно с настройкой основного приложения или управлять ими вместе, если вы уверены, что используете только одну копию своей системы в кластере.