﻿# Kubernetes-кластер

> [HTML Version](kubernetes-deckhouse-air-gap.html)

Приложение ELMA365 устанавливается в Kubernetes-кластер. Для работы с ним мы рекомендуем платформу [Deckhouse](https://deckhouse.ru/) на базе Open Source-компонентов.

Платформа Deckhouse включена [в реестре российского ПО](https://reestr.digital.gov.ru/reestr/490559/) и [сертифицирована в CNCF](https://landscape.cncf.io/?view-mode=card&classify=category&sort-by=name&sort-direction=asc&item=platform--certified-kubernetes-distribution--flant-deckhouse#app-definition-and-development--application-definition-image-build ). Кроме Kubernetes, она включает дополнительные модули для мониторинга, балансировки трафика, автомасштабирования, безопасного доступа и т. д. Модули преднастроены, интегрированы друг с другом и готовы к работе. Управление всеми компонентами кластера и платформы, а также их обновление полностью автоматизированы.

Совместимость платформы и версий Kubernetes смотрите в [официальной документации Deckhouse](https://deckhouse.ru/products/kubernetes-platform/documentation/v1/supported_versions.html).

В статье рассмотрим, как развернуть Kubernetes-кластер, который состоит из единственного master-узла.

Установка состоит из пяти этапов:

1. [Подготовка инфраструктуры](#infrastructure-preparation).

2. [Подготовка конфигурационного файла](#preparation-config-file).

3. [Установка Kubernetes-кластера на базе Deckhouse](#installation).

4. [Настройка Deckhouse](#setting).

5. [Установка HELM](#installation-helm).

## Шаг 1. Подготовка инфраструктуры

Чтобы развернуть Kubernetes-кластер на базе платформы Deckhouse, вам потребуются:

1. Персональный компьютер.

Компьютер, с которого будет производиться установка. Он нужен только для запуска инсталлятора Deckhouse и не будет частью кластера.

Системные требования:

- ОС: Windows 10+, macOS 10.15+, Linux (Ubuntu 18.04+, Fedora 35+);

- установленный docker для запуска инсталлятора Deckhouse;

- доступ до проксирующего registry или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;

- SSH-доступ по ключу до узла, который будет master-узлом будущего кластера.

2. Master-узел.

Сервер (физический сервер или виртуальная машина), который будет управляющим узлом (master-узлом) будущего кластера.

В процессе установки инсталлятор Deckhouse, запущенный на персональном компьютере, подключится к master-узлу по SSH, установит необходимые пакеты, настроит control plane Kubernetes и развернёт Deckhouse.

Системные требования:

- не менее 12 ядер CPU;

- не менее 16 ГБ RAM;

- не менее 200 ГБ дискового пространства;

- [поддерживаемая ОС](https://deckhouse.ru/documentation/v1/supported_versions.html);

- доступ до проксирующего **registry** или до частного хранилища образов контейнеров с образами контейнеров Deckhouse;

````
Начало внимание

````
Deckhouse поддерживает работу только с Bearer token схемой авторизации в **registry**.

````
Конец внимание

- ````
доступ до прокси-сервера для скачивания deb/rpm-пакетов ОС (при необходимости);

- SSH-доступ от персонального компьютера по ключу;

- на узле не должно быть установлено пакетов container runtime, например, containerd или docker.

**Важно**: установка непосредственно с master-узла в настоящий момент не поддерживается. Установщик в виде Docker-образа нельзя запускать на том же узле, на котором планируется развёртывание master-узла, так как на узле не должно быть установлено пакетов container runtime, например, containerd или docker. При отсутствии менеджмент узлов, установите docker на любой другой ноде будущего кластера, запустите Docker-образ установщика, установите Deckhouse и удалите Docker-образ установщика c ноды вместе с docker.

3. Загрузка образов Deckhouse в локальный реестр образов.

Кластер Kubernetes с помощью Deckhouse можно развернуть в закрытом окружении, из которого нет доступа в интернет. Для этого предварительно скачайте на компьютере с доступом в интернет образы платформы Deckhouse и загрузите их в локальный реестр образов. Подробнее об этом читайте в статье [«Загрузка образов Deckhouse».](downloading-images-deckhouse.md)

## Шаг 2. Подготовка конфигурационного файла

Чтобы установить Deckhouse, подготовьте YAML-файл конфигурации установки. Для получения этого файла используйте сервис [Быстрый старт](https://deckhouse.ru/gs/) на сайте Deckhouse. Сервис сгенерирует актуальный YAML‑файл для текущей версий платформы.

1. Сгенерируйте YAML-файл сервисом [Быстрый старт](https://deckhouse.ru/gs/), выполнив следующие шаги:

1. Выберите инфраструктуру — Bare Metal.

2. Ознакомьтесь с информацией об установке.

3. Укажите шаблон для DNS-имен кластера. В нашем случае — **%s.example.com**.

4. Сохраните `config.yml`.

2. Внесите необходимые изменения в `config.yml`. Для этого выполните следующие действия:

1. Задайте адресное пространство подов кластера в **podSubnetCIDR**.

2. Задайте адресное пространство Service’ов кластера в **serviceSubnetCIDR**.

3. Задайте нужную версию Kubernetes в **kubernetesVersion**.

4. Проверьте канал обновления в **releaseChannel** (EarlyAccess).

5. Проверьте шаблон доменного имени в **publicDomainTemplate** (**%s.example.com**).  
Используется для формирования доменов системных приложений в кластере. Например, Grafana для шаблона **%s.example.com** будет доступна, как **grafana.example.com**.

6. Проверьте режим работы модуля cni-flannel в **podNetworkMode**.  
Режим работы flannel, допустимые значения **VXLAN** (если ваши сервера имеют связность L3) или **HostGW** (для L2-сетей).

7. Укажите локальную сеть, которую будут использовать узлы кластера в **internalNetworkCIDRs**.  
Список внутренних сетей узлов кластера, например, `'192.168.1.0/24'`, который используется для связи компонентов Kubernetes (kube-apiserver, kubelet и т. д.) между собой.

### Пример файла первичной конфигурации кластера

Ниже представлены примеры файла первичной конфигурации кластера — `config.yml`. В этом файле для установки через интернет и для офлайн-установки используются параметры:

- `podSubnetCIDR` — внутренние адреса подов, которые не должны пересекаться с вашей офисной или облачной сетью; 

- `serviceSubnetCIDR` — адреса сервисов внутри кластера, которые не должны пересекаться с вашей офисной или облачной сетью; 

- `internalNetworkCIDRs` — сети, с которых разрешён доступ к API кластера;

- `releaseChannel` — канал обновлений Deckhouse Virtualization Platform. Доступные каналы: Alpha, Beta, Early Access, Stable, Rock Solid. Их подробное описание смотрите в [официальной документации Deckhouse](https://deckhouse.ru/products/virtualization-platform/documentation/about/release-channels.html).

 

**Для установки через интернет**

````
apiVersion: deckhouse.io/v1  
kind: ClusterConfiguration  
clusterType: Static  
podSubnetCIDR: 10.111.0.0/16  
serviceSubnetCIDR: 10.222.0.0/16  
kubernetesVersion: "Automatic"  
clusterDomain: "cluster.local"  
\---  
apiVersion: deckhouse.io/v1  
kind: InitConfiguration  
deckhouse:  
  imagesRepo: registry.deckhouse.ru/deckhouse/ce  
  registryDockerCfg: eyJhdXRocyI6IHsgInJlZ2lzdHJ5LmRlY2tob3VzZS5ydSI6IHt9fX0K  
\---  
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: deckhouse  
spec:  
  version: 1  
  enabled: true  
  settings:  
    bundle: Default  
    releaseChannel: EarlyAccess  
    logLevel: Info  
\---  
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: global  
spec:  
  version: 2  
  settings:  
    modules:  
      publicDomainTemplate: "%s.elewise.local"  
\---  
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: user-authn  
spec:  
  version: 2  
  enabled: true  
  settings:  
    controlPlaneConfigurator:  
      dexCAMode: DoNotNeed  
    publishAPI:  
      enabled: true  
      https:  
        mode: Global  
        global:  
          kubeconfigGeneratorMasterCA: ""  
\---  
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: cni-cilium  
spec:  
  version: 1  
  enabled: true  
  settings:  
    tunnelMode: VXLAN  
\---  
apiVersion: deckhouse.io/v1  
kind: StaticClusterConfiguration  
internalNetworkCIDRs:  
\- 192.168.1.0/24
````

````


**Для установки без доступа в интернет**

````
Начало внимание

````
Для генерации YAML-файла сервисом [Быстрый старт](https://deckhouse.ru/gs/), выберите инфраструктуру **Закрытое окружение**.

````
Конец внимание

````
Установите следующие параметры в ресурсе **InitConfiguration**:

- **devBranch**: если в изолированном приватном репозитории нет образов, содержащих информацию о каналах обновлений, используйте точный тег образа Deckhouse, чтобы установить Deckhouse Platform. Например, если вы хотите установить релиз v1.46.3, используйте образ \[OBJECT\]. Также укажите \[OBJECT\] вместо \[OBJECT\];

- **imagesRepo**: \[OBJECT\] — адрес образа Deckhouse в приватном репозитории с учётом используемой редакции. В рамках статьи образы были загружены в \[OBJECT\]. Подробнее читайте в статье [«Загрузка образов Deckhouse»](downloading-images-deckhouse.md);

- **registryDockerCfg**: \[OBJECT\] — права доступа к приватному репозиторию, зашифрованные в Base64. Примеры заполнения **registryDockerCfg** читайте в официальной документации [Deckhouse Kubernetes Platform](https://deckhouse.ru/documentation/v1/deckhouse-faq.html#%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8). В рамках статьи разрешён анонимный доступ к образам Deckhouse в стороннем registry. Сформируйте **registryDockerCfg**, выполнив следующую команду:

````
echo -n "\{\\"auths\\": \{ \\"registry.example.com:443/images/deckhouse\\": \{\}\}\}" | base64

- ````
**registryScheme**: укажите по какому протоколу (HTTP, HTTPS) работает приватный репозиторий;

- **registryCA**: корневой TLS-сертификат, которым можно проверить TLS-сертификат приватного реестра, например, если хранилище использует самоподписанный сертификат. Если вы используете не самоподписанный сертификат или хранилище работает по протоколу HTTP, удалите этот параметр.

Пример файла первичной конфигурации кластера — \[OBJECT\]:

````
apiVersion: deckhouse.io/v1  
kind: ClusterConfiguration  
clusterType: Static  
podSubnetCIDR: 10.111.0.0/16  
serviceSubnetCIDR: 10.222.0.0/16  
kubernetesVersion: "Automatic"  
clusterDomain: "cluster.local"  
\---  
apiVersion: deckhouse.io/v1  
kind: InitConfiguration  
deckhouse:  
  devBranch: v1.46.3  
  configOverrides:  
    global:  
      modules:  
        publicDomainTemplate: "%s.example.com"  
    cniFlannelEnabled: true  
    cniFlannel:  
      podNetworkMode: VXLAN  
  imagesRepo: registry.example.com:443/images/deckhouse  
  registryDockerCfg: eyJhdXRocyI6IHsgInJlZ2lzdHJ5LmV4YW1wbGUuY29tOjQ0My9pbWFnZXMvZGVja2hvdXNlIjoge319fQ==  
  registryScheme: HTTPS  
  registryCA: |  
    -----BEGIN CERTIFICATE-----  
    MIIFBzCCGu+gAwIBAgIUBZ37mm02QGGcmd5pZvWwnpCfQUowDQYGKoZIhvcNAQEL  
    BQAwHjEcMBoGA1UEAwwTaW1hZ2VzLnByb2FjdG9yLnBybzAeFw0yMjA5MjkxNDUw  
    ...  
    9UpckrwxPhctmln5/Awd/2gcaRAxI3qBL7SyDFT0YpnGcAiGPY4Z67HhZ7h6y+2F  
    fQDSXli0r61/Fenkh5OLMihLYTm+5gjZlG1LCXpaGIpjAf16Q+3/pIqapQ==  
    -----END CERTIFICATE-----  
\---  
apiVersion: deckhouse.io/v1  
kind: StaticClusterConfiguration  
internalNetworkCIDRs:  
  - 192.168.1.0/24
````

## ````
Шаг 3. Установка Kubernetes-кластера на базе Deckhouse

Установка Deckhouse Platform Community Edition сводится к установке кластера (установщиком на базе Docker-образа), который состоит из единственного master-узла. Инсталлятор Deckhouse доступен в виде образа контейнера, в который необходимо передать конфигурационные файлы и SSH-ключи доступа на master-узел. Далее подразумевается, что используется SSH-ключ \[OBJECT\]. В основе инсталлятора лежит утилита [dhctl](https://github.com/deckhouse/deckhouse/tree/main/dhctl/).

1. Запустите установщик.

**Важно**: установка непосредственно с master-узла в настоящий момент не поддерживается. Установщик в виде Docker-образа нельзя запускать на том же узле, на котором планируется развёртывание master-узла, так как на узле не должно быть установлено пакетов container runtime, например, containerd или docker.

Установщик запускается на персональном компьютере, подготовленном на этапе [подготовка инфраструктуры](#infrastructure-preparation). На ПК перейдите в директорию с файлом конфигурации \[OBJECT\], подготовленным на этапе [подготовка конфигурационного файла](#preparation-config-file).

Для запуска установщика через интернет:

````
sudo docker run --pull=always -it -v "\$PWD/config.yml:/config.yml" -v "\$HOME/.ssh/:/tmp/.ssh/" registry.deckhouse.io/deckhouse/ce/install:stable bash

````
**Для установки без доступа в интернет**

  
Выполните команду:

````
sudo docker run --pull=always -it -v "\$PWD/config.yml:/config.yml" -v "\$HOME/.ssh/:/tmp/.ssh/" example.com:443/images/deckhouse/install:v1.46.3 bash

````
Где:

\[OBJECT\] — версия устанавливаемого релиза.

2. Установите Deckhouse. Для этого внутри контейнера установщика выполните команду:

````
dhctl bootstrap --ssh-user=<username> --ssh-host=<master\_ip> --ssh-agent-private-keys=/tmp/.ssh/id\_rsa \\  
\--config=/config.yml \\  
\--ask-become-pass

````
где:

- ````
\[OBJECT\]````
 — в параметре ````
\[OBJECT\]````
 укажите имя пользователя, от которого генерировался SSH‑ключ для установки;

- ````
\[OBJECT\]````
 — IP-адрес master-узла, настроенного на этапе [подготовки инфраструктуры](#infrastructure-preparation);

- `<ask-become-pass>` — опциональный параметр. Используйте его, если для доступа к узлу требуется пароль.

Процесс установки может занять 15-30 минут при хорошем соединении.

Возможные ошибки при установке Deckhouse

  
При установке Deckhouse могут возникать ошибки. Рассмотрим, как их устранить.

1. Ошибка доступа портов — \[OBJECT\].

Чтобы устранить её, выполните следующие действия:

1. Проверьте, что доступ до всех портов, указанных в [официальной документации Deckhouse](https://deckhouse.ru/products/kubernetes-platform/documentation/v1/network_security_setup.html), настроен корректно.

2. Запустите установщик повторно и [выполните команду установки Deckhouse](#deckhouse-installation-command).

3. Дождитесь окончания установки Deckhouse.

4. Если ошибка повторилась, запустите установщик и выполните команду установки Deckhouse с флагом \[OBJECT\].  
Пример:

````
dhctl bootstrap --ssh-user=<username> --ssh-host=<master\_ip> --ssh-agent-private-keys=/tmp/.ssh/id\_rsa --preflight-skip-availability-ports-check \\  
 --config=/config.yml \\  
 --ask-become-pass

2. ````
Ошибка прав доступа для запустившего установку пользователя (\[OBJECT\]) — \[OBJECT\].

Чтобы устранить её, выполните следующие действия:

1. В файле \[OBJECT\] проверьте, что у пользователя есть sudo-права на хосте, в который устанавливается Deckhouse. Для предоставления прав добавьте запись:

````
<user\_name> ALL=(ALL) ALL````
 

В \[OBJECT\] записывается учётная запись пользователя, который запускает установку.

2. Запустите установщик повторно и [выполните команду установки Deckhouse](#deckhouse-installation-command).

3. Дождитесь окончания установки Deckhouse.

4. Если ошибка повторилась, запустите установщик и выполните команду установки Deckhouse с флагом \[OBJECT\].  
Пример:

````
dhctl bootstrap --ssh-user=<username> --ssh-host=<master\_ip> --ssh-agent-private-keys=/tmp/.ssh/id\_rsa --preflight-skip-sudo-allowed \\  
\--config=/config.yml \\  
\--ask-become-pass

3. ````
Ошибка при повторном запуске скрипта установки — \[OBJECT\].

Ошибка возникает, если на master-ноде остались файлы от незавершённой установки платформы Deckhouse. Чтобы удалить файлы, на master-ноде выполните команду:

````
sudo bash /var/lib/bashible/cleanup\_static\_node.sh --yes-i-am-sane-and-i-understand-what-i-am-doing
````

## ````
Шаг 4. Настройка Deckhouse

Подключитесь по SSH на master-узел, настроенный на этапе [подготовки инфраструктуры](#infrastructure-preparation). Для этого выполните следующие шаги:

1. ### Снимите с master-узла ограничения taint.

В рамках статьи Kubernetes-кластер на базе Deckhouse состоит из одного узла. Разрешите компонентам Deckhouse работать на master-узле. Для этого выполните команду:

````
sudo -i d8 k patch nodegroup master --type json -p '\[\{"op": "remove", "path": "/spec/nodeTemplate/taints"\}\]'

2. ### ````
Увеличьте количество подов на master-ноде.

Увеличьте максимальное количество подов на узлах NodeGroup master, выполнив команду:

````
sudo -i d8 k patch nodegroup master --type=merge -p '\{"spec":\{"kubelet":\{"maxPods":200\}\}\}'

3. ````
Добавьте Local Path Provisioner.

По умолчанию storageclass отсутствует в Deckhouse. Создайте custom resource **LocalPathProvisioner**, позволяющий пользователям Kubernetes использовать локальное хранилище на узлах. Для этого выполните следующие действия:

1. Создадайте на master-узле файл \[OBJECT\], содержащий конфигурацию для **LocalPathProvisioner**.

2. Установите нужную Reclaim policy (по умолчанию устанавливается Retain). В рамках статьи для параметра \[OBJECT\] установлено \[OBJECT\] (PV после удаления PVC удаляются).

Пример файла \[OBJECT\]:

````
apiVersion: deckhouse.io/v1alpha1  
kind: LocalPathProvisioner  
metadata:  
  name: localpath-deckhouse-system  
spec:  
  nodeGroups:  
  - master  
  path: "/opt/local-path-provisioner"  
  reclaimPolicy: Delete

3. ````
Примените файл \[OBJECT\] в Kubernetes. Для этого выполните команду:

````
sudo kubectl apply -f local-path-provisioner.yaml

4. ````
Установите созданный **LocalPathProvisioner**, как storageclass по умолчанию (default-class), выполнив команду:

````
sudo -i d8 k patch mc global --type merge -p '\{"spec": \{"settings":\{"defaultClusterStorageClass":"localpath-deckhouse-system"\}\}\}'

4. ````
Добавьте Ingress Nginx Controller.

Deckhouse устанавливает и управляет NGINX Ingress Controller при помощи Custom Resources. Если узлов для размещения Ingress-контроллера больше одного, он устанавливается в отказоустойчивом режиме и учитывает все особенности реализации инфраструктуры облаков и bare metal, а также кластеров Kubernetes различных типов.

1. Создайте на ноде master-узла файл \[OBJECT\], содержащий конфигурацию Ingress-контроллера. Для этого выполните следующую команду:

````
\# секция, описывающая параметры nginx ingress controller  
\# используемая версия API Deckhouse  
apiVersion: deckhouse.io/v1  
kind: IngressNginxController  
metadata:  
  name: nginx  
spec:  
  # имя Ingress-класса для обслуживания Ingress NGINX controller  
  ingressClass: nginx  
    # способ поступления трафика из внешнего мира  
  inlet: HostPort  
  hostPort:  
    httpPort: 80  
    httpsPort: 443  
  # описывает, на каких узлах будет находиться компонент  
  # при необходимости можно изменить  
  nodeSelector:  
    node-role.kubernetes.io/control-plane: ""  
  tolerations:  
  - effect: NoSchedule  
    key: node-role.kubernetes.io/control-plane  
    operator: Exists

2. ````
Примените файл ````
\[OBJECT\]````
 в Kubernetes, выполнив команду:

````
sudo kubectl create -f ingress-nginx-controller.yml

5. ````
Добавьте пользователя для доступа к веб-интерфейсу кластера.

1. Добавьте на master-узле файл \[OBJECT\], содержащий описание учётной записи пользователя и прав доступа:

````
apiVersion: deckhouse.io/v1  
kind: ClusterAuthorizationRule  
metadata:  
  name: admin  
spec:  
  # список учётных записей Kubernetes RBAC  
  subjects:  
  - kind: User  
    name: admin@deckhouse.io  
  # предустановленный шаблон уровня доступа  
  accessLevel: SuperAdmin  
  # разрешить пользователю делать kubectl port-forward  
  portForwarding: true  
\---  
\# секция, описывающая параметры статического пользователя  
\# используемая версия API Deckhouse  
apiVersion: deckhouse.io/v1  
kind: User  
metadata:  
  name: admin  
spec:  
  # e-mail пользователя  
  email: admin@deckhouse.io  
  # это хэш пароля xgnv5gkggd, сгенерированного сейчас  
  # сгенерируйте свой или используйте этот, но только для тестирования  
  # echo "xgnv5gkggd" | htpasswd -BinC 10 "" | cut -d: -f2  
  # при необходимости можно изменить  
  password: '\$2a\$10\$4j4cUeyonCfX7aDJyqSHXuAxycsf/sDK0T4n9ySQ7.owE34L1uXTm'

2. ````
Примените файл ````
\[OBJECT\]````
, выполнив на master-узле следующую команду:

````
sudo kubectl create -f user.yml

6. ````
Разрешите переназначить политику привилегий для запускаемых подов:

````
sudo kubectl label namespace elma365 security.deckhouse.io/pod-policy=privileged --overwrite

````
Если пространство имён ещё не создано, добавьте его с помощью команды:

````
kubectl create namespace elma365

7. ````
При необходимости настройте DNS для внутреннего домена. Для этого в Deckhouse доступен модуль kube-dns. Включите его с помощью команды: 

````
sudo -i d8 system module enable kube-dns 

````
Если модуль уже включён, для его настройки используйте команду: 

````
sudo -i d8 k edit mc kube-dns

````
Настройки DNS указываются в файле конфигурации. 

Пример минимальной конфигурации с указанием своего DNS-сервера и домена

````
apiVersion: deckhouse.io/v1alpha1  
kind: ModuleConfig  
metadata:  
  name: kube-dns  
spec:  
  version: 1  
  enabled: true  
  settings:  
    upstreamNameservers:  
    - 8.8.8.8  
    - 8.8.4.4  
    hosts:  
    - domain: one.example.com  
      ip: 192.168.0.1  
    - domain: two.another.example.com  
      ip: 10.10.0.128  
    stubZones:  
    - zone: consul.local  
      upstreamNameservers:  
      - 10.150.0.1  
    enableLogs: true  
    clusterDomainAliases:  
    - foo.bar  
    - baz.qux
````

````
Подробнее о модуле kube-dns читайте в [официальной документации Deckhouse](https://deckhouse.ru/modules/kube-dns/). 

## Шаг 5. Установка HELM

HELM можно установить, загрузив определённую версию вручную, или с помощью скрипта. Оба способа подробно описаны в [официальной документации менеджера пакетов HELM](https://helm.sh/ru/docs/intro/install/). 

Рассмотрим загрузку и установку инструмента вручную:

1. Перейдите на страницу релизов [Helm](https://github.com/helm/helm/releases) и скачайте архив \[OBJECT\] необходимой версии.

**Для установки через интернет:**

````
wget https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz

````
**Для установки без доступа в интернет**

  
На компьютере с доступом в интернет перейдите на страницу релизов Helm и скачайте архив \[OBJECT\] нужной версии, выполнив команду:

````
wget https://get.helm.sh/helm-vX.Y.Z-linux-amd64.tar.gz

````
  
Скопируйте полученный архив на master-узел.

2. Распакуйте архив и переместите бинарный файл helm:

````
tar -zxvf helm-vX.Y.Z-linux-amd64.tar.gz  
mv linux-amd64/helm /usr/local/bin/helm
````