Сегодня вашему вниманию представляю заключительную часть материала про основы Kubernetes (K8s), а именно про Helm Charts.

Что такое Helm и зачем он нам

Если вы уже успели поработать с Kubernetes, то вы уже представляете себе, насколько много приходится писать YAML файлов. Так вот, Helm позволит вам сильно упростить это!

Helm позволяет создавать единые шаблоны для приложений.

Вспомним как мы делали в предыдущих уроках

Под каждое приложение мы создавали отдельные YAML файлы, в которых были жестко указаны имэйджи, порты и т.д. И для установки нам приходилось запускать каждый раз эти файлы командой:

kubectl apply -f FILE_NAME.yaml

Структура Helm Chart

Теперь давайте посмотрим, как выглядит структура Helm.

Исходники вы можете посмотреть в моем GitHub`е.

Для описания структуры Helm Chart нам потребуются следующие файлы: Chart.yaml, values.yaml и в папке templates нужны будут deployment.yaml, service.yaml. И так, по порядку.

templates/deployment.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: { { .Release.Name } }-deployment

  labels:

    app: { { .Release.Name } }-deployment

spec:

  replicas: { { .Values.replicaCount } }

  selector:

    matchLabels:

      project: { { .Release.Name } }

  template:

    metadata:

      labels:

        project: { { .Release.Name } }   # Сервисы буду применяться к подам с таким лейблом

    spec:

      containers:

        – name: { { .Release.Name } }-web

          image: { { .Values.container.image } }

          ports:

            – containerPort: PORT_NUM

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

templates/service.yaml

apiVersion: v1

kind: Service

metadata:

  name: { { .Release.Name } }-service

  labels:

    env: ENV_NAME

    owner: AUTHOR_NAME

spec:

  selector:

    project: { { .Release.Name } }  # Выбор подов с этим лейблом

  ports:

    – name: { { .Release.Name } }-listener

      protocol: PROTOCOL

      port: PORT_NUM  # Порт на Load Balancer

      targetPort: PORT_NUM  # Порт на подах

  type: SERVICE_TYPE

Здесь все также, параметры заменены на ссылки на переменные.

values.yaml

# Значения по умолчанию для нашего Helm Chart

container:

  image: IMAGE_NAME

replicaCount: NUM_OF_REPLICAS

Chart.yaml

apiVersion: v2

name: CHART_NAME

description: CHART_DESCRIPTION

type: application

version: 0.1.0  # Версия Helm Chart

appVersion: “1.2.3”  # Версия приложения

keywords:

  – apache

  – http

  – https

maintainers:

  – name: AUTHOR_NAME

    email: AUTHOR_EMAIL

    url: AUTHOR_URL

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

Как использовать Helm Chart

Если вам необходимо просто задеплоить все что указано в нашем Helm, то используйте команду:

helm install HELM_NAME PATH_TO_HELM_DIR/

Если вам необходимо переназначить переменные при деплое, то создаете YAML файл, по аналогии с values.yaml (но с новыми значениями) и выполняете команду:

helm install HELM_NAME PATH_TO_HELM_DIR/ -f FILE_NAME.yaml

Если при деплое вам нужно заменить, например одно значение, то это можно сделать так:

helm install HELM_NAME PATH_TO_HELM_DIR/ --set PARAMETR_NAME=PARAMETR_VALUE

Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)

От DevOps

DevOps or not...