Сегодня вашему вниманию представляю заключительную часть материала про основы 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)