# Helm

# Helm

Один из самых популярных пакетных менеджеров для Kubernetes.

**Управление helm**

**Установка helm:**

```
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
```

**Репозиторий**

<div id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF"><table border="1" style="width: 101.548%;"><thead><tr><td class="align-center" style="width: 20.8582%;">Команда</td><td class="align-center" style="width: 21.6994%;">Доп. пар.</td><td class="align-center" style="width: 57.4424%;">Описание</td></tr></thead><tbody><tr><td style="width: 20.8582%;">helm repo</td><td style="width: 21.6994%;">list</td><td style="width: 57.4424%;">Список репозиториев</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 21.6994%;">add repo\_name repo\_url</td><td style="width: 57.4424%;">Добавить репозиторий repo\_name с адресом repo\_url

```
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
```

Часто используют bitnami, но в России он сейчас закрыт. Есть зеркало:

```
helm repo add bitnami https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
```

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 21.6994%;">update</td><td style="width: 57.4424%;">обновить репозиторий

</td></tr><tr><td style="width: 20.8582%;">helm search   
</td><td style="width: 21.6994%;">repo keyword</td><td style="width: 57.4424%;">Поиск чартов по репозиториям ключевого слова keyword

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 21.6994%;">hub keyword</td><td style="width: 57.4424%;">В официальном репозитории

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 21.6994%;">--max-col-width=0</td><td style="width: 57.4424%;">\+ hub/repo полный вывод текста

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 21.6994%;">--output yaml</td><td style="width: 57.4424%;">+hub/repo вывод в yaml

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 21.6994%;">--versions</td><td style="width: 57.4424%;">Отсортировать по версиям чарта

</td></tr></tbody></table>

</div>**Плагины**

Он сам по себе мощный, но [ссылка на плагины](https://helm.sh/docs/community/related/)

<table border="1" id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF-1" style="width: 101.548%;"><thead><tr><td class="align-center" style="width: 20.8582%;">Команда</td><td class="align-center" style="width: 18.5973%;">Доп. пар.</td><td class="align-center" style="width: 60.5446%;">Описание</td></tr></thead><tbody><tr><td style="width: 20.8582%;">helm plugin install url</td><td style="width: 18.5973%;"> </td><td style="width: 60.5446%;">Установка плагина</td></tr><tr><td style="width: 20.8582%;">helm plugin list</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">Список плагинов</td></tr><tr><td style="width: 20.8582%;">helm plugin update pl\_name</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">Обновление плагина</td></tr><tr><td style="width: 20.8582%;">helm plugin unistall pl\_name  
</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">Удаление плагина</td></tr></tbody></table>

**Переменные окружения**

Зависит от переменных окружения. Основные переменные:

<table border="1" id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF-2" style="width: 100%;"><thead><tr><td class="align-center" style="width: 25.6257%;">Переменная</td><td class="align-center" style="width: 74.3743%;">Описание</td></tr></thead><tbody><tr><td style="width: 25.6257%;">XDG\_CACHE\_HOME</td><td style="width: 74.3743%;">Размещение кешированных данных. По умолчанию ~/.cache/helm</td></tr><tr><td style="width: 25.6257%;">XDG\_CONFIG\_HOME</td><td style="width: 74.3743%;">Размещение конфигурационного файла По умолчанию ~/.config/helm</td></tr><tr><td style="width: 25.6257%;">XDG\_DATA\_HOME</td><td style="width: 74.3743%;">Размещение плагинов helm По умолчанию ~/.local/share/helm</td></tr><tr><td style="width: 25.6257%;">HELM\_DRIVER</td><td style="width: 74.3743%;">Драйвер для хранения данных. Secret - хранение авторизационных данных в файле, может быть configmap и memory</td></tr><tr><td style="width: 25.6257%;">HELM\_NO\_PLUGINS</td><td style="width: 74.3743%;">Отключить плагины</td></tr><tr><td style="width: 25.6257%;">KUBECONFIG</td><td style="width: 74.3743%;">Размещение конфигурационного файла kubectl</td></tr></tbody></table>

**Charts**

<table border="1" id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF-3" style="width: 101.548%;"><thead><tr><td class="align-center" style="width: 20.8582%;">Команда</td><td class="align-center" style="width: 18.5973%;">Доп. пар.</td><td class="align-center" style="width: 60.5446%;">Описание</td></tr></thead><tbody><tr><td style="width: 20.8582%;">helm install</td><td style="width: 18.5973%;">name\_chart repo</td><td style="width: 60.5446%;">Установить из репозитория repo чарт name\_chart</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 18.5973%;">--...</td><td style="width: 60.5446%;">Переменные внутри чарта ```
helm install kubeapps --namespace kubeapps bitnami/kubeapps
```

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 18.5973%;">--debug --dry-run pr\_name path\_to\_ch</td><td style="width: 60.5446%;">протестировать без установки чарта</td></tr><tr><td style="width: 20.8582%;">helm inspect values   
</td><td style="width: 18.5973%;">name\_chart &gt; ...</td><td style="width: 60.5446%;">Сохранение чарта в файл

```
helm inspect values stable/kube-ops-view > kube-ops-view.yaml
```

</td></tr><tr><td style="width: 20.8582%;">helm lint --strict path-to-chart</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">Проверить соответствие values схеме

</td></tr><tr><td style="width: 20.8582%;">helm fetch name\_chart</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">Скачать чарт в tar

</td></tr><tr><td style="width: 20.8582%;">  
</td><td style="width: 18.5973%;">--untar</td><td style="width: 60.5446%;">И распаковать

```
helm fetch bitnami/wordpress --untar
```

</td></tr><tr><td style="width: 20.8582%;">helm ls   
</td><td style="width: 18.5973%;">--namespace namespace</td><td style="width: 60.5446%;">список установленных чартов

</td></tr><tr><td style="width: 20.8582%;">helm upgrade</td><td style="width: 18.5973%;">...</td><td style="width: 60.5446%;">Обновление

</td></tr><tr><td style="width: 20.8582%;">helm rollback ch\_name count</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">Откатить чарт ch\_name на count назад

```
helm rollback redis 1 --namespace=redis
```

</td></tr><tr><td style="width: 20.8582%;">helm uninstall name\_ch</td><td style="width: 18.5973%;">  
</td><td style="width: 60.5446%;">```
helm uninstall kubeapps --namespace kubeapps
```

</td></tr></tbody></table>

**Общая структура чарта**

Helm автоматически определяет последовательность применения шаблонов в чарте.

<table border="1" id="bkmrk-%D0%94%D0%B8%D1%80%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%B8%D1%8F%2F%D1%84%D0%B0%D0%B9%D0%BB-%D0%9E%D0%BF%D0%B8%D1%81" style="width: 101.548%; height: 357.563px;"><thead><tr style="height: 29.7969px;"><td class="align-center" style="width: 19.0725%; height: 29.7969px;">Директория/файл</td><td class="align-center" style="width: 55.1826%; height: 29.7969px;">Описание</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">Обяз.</td></tr></thead><tbody><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">Chart.yaml</td><td style="width: 55.1826%; height: 29.7969px;">Метаданные чарта</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">+</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">templates/</td><td style="width: 55.1826%; height: 29.7969px;">Ресурсы кубера в формате yaml helm (yaml с переменными)

Но файлы начинающиеся с \_ не обрабатываются, \_\*.tpl обрабатываются как helper файлы.

</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">+ если не составной</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">templates/NOTES.txt</td><td style="width: 55.1826%; height: 29.7969px;">Инструкции по использованию</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">values.yaml</td><td style="width: 55.1826%; height: 29.7969px;">Переменные по умолчанию</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">.helmignore</td><td style="width: 55.1826%; height: 29.7969px;">Файлы исключения при упаковке чарта</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">charts/</td><td style="width: 55.1826%; height: 29.7969px;">Зависимости (другие чарты)</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-, при отсутствии helm их сгенерирует в соответствии с Chart.yaml</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">Chart.lock</td><td style="width: 55.1826%; height: 29.7969px;">Первично примененные зависимости.</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-, будет создан автоматически</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">crds/</td><td style="width: 55.1826%; height: 29.7969px;">Зависимости, которые должны быть собраны до основного чарта</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">README.md</td><td style="width: 55.1826%; height: 29.7969px;">Описание</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">LICENSE</td><td style="width: 55.1826%; height: 29.7969px;">Лицензия</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr style="height: 29.7969px;"><td style="width: 19.0725%; height: 29.7969px;">value.shema,json</td><td style="width: 55.1826%; height: 29.7969px;">Шаблон в json формате</td><td class="align-center" style="width: 25.7449%; height: 29.7969px;">-</td></tr><tr><td style="width: 19.0725%;">files/</td><td style="width: 55.1826%;">Дополнительные файлы</td><td style="width: 25.7449%;">  
</td></tr></tbody></table>

**templates/**

Измененные yaml. Добавлены переменные в формате Go шаблонизации. Переменные берутся из файла values.yaml

```
apiVersion: v1
kind: ConfigMap
metadata: 
  name: {{ .Release.Name }}
data:
  configuration.txt: |-
    {{ .Values.configurationData }}
```

Родительские пространства имен у переменных:

<table border="1" id="bkmrk-%D0%9F%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%82%D0%B2%D0%BE-%D0%B8%D0%BC%D0%B5%D0%BD-%D0%9E%D0%BF" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 30.0596%;"></col><col style="width: 70.0596%;"></col></colgroup><thead><tr><td class="align-center">Пространство имен</td><td class="align-center">Описание</td></tr></thead><tbody><tr><td>.Release</td><td>Переменные, связанные с релизом в устанавливаемой системе. .Release.Name - имя релиза .Release.Namespace - пространство имен релиза .Release.Revision - номер версии  
</td></tr><tr><td>.Values</td><td>Переменные, размещенные в файле values.yaml</td></tr><tr><td>.Chart</td><td>Переменные, получаемые из файла Chart.yaml Например, .Chart.Name, .Chart.Version .Chart.AppVersion   
</td></tr><tr><td>.Files</td><td>Работа с файлами в директории из директории files. Если файл не существует - вернется ошибка.

.Files.Get - Извлекает содержимое файлов

.Files.AsSecrets - Возвращает Base-64 закодированную строку для создания secret

.Files.AsConfig - Возвращает данные для использования в виде ConfigMap

</td></tr><tr><td>.Subcharts</td><td>Пространство имен дочерних чартов. Например .Subchart.MyChart.firstvalue

</td></tr></tbody></table>

**values.yaml**

В виде обычного key: value yaml

**Chart.yaml**

Чарты бывают application и library. Application используются для деплоя приложений, library - для предоставления именованных шаблонов, используемых в других чартах. В library чартах не может быть ни одного шаблона, только helper файлы.

Обязательные поля:

<table border="1" id="bkmrk-%D0%9F%D0%BE%D0%BB%D0%B5-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-apiver" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 30.0596%;"></col><col style="width: 70.0596%;"></col></colgroup><thead><tr><td class="align-center">Поле</td><td class="align-center">Описание</td></tr></thead><tbody><tr><td>apiVersion</td><td>Версия. В helm 3 формате используется v2</td></tr><tr><td>name</td><td>Имя чарта. Должно совпадать с именем директории чарта. В именах стоит использовать только -, например first-chart</td></tr><tr><td>version</td><td>Версия. Формат X.Y.Z</td></tr></tbody></table>

Пример файла

<table border="1" id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF-4" style="width: 101.548%;"><thead><tr><td class="align-center" style="width: 24.6677%;">Команда</td><td class="align-center" style="width: 17.883%;">Доп. пар.</td><td class="align-center" style="width: 57.4494%;">Описание</td></tr></thead><tbody><tr><td style="width: 24.6677%;">helm create chart\_name</td><td style="width: 17.883%;"> </td><td style="width: 57.4494%;">Создание шаблона чарта</td></tr><tr><td style="width: 24.6677%;">helm install proj\_name path</td><td style="width: 17.883%;">  
</td><td style="width: 57.4494%;">Создание проекта с названием proj\_name используя чарт по пути path</td></tr><tr><td style="width: 24.6677%;">  
</td><td style="width: 17.883%;">-f par\_file</td><td style="width: 57.4494%;">ссылка на другой файл параметров</td></tr><tr><td style="width: 24.6677%;">  
</td><td style="width: 17.883%;">--set foo=bar</td><td style="width: 57.4494%;">Ручная установка параметров</td></tr><tr><td style="width: 24.6677%;">helm get manifest proj\_name</td><td style="width: 17.883%;">  
</td><td style="width: 57.4494%;">Получить манифест проекта proj\_name</td></tr></tbody></table>

**Зависимости чарта**

Заполняются в разделе dependencies файла Chart.yaml

<table border="1" id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF-5" style="width: 101.548%;"><thead><tr><td class="align-center" style="width: 24.6677%;">Команда</td><td class="align-center" style="width: 17.883%;">Доп. пар.</td><td class="align-center" style="width: 57.4494%;">Описание</td></tr></thead><tbody><tr><td style="width: 24.6677%;">helm dependency build</td><td style="width: 17.883%;">путь до Chart.yaml</td><td style="width: 57.4494%;">Перестроить зависимые чарты, базируясь на файле Chart.lock Если этого файла нет - то же что и update</td></tr><tr><td style="width: 24.6677%;">helm dependency list</td><td style="width: 17.883%;"> </td><td style="width: 57.4494%;">Список зависимостей</td></tr><tr><td style="width: 24.6677%;">helm dependency update</td><td style="width: 17.883%;"> </td><td style="width: 57.4494%;">Обновление чартов и генерация Chart.lock</td></tr></tbody></table>

В зависимостях могут быть условия:

```
dependencies:
  - name: dependency1
    repository: https://example.com
    version: 1.x.x
    condition: dependency1.enabled
    tags:
      - monitoring: true
  - name: dependency2
    repository: https://example.com
    version: 2.x.x
    condition: dependency2.enabled
    tags:
      - monitoring: true
```

В данном случае переменные dependency1.enabled и dependency2.enabled должны быть установлены в values.yaml файле. Можно несколько переменных через запятую, но лучше завести одну общую переменную и в values ее заполнять. Раздел tags разделяет по группам: если в родительском чарте переменная monitoring не выставлена - данные зависимости установлены не будут. Может быть несколько тэгов, но если хотя бы один подходит - будет добавлено.

Дочерние параметры чарта могут быть переопределены.

Можно импортировать параметры из дочернего чарта (если его параметры отмечены как экспортируемые).

Также есть хуки, позволяющие выполнять что-то при достижении определенной стадии.

# Go templates

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

Конструкция {{- удаляет строку в которой функция.

**Условия:**

```
{{ if ConditionOne }}
# Do something
{{ else if ConditionTwo }}
# Do something else
{{ else }}
# Default case
{{ end }}
```

```
{{ if eq .Values.favorite.drink "coffee" }}mug: "true"{{ end }}
```

**With**

Работает так же как и в python

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  {{- end }}
```

**Циклы**

values.yaml:

```
favorite:
  drink: coffee
  food: pizza
pizzaToppings:
  - mushrooms
  - cheese
  - peppers
  - onions
  - pineapple
```

cur.yaml:

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
data:
  myvalue: "Hello World"
  {{- with .Values.favorite }}
  drink: {{ .drink | default "tea" | quote }}
  food: {{ .food | upper | quote }}
  {{- end }}
  toppings: |-
    {{- range .Values.pizzaToppings }}
    - {{ . | title | quote }}
    {{- end }}  
```

**Функции:**

Можно использовать pipeline: {{ .Values.favorite.drink | quote }}

<table border="1" id="bkmrk-%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B0-%D0%94%D0%BE%D0%BF.-%D0%BF%D0%B0%D1%80.-%D0%9E%D0%BF-2" style="width: 100%;"><thead><tr><td class="align-center" style="width: 25.6257%;">Функция</td><td class="align-center" style="width: 74.3743%;">Описание</td></tr></thead><tbody><tr><td style="width: 25.6257%;">quote</td><td style="width: 74.3743%;">Добавляет кавычки ```
{{ quote .Values.favorite.food }}
```

  
</td></tr><tr><td style="width: 25.6257%;">upper</td><td style="width: 74.3743%;">В верхний регистр</td></tr><tr><td style="width: 25.6257%;">repeat n</td><td style="width: 74.3743%;">Повтор значения n раз

```
{{ .Values.favorite.drink | repeat 5 | quote }}
```

  
</td></tr><tr><td style="width: 25.6257%;">default "some\_hy"</td><td style="width: 74.3743%;">Присвоить значение по умолчанию если отсутствует

```
drink: {{ .Values.favorite.drink | default "tea" | quote }}
```

</td></tr><tr><td style="width: 25.6257%;">eq, ne, lt, gt, and, or</td><td style="width: 74.3743%;">Логические функции

</td></tr><tr><td style="width: 25.6257%;">indent n</td><td style="width: 74.3743%;">Поставить n пробелов перед конструкцией

</td></tr></tbody></table>

[Список функций](https://helm.sh/docs/chart_template_guide/function_list/)

**Именованные шаблоны**

С шаблонами нужно запускать

```
helm install --dry-run --disable-openapi-validation
```

Шаблон внутри \_helpers.tpl файла:

```
{{- define "first.labels" -}}
labels:
  'app.kubernetes.io/instacce': {{ .Release.Name }}
  'app.kubernetes.io/managed-by': {{ .Release.Service }}
{{- end }}

{{- define "first.nameofchart" -}}
{{- printf "mycurname" -}}
{{ - end }}
```

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ include "first.nameofchart" . }}
{{- include "first.labels" . | nindent 2 }}
data:
  myvalue: "Hello World"
  food: {{ .Values.favourite.food }}
  drink: {{ .Values.favourite.drink }}
```

Точка означает передачу внутрь шаблона всех переменных.

Разница между include и template: проще использовать include, template не дает использовать дополнительные функции через pipeline

# Пример проекта

**Задача:** helm чарт приложения guestbook с БД redis

Создаем namespace для теста

```
kubectl create namespace guestbook-learn
```

Создаем шаблон структуры папок

```
helm create guestbook
```

Добавляем зеркало проекта bitnami и находим последнюю версию чарта

```
helm repo add bitnami https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
helm search repo redis --versions
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
bitnami/redis           20.11.4         7.4.2           Redis(R) is an open source, advanced key-value ...
bitnami/redis           20.11.3         7.4.2           Redis(R) is an open source, advanced key-value ...
bitnami/redis           20.11.2         7.4.2           Redis(R) is an open source, advanced key-value ...

```

 В моем случае это 20.11.4. Добавляем зависимость в Chart.yaml

```yaml
dependencies:
  - name: redis
    version: 20.11.x
    repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami

```

Попробуем загрузить зависимость

```
guestbook# helm dependency update .
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "bitnami" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading redis from repo https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami
Pulled: registry-1.docker.io/bitnamicharts/redis:20.11.4
Digest: sha256:51ee4afc621d0e0b26109d41c32bf23f3db114f15dd816c1acf8d1ddbf8d57ed
Deleting outdated charts
```

Действительно, в папке charts появился архив

```
guestbook# ls charts/
redis-20.11.4.tgz
```

Для завершения настройки redis посмотрим переменные, необходимые для запуска.

```
helm show values charts/redis-20.11.4.tgz
```

Это выдало портянку (если убрать комментарии) в 698 строк. Был задан вопрос ИИ. Ответ отличался от приведенного варианта в книге и прямое использование не поехало бы. В values.yaml было добавлено