Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Helm в Kubernetes: Продвинутая шаблонизация ман...

Helm в Kubernetes: Продвинутая шаблонизация манифестов

В программе:
🔴Рассмотрим создание ресурсов в Kubernetes с помощью YAML-файлов
🔴Обсудим шаблонизаторы ресурсов: Kustomize, Helm, CUE и Jsonnet
🔴Разберемся с терминологией Helm и основными командами
🔴Изучим внутреннее устройство одного helm-чарта
🔴Научимся искать и работать с готовыми helm-чартами с Artifact HUB

Спикер: Руслан Гайнанов, Тимлид DevOps-команды проекта «Осмакс» в ИТ-Холдинге Т1

Смотреть полностью:
https://www.youtube.com/watch?v=_jkcVqUED8s
https://vkvideo.ru/video-59405817_456239461

Ruslan Gainanov

January 29, 2025
Tweet

More Decks by Ruslan Gainanov

Other Decks in Technology

Transcript

  1. Helm в Kubernetes: Продвинутая шаблонизация манифестов Слёрм — учебный центр

    для IT специалистов СПИКЕР: Руслан Гайнанов ВЕДУЩИЙ: Виталий Лихачев
  2. Kubernetes База Спикер Руслан Гайнанов Главный инженер DevOps, T1 Иннотех

    • Больше 10 лет в IT • Спикер DevOops, Импульс, UDW • Тимлид команды DevOps на проекте Осмакс
  3. Kubernetes База План 1. Создание ресурсов через YAML 2. Технологии

    для генерации манифестов 3. Особенности технологии helm 4. Пример чарта и основные команды 5. Каталог публичных чартов ArtifactHUB
  4. Kubernetes База Манифесты k8s для простого микросервиса apiVersion: apps/v1 kind:

    Deployment metadata: name: app-backend spec: selector: matchLabels: app: app-backend template: metadata: labels: app: app-backend spec: containers: - name: app-backend image: app- backend:${TAG} ports: - containerPort: 8080 apiVersion: v1 kind: Service metadata: name: app-backend labels: name: app-backend spec: selector: name: app-backend type: ClusterIP ports: - port: 80 protocol: TCP targetPort: 8080 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-backend labels: name: app-backend spec: rules: - host: ${URL} http: paths: - pathType: Prefix path: / backend: service: name: app-backend port: number: 80
  5. Kubernetes База Манифесты k8s для простого микросервиса apiVersion: apps/v1 kind:

    Deployment metadata: name: app-backend spec: selector: matchLabels: name: app-backend template: metadata: labels: name: app-backend spec: containers: - name: app-backend image: app- backend:${TAG} ports: - containerPort: 8080 apiVersion: v1 kind: Service metadata: name: app-backend labels: name: app-backend spec: selector: name: app-backend type: ClusterIP ports: - port: 80 protocol: TCP targetPort: 8080 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-backend labels: name: app-backend spec: rules: - host: ${URL} http: paths: - pathType: Prefix path: / backend: service: name: app-backend port: number: 80
  6. Kubernetes База Манифесты k8s для простого микросервиса apiVersion: apps/v1 kind:

    Deployment metadata: name: app-backend spec: selector: matchLabels: name: app-backend template: metadata: labels: name: app-backend spec: containers: - name: app-backend image: app- backend:${TAG} ports: - containerPort: 8080 apiVersion: v1 kind: Service metadata: name: app-backend labels: name: app-backend spec: selector: name: app-backend type: ClusterIP ports: - port: 80 protocol: TCP targetPort: 8080 apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-backend labels: name: app-backend spec: rules: - host: ${URL} http: paths: - pathType: Prefix path: / backend: service: name: app-backend port: number: 80
  7. Kubernetes База Сложности и ограничения • Много однотипных файлов для

    каждого ресурса • Много дублируемых настроек • Сложно поддерживать при изменениях • Сложно использовать готовые наработки
  8. Kubernetes База Технологии для управления манифестами k8s Feature Helm Kustomize

    Jsonnet CUE/HCL Templating Yes No Yes Yes Overlays No Yes No No Packaging Yes No No No Validation hooks Yes No Yes Yes Rollbacks Yes No No No Native K8s integration No Yes No No Declarative nature Mostly imperative Yes No No Visibility and transparency Weak Strong Weak Weak
  9. Kubernetes База Что такое Helm? Helm — это самый известный

    менеджер пакетов и шаблонизатор для Kubernetes. • Основные преимущества: упаковка приложений в чарты • Абстракция компоненты для многократного использования • Мощный механизм шаблонов • Множество предопределенных чартов • Отличная поддержка community
  10. Kubernetes База Терминология Helm Template (шаблон) — абстрация над некоторым

    ресурсом Kubernetes (Pod, Service, Ingress, и т.п.) Chart (чарт) — набор связанных шаблонов для создания ресурсов некоторого приложения в Kubernetes примеры чарта — grafana, wordpress, nextcloud Repository (репозиторий) — HTTP- (или OCI-) сервер с определенной файловой структурой, содержащий один или несколько helm-чартов Release (релиз) — развернутый helm-чарт в Kubernetes Chart + Values = Release
  11. Kubernetes База Терминология Helm Шаблоны используют механизм go-template и его

    функции, например image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" Или объявленные функции из файлов хелперов (Helpers) # common/templates/_labels.tpl {{- define "common.labels.standard" -}} app.kubernetes.io/name: {{ include "common.names.name" . }} helm.sh/chart: {{ include "common.names.chart" . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} {{- end -}} Файл Values — содержит значения используемые по умолчанию в шаблонах
  12. Kubernetes База Пример helm-чарта приложения backend/ Chart.yaml values.yaml templates/ templates/deployment.yaml

    templates/service.yaml templates/ingress.yaml templates/NOTES.txt —————————————————————————————————— # Chart.yaml (application) name: backend type: application version: 1.0.0 Классический helm-чарт содержащий шаблоны манифестов создаваемых ресурсов Kubernetes для некоторого приложения с их параметрами (values). Для деплоя используется команда: helm install my-release ./backend Результат: NAME: my-release LAST DEPLOYED: Mon Aug 7 19:15:05 2023 NAMESPACE: default STATUS: deployed REVISION: 1
  13. Kubernetes База Основные команды — БАЗА # Add a helm

    repository to grab charts from helm repo add <repo-name> <repo-url> helm repo add podinfo https://stefanprodan.github.io/podinfo # Update repositories (similar to apt update) helm repo update # Install helm chart from repo helm install <chart-name> <repo-name> helm install my-podinfo podinfo/podinfo
  14. Kubernetes База Основные команды — Repositories # Add a helm

    repository to grab charts from helm repo add <repo-name> <repo-url> # Add the kubernetes stable charts helm repo add stable https://kubernetes-charts.storage.googleapis.com # Update repositories (similar to apt update) helm repo update # List all helm repositories helm repo list # Search for charts in your repositories helm search repo <search-term>
  15. Kubernetes База Основные команды — Install/Upgrade/Uninstall # Install/upgrade a release

    with chart defaults helm upgrade --install <release-name> <chart> # Install/upgrade a release and 'wait' for a success/failure helm upgrade --install <release-name> <chart> # Install a helm release and rollback on failure helm upgrade --install --atomic <release-name> <chart> # Install/upgrade a release with a values file helm upgrade --install --wait <release-name> <chart> -f <values-file> # Uninstall a helm release helm uninstall <release-name>
  16. Kubernetes База Основные команды — Rollback # Show release install

    history helm history <release-name> # Rollback a release to the last successful install and 'wait' helm rollback --wait <release-name> # Rollback to a specific version helm rollback --wait <release-name> <revision-number>
  17. Kubernetes База Основные команды — Troubleshooting # Show the kubernetes

    resources to be created for a release helm template <release-name> <chart> -f <values-file> # Show the existing kubernetes resources for a release helm get manifest <release> # Show the default values for a chart helm show values <chart> # Show the readme for a chart helm show readme <chart> # Pull down a chart locally to inspect it helm pull --untar <chart>
  18. Kubernetes База Основные команды — Creating # Create the starting

    resources for a new chart helm create <chart-name> # Lint your chart helm lint <chart-dir> # Show the generated kubernetes resources helm template <release-name> <chart-dir>
  19. Kubernetes База Итоги • Недостатки использования YAML-манифестов • Технологии Kustomize,

    Helm, Jsonnet, CUE, HCL • Особенности технологии helm: ◦ Шаблонизация Go ◦ Публикация и распространение ◦ Откат • Разбор чарта podinfo • Команды helm: repo, install, show, history, rollback • Работа c ArtifactHUB