Helm: условное развертывание зависимой диаграммы, установка только в том случае, если она не была установлена ранее
При установке управляющей диаграммы условие для зависимости работает так же, как и следующий файл Chart.yaml. Но это не позволяет применить условие на основе существующего ресурса Kubernetes.
# Chart.yaml
apiVersion: v1
name: my-chart
version: 0.3.1
appVersion: 0.4.5
description: A helm chart with dependency
dependencies:
- name: metrics-server
version: 2.5.0
repository: https://artifacts.myserver.com/v1/helm
condition: metrics-server.enabled
Я выполнил локальную установку диаграммы (my-chart) в пространстве имен (по умолчанию), затем я пытаюсь установить ту же диаграмму в другом пространстве имен (pb). Я получаю следующую ошибку, в которой говорится, что ресурс уже существует. Этот ресурс, "система: сервер-агрегат-считыватель метрик", был установлен на уровне кластера в качестве предыдущей зависимости (сервер-метрик). Ниже приведен шаг для воспроизведения.
user@hostname$helm install my-chart -n default --set metrics-server.enabled=true ./my-chart
NAME: my-chart
LAST DEPLOYED: Wed Nov 25 16:22:52 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
My Cluster
user@hostname$helm install my-chart -n pb --set metrics-server.enabled=true ./my-chart
Error: rendered manifests contain a resource that already exists. Unable to continue with install: ClusterRole "system:metrics-server-aggregated-reader" in namespace "" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-namespace" must equal "pb": current value is "default"
Существует способ изменить шаблон внутри диаграммы сервера метрик, чтобы условно сгенерировать файлы манифеста, как описано в разделе "Условные шаблоны Helm". Для этого мне нужно изменить и поддерживать диаграмму сервера метрик во внутреннем артефакте, который ограничит меня использованием самых последних диаграмм. Я ищу подход для запроса существующего ресурса Kubernetes, "system:metrics-server-aggregated-reader", и устанавливаю только диаграмму зависимостей, если такой ресурс не существует.