Добавить в корзинуПозвонить
Найти в Дзене
Из сисадмина в DevOps`а

Kubernetes, создание и управление Helm Charts - K8s. Часть 6

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

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