Настройка Helm Charts для деплоя веб-приложения

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

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка Helm Charts для деплоя веб-приложения
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Настройка Helm Charts для деплоя веб-приложения

Helm — пакетный менеджер для Kubernetes. Helm Charts — параметризованные шаблоны k8s-манифестов. Позволяют деплоить в разные окружения с разными параметрами из одного набора шаблонов.

Структура Chart

myapp/
├── Chart.yaml
├── values.yaml         # дефолтные значения
├── values.prod.yaml    # production overrides
├── values.staging.yaml
└── templates/
    ├── deployment.yaml
    ├── service.yaml
    ├── ingress.yaml
    ├── hpa.yaml
    ├── configmap.yaml
    ├── secret.yaml
    └── _helpers.tpl

Chart.yaml

apiVersion: v2
name: myapp
description: My web application
type: application
version: 1.0.0
appVersion: "latest"

dependencies:
  - name: redis
    version: "18.x.x"
    repository: https://charts.bitnami.com/bitnami
    condition: redis.enabled

values.yaml

replicaCount: 2

image:
  repository: registry.example.com/myapp
  tag: "latest"
  pullPolicy: IfNotPresent

service:
  type: ClusterIP
  port: 80
  targetPort: 8080

ingress:
  enabled: true
  className: nginx
  host: example.com
  tls: true

resources:
  requests:
    cpu: 100m
    memory: 256Mi
  limits:
    cpu: 500m
    memory: 512Mi

autoscaling:
  enabled: false
  minReplicas: 2
  maxReplicas: 10
  targetCPUUtilizationPercentage: 70

env:
  APP_ENV: production
  APP_URL: https://example.com

secrets:
  APP_KEY: ""
  DB_PASSWORD: ""

redis:
  enabled: true
  auth: { enabled: false }

templates/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "myapp.fullname" . }}
  labels: {{ include "myapp.labels" . | nindent 4 }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels: {{ include "myapp.selectorLabels" . | nindent 6 }}
  template:
    metadata:
      labels: {{ include "myapp.selectorLabels" . | nindent 8 }}
      annotations:
        checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - containerPort: {{ .Values.service.targetPort }}
          envFrom:
            - configMapRef:
                name: {{ include "myapp.fullname" . }}
            - secretRef:
                name: {{ include "myapp.fullname" . }}
          resources: {{ toYaml .Values.resources | nindent 12 }}
          {{- if .Values.readinessProbe }}
          readinessProbe: {{ toYaml .Values.readinessProbe | nindent 12 }}
          {{- end }}

values.prod.yaml

replicaCount: 5

image:
  tag: "v1.2.3"

ingress:
  host: example.com

autoscaling:
  enabled: true
  maxReplicas: 20

resources:
  requests:
    cpu: 250m
    memory: 512Mi
  limits:
    cpu: 1000m
    memory: 1Gi

Установка и обновление

# Добавить зависимости
helm dependency update ./myapp

# Dry run — показать что будет создано
helm install myapp ./myapp \
    --namespace myapp \
    --values values.yaml \
    --values values.prod.yaml \
    --set image.tag=v1.2.3 \
    --dry-run --debug

# Установить
helm install myapp ./myapp \
    --namespace myapp --create-namespace \
    --values values.prod.yaml \
    --set secrets.APP_KEY="$APP_KEY" \
    --set secrets.DB_PASSWORD="$DB_PASSWORD"

# Обновить
helm upgrade myapp ./myapp \
    --namespace myapp \
    --values values.prod.yaml \
    --set image.tag=$NEW_TAG \
    --atomic \           # откат при ошибке
    --timeout 5m

# Откат
helm rollback myapp 1 --namespace myapp

# История
helm history myapp --namespace myapp

GitHub Actions

- name: Helm Deploy
  run: |
    helm upgrade --install myapp ./helm/myapp \
      --namespace myapp --create-namespace \
      --values helm/myapp/values.prod.yaml \
      --set image.tag=${{ github.sha }} \
      --set secrets.DB_PASSWORD=${{ secrets.DB_PASSWORD }} \
      --atomic --timeout 5m

Срок реализации

Разработка Helm Chart для типового приложения: 3–5 дней. Helm + ArgoCD GitOps: +2–3 дня.