Поиск по сайту:

Как приступить к написанию диаграмм Helm для ваших приложений Kubernetes


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

В этой статье мы покажем вам, как начать работу с Helm, написав диаграмму для простого приложения. «Диаграмма» концептуально похожа на «пакет» манифестов Kubernetes, которым Helm позволяет управлять как единой сущностью.

Что такое диаграмма руля?

Диаграммы Helm применяют знакомую модель управления пакетами, встречающуюся в операционных системах и языках программирования, к приложениям, работающим в кластере Kubernetes. Диаграмма Helm может иметь зависимости и дочерние элементы; все эти компоненты автоматически запускаются в вашем кластере при установке диаграммы верхнего уровня.

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

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

Установка шлема

Helm распространяется в виде простого бинарного файла через страницу GitHub Releases проекта. Загрузите правильный дистрибутив для вашей системы, сделайте его исполняемым и переместите в папку в вашем PATH.

Helm также присутствует в репозиториях пакетов большинства популярных дистрибутивов Linux. Вы можете найти его в Homebrew для macOS, а также в Chocolatey и Scoop для Windows.

После завершения установки запустите helm version, чтобы проверить, все ли работает:

$ helm version  --template='Version: {{.Version}}'
Version: v3.8.1

Команды Helm нацелены на ваше активное подключение к кластеру Kubernetes, используемое Kubectl. Выбранный вами файл Kubeconfig и контекст будут использоваться для всех команд Helm. Вы можете сослаться на другой файл конфигурации с помощью стандартной переменной среды KUBECONFIG или механизма флагов --kubeconfig.

Создание диаграммы руля

Теперь вы можете приступить к созданию диаграммы Helm для своего приложения. Используйте команду helm create, чтобы создать новую диаграмму в рабочем каталоге:

$ helm create my-app-chart

Содержимое диаграммы будет храниться в каталоге my-app-chart. Давайте проверим, что в нем содержится:

$ ls my-app-chart
Chart.yaml  charts  templates   values.yaml

Есть два файла верхнего уровня и два дополнительных подкаталога. Вот для чего используется каждый ресурс:

  • Chart.yaml – манифест диаграммы Helm, определяющий свойства метаданных, включая ее имя и версию.
  • values.yaml — в этом файле хранятся значения по умолчанию для переменных, на которые вы можете ссылаться в своей диаграмме. Установленные здесь значения можно переопределить с помощью флагов CLI при установке диаграммы.
  • templates — каталог шаблонов содержит манифесты объектов Kubernetes вашей диаграммы. Установка диаграммы применит все эти манифесты к вашему кластеру. Сюда можно поместить любой действительный манифест Kubernetes YAML; вы также можете использовать дополнительные функции, такие как ссылки на переменные, определенные в вашем файле values.yaml. Мы рассмотрим эту возможность ниже.
  • charts — каталог charts содержит другие диаграммы Helm, от которых зависит эта. Он используется для настройки сложных взаимосвязей родительско-дочерних диаграмм. Мы не будем рассматривать эту функцию в этой статье, поэтому вы можете удалить каталог, если он вам не нужен.

Диаграмма Helm по умолчанию предварительно настроена для развертывания экземпляра веб-сервера NGINX. Манифесты Kubernetes в каталоге templates создают различные составляющие компоненты, такие как Deployment, Service и Ingress. Приложение настраивается с помощью переменных, определенных в values.yaml; здесь вы найдете настройки для тега изображения, порта службы и хоста Ingress, среди прочего:

$ cat values.yaml
# Default values for my-app-chart.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: ""
...

Установка диаграммы

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

$ helm install my-app .
NAME: foo
LAST DEPLOYED: Tue Mar 29 14:47:48 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
NOTES:
...

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

Вы получите некоторый вывод терминала, описывающий установленную версию. Раздел ПРИМЕЧАНИЯ содержит информацию, предоставленную диаграммой.

Чтобы переопределить переменные values.yaml, укажите один или несколько экземпляров флага --set:

$ helm install my-app . --set replicaCount=3 --set image.tag=1.20

В этом примере будут развернуты три реплики контейнера с образом nginx:1.20. Вы можете проверить это, перечислив поды в вашем кластере с помощью Kubectl:

$ kubectl get pods
NAME                                   READY   STATUS    RESTARTS   AGE
my-app-my-app-chart-6d6577749c-2qbhb   1/1     Running   0          61s
my-app-my-app-chart-6d6577749c-wdmgv   1/1     Running   0          44s
my-app-my-app-chart-6d6577749c-x5wp7   1/1     Running   0          40s

Обновление, получение и удаление выпусков диаграмм

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

$ helm install my-app . --set replicaCount=5
Error: INSTALLATION FAILED: cannot re-use a name that is still in use

Повторение команды install не работает. Чтобы применить изменения к уже развернутой диаграмме, используйте команду upgrade. Это создает новый «выпуск» внутри кластера.

$ helm upgrade my-app . --set replicaCount=5
Release "my-app" has been upgraded. Happy Helming!

Вы можете перечислить все развернутые выпуски диаграммы в вашем кластере с помощью helm list:

$ helm list
NAME    NAMESPACE   REVISION    UPDATED                                 STATUS      CHART               APP VERSION
my-app  default     2           2022-03-30 15:09:34.370758719 +0100 BST deployed    my-app-chart-0.1.0  1.16.0

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

Чтобы удалить выпуск и уничтожить его объекты Kubernetes, передайте его имя команде uninstall:

$ helm uninstall my-app
release "my-app" uninstalled

Написание собственной диаграммы с нуля

Теперь давайте посмотрим, как написать базовую диаграмму с нуля. Создайте новый каталог для вашего графика; мы называем нашу cloudsavvy-chart. Добавьте внутрь файл Chart.yaml со следующим содержимым:

apiVersion: v2
name: cloudsavvy-chart
description: An example Helm chart.
type: application
version: 0.1.0
appVersion: 1.1.0

Поле type обычно должно иметь значение application. Другой поддерживаемый тип — библиотека. Функциональные возможности библиотечных диаграмм могут быть включены в качестве зависимости от других диаграмм. Сами по себе они не содержат никаких шаблонов Kubernetes.

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

Затем создайте файл values.yaml с несколькими простыми переменными:

deploymentName: cloudsavvy
image: nginx:latest
replicas: 1

Эти переменные будут указаны в шаблоне диаграммы. Добавьте этот шаблон сейчас как templates/deployment.yaml. Наша базовая диаграмма будет развертывать один модуль, поэтому у него будет только один файл шаблона. В реальной ситуации рекомендуется создавать отдельные файлы манифеста для каждого из компонентов вашего приложения.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Values.deploymentName }}-deployment
spec:
  selector:
    matchLabels:
      app: {{ .Values.deploymentName }}
  replicas: {{ .Values.replicas }}
  template:
    metadata:
      labels:
        app: {{ .Values.deploymentName }}
    spec:
      containers:
        - name: {{ .Values.deploymentName }}
          image: {{ .Values.image }}

Развертывание использует значения из values.yaml для настройки ссылки на изображение и количества реплик. Переменная deploymentName используется везде, чтобы любые будущие изменения можно было вносить в одном месте. На поля в values.yaml ссылаются с использованием синтаксиса {{ .Values.FIELD_NAME }}.

Теперь используйте Helm для установки графика:

$ helm install cloudsavvy-app . --set replicas=3
NAME: cloudsavvy-app
LAST DEPLOYED: Tue Mar 29 15:43:21 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Флаг --set переопределяет значение по умолчанию replicas, установленное в values.yaml. После применения переопределений Helm вставляет разрешенные значения в нужные места в ваших шаблонах YAML. Затем окончательные манифесты Kubernetes применяются к вашему кластеру. Теперь вы можете убедиться, что три контейнера запущены, используя Kubectl для получения списка подов вашего кластера.

$ kubectl get pods
NAME                                     READY   STATUS              RESTARTS   AGE
cloudsavvy-deployment-7b975bd985-5r7dc   0/1     ContainerCreating   0          15s
cloudsavvy-deployment-7b975bd985-bpbkm   0/1     ContainerCreating   0          15s
cloudsavvy-deployment-7b975bd985-jzb5q   0/1     ContainerCreating   0          15s

Краткое содержание

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

В этом руководстве мы объяснили основы функциональности Helm и показали, как вы можете создавать свои собственные простые диаграммы для своих приложений. Мы едва коснулись того, чего может достичь Helm — после того, как вы написали диаграмму, вы можете отправить ее в репозиторий для использования другими, добавить другие диаграммы в качестве зависимостей и построить более сложные диаграммы, используя функции, конвейеры, и выражения потока управления. Если вы потратите время на изучение Helm, ваши развертывания Kubernetes станут более гибкими, мощными и пригодными для повторного использования.




Все права защищены. © Linux-Console.net • 2019-2024