Как стать автором
Обновить
635.31
OTUS
Цифровые навыки от ведущих экспертов

Kustomize в Kubernetes

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров6.2K

Привет, Хабр! ?

Если вы когда-либо сталкивались с вызовами управления множественными и сложными Kubernetes конфигурациями, то Kustomize — это то, что может очень круто упростить вашу жизнь.

Чем больше масштаб работы Kubernetes, тем более витиеватыми становятся конфигурации. И здесь очень помогает Kustomize, он позволяет "конфигурировать конфигурации", управлять сложностью и делать процесс более понятным.

База

Ресурсы

Ресурсы – это YAML-файлы, которые описывают объекты Kubernetes, такие как Deployments, Services, ConfigMaps и т.д. Они составляют основную часть для работы kustomize.

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

Например, может быть папка base, содержащая базовые конфигурации для всех сред, и папки overlays, в которых находятся специфические настройки для dev, staging и prod сред.

Каждый ресурс определяется в отдельном YAML файле. Эти файлы содержат все необходимые настройки объекта.

Допустим, есть файл deployment.yaml, который описывает Deployment приложения. В этом файле определяются такие параметры, как количество реплик, образ контейнера, порты и прочие настройки, специфичные для деплоймента.

Чтобы работать с этими ресурсами в Kustomize, нужен kustomization.yaml файл. В этом файле указывается какие ресурсы должны быть загружены и как они должны быть модифицирован генераторов:

  1. ConfigMapGenerator и SecretGenerator - два наиболее часто используемых генератора. Позволяют создавать ConfigMaps и Secrets из файлов, директорий или литералов.

  2. Custom Generators также позволяет создавать собственные генераторы, что открывает двери для еще большей гибкости и адаптивности. Вы можете написать сценарий или программу, которая генерирует нужные ресурсы на основе ваших уникальных требований.

Для использования генератора, нужно указать его в файле kustomization.yaml. Тут определеятся тип генератора и его входные данные. Kustomize затем автоматически обработает эти инструкции и сгенерирует соответствующие ресурсы.

Работа с Kustomize

Для нужен kubectl , Kustomize работает в тандеме с kubectl .

Способы установки:

  1. Через kubectl (начиная с версии 1.14): если у вас установлен Kubernetes 1.14 или выше, у вас уже есть Kustomize! Он встроен прямо в kubectl.

  2. Через Homebrew (для macOS): если вы используете ОС мака, просто запустите brew install kustomize.

  3. Можно также скачать бинарный файл Kustomize с GitHub. Для этого перейдите на релизы Kustomize, выберите нужную версию и скачайте соответствующий вашей ОС файл.

Создание базовой структуры

Создаем директорию для конфигураций: например, mkdir ~/kustomize/base.

В папке base создаются базовые YAML-файлы для Kubernetes, например, deployment.yaml и service.yaml. Файлики будут описывать приложение и сервисы, которые оно использует.

deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app-image
        ports:
        - containerPort: 80

Пример service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

В той же папке base создаем файл kustomization.yaml. Здесь указываем какие ресурсы будут использоваться, а также добавляем ссылки на YAML-файлы, например:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml

#  ConfigMap
configMapGenerator:
  - name: my-app-config
    files:
      - configs/config.properties

# секреты из литераллов
secretGenerator:
  - name: my-app-secret
    literals:
      - password=supersecret

patchesStrategicMerge:
  - patch.yaml

commonLabels:
  app: my-app

Можно запустить kustomize build ~/kustomize/base для просмотра сгенерированной конфигурации. Если все выглядит ок, можно применить эту конфигурацию в Kubernetes, используя kubectl apply -k ~/kustomize/base.

Overlays

Overlays позволяют модифицировать и дополнять базовую конфигурацию для разных сред

Структура директорий

base: Здесь хранится основная конфигурация.

overlays: В этой директории находятся поддиректории для каждой среды (например, dev, staging, production).

Создание Overlays

В каждой поддиректории среды (dev, staging, production) создается свой собственный файл kustomization.yaml. В каждом kustomization.yaml указываются пути к ресурсам в base и добавляются специфические для среды изменения или ресурсы.

Пример overlays/dev/kustomization.yaml:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base

patchesStrategicMerge:
  - dev_patch.yaml

Чтобы применить конфигурацию для определенной среды, можно юзать команду kubectl apply -k overlays/dev/, тут для dev среды.

Patches в Kustomize

Patches позволяют изменять или дополнять ресурсы, определенные в base или overlays.

Создаем файлы с патчами для каждой среды, например, dev_patch.yaml, staging_patch.yaml. В этих файлах определяются изменения, которые нужно внести в ресурсы.

Пример dev_patch.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 2

С Kustomize можно легко адаптировать конфигурацию приложения под разные окружения.

Про практические инструменты Kubernetes подробно рассказывают эксперты из OTUS в рамках онлайн-курсов. Например, уже скоро пройдут бесплатные уроки про архитектуру решений на основе Kubernetes и Service mesh. Регистрация доступна всем желающим.

Теги:
Хабы:
Всего голосов 11: ↑7 и ↓4+6
Комментарии0

Публикации

Информация

Сайт
otus.ru
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
OTUS

Истории