Как установить программное обеспечение в кластерах Kubernetes с помощью управления пакетами Helm 3

0 Акции
0
0
0
0

Введение

Helm — это менеджер пакетов для Kubernetes, который позволяет разработчикам и операторам легко настраивать и развертывать приложения в кластерах Kubernetes.

Пакеты Helm называются чартами и содержат шаблоны определений ресурсов, которые позволяют разворачивать и настраивать приложения с минимальными усилиями пользователя. С помощью шаблонов можно управлять чартом, его настройками и поведением, передавая определения переменных, не изменяя сам чарт. Helm автоматически управляет настраиваемыми определениями ресурсов, а также изменениями в предварительно развёрнутых определениях. Развёрнутый чарт с возможными настройками называется выпуском.

В этом руководстве вы настроите Helm 3 и узнаете, как устанавливать, обновлять, восстанавливать и управлять диаграммами и версиями. Вы также научитесь создавать и упаковывать собственные диаграммы, а также настраивать репозитории диаграмм, где будут размещаться диаграммы, которые можно будет установить немедленно.

Предпосылки
  • Кластер Kubernetes с включенным управлением доступом на основе ролей (RBAC).
  • Инструмент командной строки kubectl установлен на вашем локальном компьютере и настроен для подключения к вашему кластеру.
  • Вы можете проверить свое соединение с помощью следующей команды:
  • kubectl cluster-info
  • Если ошибок нет, вы подключены к кластеру. Если вы обращаетесь к нескольким кластерам с помощью kubectl, убедитесь, что вы выбрали правильный контекст кластера, выполнив следующую команду:
  • kubectl config get-contexts
  • В выводе перечислены доступные настройки:
  • Output
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE
    * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin
  • Здесь звёздочка (*) означает, что мы подключены к кластеру do-fra1-helm3-example. Чтобы переключить кластер, выполните:
  • kubectl config use-context context-name
  • После подключения к нужному кластеру перейдите к шагу 1, чтобы начать установку Helm.

Шаг 1 — Установка Helm 3

В этом разделе вы установите Helm 3, используя официально предоставленный скрипт оболочки.

Начните с перехода в /tmp, где вы можете найти скрипт установки, выполнив:

cd /tmp

Загрузите скрипт с помощью следующей команды:

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

Вы можете проверить get_helm.sh в текстовом редакторе, чтобы убедиться в его безопасности.

Сделайте его исполняемым, установив следующие разрешения:

chmod u+x get_helm.sh

Наконец, запустите его, чтобы установить Helm 3:

./get_helm.sh

Вы получите вывод, подобный следующему:

Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

Вы установили Helm 3 на свой компьютер. Теперь вы познакомитесь с репозиториями чартов и узнаете, как их использовать.

Шаг 2 — Настройка репозиториев диаграмм

Диаграммы Helm хранятся в репозиториях чартов, которые может разместить любой пользователь. По умолчанию Helm 3 не имеет предустановленных репозиториев. В предыдущих версиях Helm был предусмотрен центральный репозиторий чартов. Однако Helm 3 был специально разработан для того, чтобы разработчики чартов управляли своими репозиториями самостоятельно, что обеспечивает большую свободу и ускоряет выпуск релизов. Это означает, что для каждого используемого чарта необходимо добавить репозиторий хостинга в вашу установку Helm.

Чтобы найти нужный репозиторий, вы можете использовать ArtifactHub.io — сайт с открытым исходным кодом, управляемый CNCF, где каталогизируются чарты Helm и их репозитории. Он также отслеживает популярные и полезные чарты, используемые другими проектами CNCF, поэтому он отличается от стабильного репозитория, с которым работали предыдущие версии Helm. Это отличный ресурс для распространённых проектов, таких как логи Nginx или инструменты мониторинга.

Вы можете найти нужный чарт на главной странице. Поиск Nginx покажет все проиндексированные чарты, связанные с ним.


Вы установите версию сообщества, управляемую командой Kubernetes. Найдите ingress-nginx в результатах поиска. Выберите его, чтобы открыть страницу.


Каждый чарт должен иметь подробное описание задачи, а также инструкции по добавлению репозитория в установку чарта и его установке. В противном случае вы можете получить необходимые инструкции, нажав кнопку «УСТАНОВИТЬ» в правой части страницы.


Вы можете нажать синюю кнопку рядом с командой, чтобы скопировать её. Для первой команды выполните следующее и выполните её:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

Чтобы добавить репозиторий в Helm, выполните команду helm repo add . В качестве параметров принимаются имя репозитория и его расположение.

Результат будет следующим:

Output
"ingress-nginx" has been added to your repositories

При добавлении нового репозитория необходимо сообщить Helm, что он содержит, выполнив команду:

helm repo update

Вы получите следующий вывод, указывающий на то, что обновление прошло успешно:

Output
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
Update Complete. ⎈Happy Helming!⎈

К этому моменту вы уже ознакомились с ArtifactHub и его возможностями. Вы также добавили новый репозиторий в свою установку Helm. Далее вам предстоит установить чарт Helm.

Шаг 3 – Установка Helm Chart

В предыдущем разделе вы добавили репозиторий ingress-nginx graph. Теперь вам нужно установить его на свой кластер.

У каждой диаграммы есть переменные конфигурации, которые можно задать для изменения её поведения. Эти переменные хранятся в файле values.yaml, который является частью диаграммы. Если вы не загрузили диаграмму на своё устройство, для её просмотра вам потребуется выполнить следующую команду:

helm show values chart_name

Чтобы отобразить доступные переменные для ingress-nginx, замените chart_name:

helm show values ingress-nginx/ingress-nginx

Вывод будет длинным и покажет содержимое файла values.yaml для ingress-nginx.

Для установки диаграммы вы можете использовать команду install:

helm install release_name repository/chart_name

Релиз — это развернутый экземпляр графа, здесь он называется ingress-nginx.

Эта команда устанавливает диаграмму со значениями по умолчанию для переменных в вашем кластере. Если вы хотите изменить некоторые из них, вы можете передать новые значения переменных с помощью параметра –set:

helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

Вы можете повторять команду –set для любого количества переменных. Поскольку мы не будем настраивать её сейчас, установите её как есть, выполнив:

helm install ingress-nginx ingress-nginx/ingress-nginx

Вывод будет примерно следующим:

Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 10:12:37 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The ingress-nginx controller has been installed.
It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller'
...

Обратите внимание, что NAME соответствует указанному вами названию версии. Helm также отображает общую информацию, такую как статус выпуска и пространство имён, в котором он развёрнут. Раздел NOTES различается в зависимости от чарта и обычно содержит краткие советы по началу работы или предупреждения о некоторых распространённых проблемах при использовании ресурсов чарта. Здесь упоминается, что балансировщик нагрузки создаётся, и его создание может занять некоторое время.

Для проверки развернутых диаграмм используйте список команд:

helm list

Вы заметите, что ingress-nginx — единственный развернутый на данный момент граф:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Вы можете найти службы, имеющиеся в его кластере, выполнив следующее:

kubectl get services

Вывод будет примерно таким:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s
ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s
kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m

Теперь, когда вы развернули версию в своем кластере, вам придется изменить ее конфигурацию во время развертывания.

Шаг 4 — Обновите версию

После запуска версии вам не придётся её удалять и создавать заново, если потребуется изменить её конфигурацию. Вы можете использовать команду «Upgrade» для обновления версии с использованием новой версии диаграммы или для установки новых настроек.

На диаграмме ingress-nginx показана переменная controller.replicaCount, которая управляет количеством развёрнутых подов контроллера. По умолчанию она равна единице, что можно проверить, выведя список доступных подов:

kubectl get pods

Вы заметите, что есть только один:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

Если вы хотите развернуть больше экземпляров для обеспечения избыточности (например, три), вы можете обновить версию и установить переменную на 3, выполнив:

helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

Вы также передаете --reuse-values , который указывает Helm поместить ваши изменения поверх развернутой версии и сохранить предыдущую конфигурацию.

В выходных данных Helm вносит исправления, указывающие на то, что версия была обновлена:

Output
NAME: ingress-nginx
LAST DEPLOYED: Wed Feb 24 12:07:54 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
NOTES:
...

Вы можете получить список доступных модулей, выполнив следующую команду:

kubectl get pods

Вместо одного вы увидите в списке три модуля:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m
ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s

Далее вы отмените изменения и полностью удалите публикацию.

Шаг 5 — Восстановление и удаление копии

При обновлении версии номер её ревизии увеличивается. Helm хранит все версии версии, позволяя при необходимости вернуться к предыдущей.

Чтобы вернуть количество модулей к одному, можно повторно запустить команду обновления и вручную изменить количество, поскольку это небольшое изменение. Однако при работе с большими графиками с большим количеством переменных ручной возврат невозможен и должен выполняться автоматически.

Чтобы восстановить версию, используйте команду восстановления:

helm rollback release_name release_revision

С его помощью можно отменить изменения, внесенные в ingress-nginx, вернувшись к версии 1:

helm rollback ingress-nginx 1

Вы получите следующий вывод, указывающий на то, что операция прошла успешно:

Output
Rollback was a success! Happy Helming!

Текущую версию можно проверить, перечислив версии:

helm list

Вы заметите, что теперь номер редакции — 3, а не 1:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Helm рассматривает каждое изменение, включая откат, как новую версию релиза. Проверяя количество развёрнутых модулей, выполните:

kubectl get pods

Вы заметите, что есть только один:

Output
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

Чтобы удалить версию и все ее редакции, можно использовать команду helm delete:

helm delete release_name

Поскольку он вам больше не понадобится, удалите ingress-nginx, выполнив следующую команду:

helm delete ingress-nginx

Результат будет следующим:

Output
release "ingress-nginx" uninstalled

Вы можете составить список версий, чтобы убедиться в отсутствии таковых:

helm list

В выходной таблице не будет строк:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

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

Шаг 6 — (Необязательно) Создание пользовательских диаграмм

На этом необязательном этапе вы узнаете, как создать собственную диаграмму, где разместить определения ресурсов и как упаковать ее для дальнейшего распространения.

Вам нужно создать новую диаграмму с именем sample-chart. Для этого выполните следующую команду:

helm create example-chart

Это создаст новый каталог с именем example-chart со следующими файлами и структурой:

charts/
templates/
├─ tests/
│ ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml

Определения ресурсов, которые ваш граф устанавливает в целевых кластерах, находятся в каталоге шаблонов. Определения по умолчанию, созданные Helm в качестве отправной точки, разворачивают контроллер Ingress Nginx. Несмотря на расширение файла YAML, они используют синтаксис форматирования Go, что позволяет настраивать их с помощью открытых переменных, которые вы можете передавать. Вы можете просмотреть содержимое файла service.yaml, выполнив команду:

cat example-chart/templates/service.yaml

Вы заметите, что в нем есть инструкции по форматированию для создания значений, заключенных в двойные скобки:

OutputapiVersion: v1
kind: Service
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: http
protocol: TCP
name: http
selector:
{{- include "mychart.selectorLabels" . | nindent 4 }}

Ссылочные переменные доступны пользователю и определены в файле values.yaml. Текст HELM NOTES сохраняется в файле NOTES.txt после развертывания и также форматируется. Метаданные чарта, такие как название, версия и версия развертываемого программного обеспечения, указываются в файле Chart.yaml:

apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
...
type: application
...
version: 0.1.0
...
appVersion: "1.16.0"

Чтобы проверить, что именно развертывает Helm, вы можете передать --dry-run и --debug команде helm install, указав каталог чарта:

helm install example-chart --dry-run --debug ./example-chart

Вывод будет обширным и будет включать все окончательные определения ресурсов, которые будут применены к вашему кластеру. Пока вы работаете с графом, вы можете использовать команду upgrade для отправки новых версий в Kubernetes.

Когда вы закончите делиться диаграммой, вы можете сделать ее доступной для распространения, выполнив:

helm package ./example-chart

Результат будет следующим:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

Упакованную диаграмму можно установить так же, как и в добавленных репозиториях:

helm install example-chart example-chart-0.1.0.tgz

На этом этапе вы создали и развернули пользовательскую диаграмму. Вы также упаковали её и ознакомились с её структурой.

Результат

Теперь вы знаете, как использовать Helm для установки и обновления программного обеспечения, развёрнутого в кластере Kubernetes. Вы добавили репозитории чартов и узнали, почему они важны и как ArtifactHub может помочь вам их найти. Вы также создали новый настраиваемый чарт и узнали об изменениях релиза и о том, как при необходимости вернуться к предыдущей версии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться