
Привет, Хабр! ?
Если вы когда-либо сталкивались с вызовами управления множественными и сложными Kubernetes конфигурациями, то Kustomize — это то, что может очень круто упростить вашу жизнь.
Чем больше масштаб работы Kubernetes, тем более витиеватыми становятся конфигурации. И здесь очень помогает Kustomize, он позволяет «конфигурировать конфигурации», управлять сложностью и делать процесс более понятным.
База
Ресурсы
Ресурсы – это YAML-файлы, которые описывают объекты Kubernetes, такие как Deployments, Services, ConfigMaps и т.д. Они составляют основную часть для работы kustomize.
Ресурсы обычно организованы в файловой структуре проекта. В целом их можно разделить на папки и подпапки, организуя структуру таким образом, чтобы она соответствовала каким либо потребностям
Например, может быть папка base, содержащая базовые конфигурации для всех сред, и папки overlays, в которых находятся специфические настройки для dev, staging и prod сред.
Каждый ресурс определяется в отдельном YAML файле. Эти файлы содержат все необходимые настройки объекта.
Допустим, есть файл deployment.yaml, который описывает Deployment приложения. В этом файле определяются такие параметры, как количество реплик, образ контейнера, порты и прочие настройки, специфичные для деплоймента.
Чтобы работать с этими ресурсами в Kustomize, нужен kustomization.yaml файл. В этом файле указывается какие ресурсы должны быть загружены и как они должны быть модифицирован генераторов:
-
ConfigMapGenerator и SecretGenerator — два наиболее часто используемых генератора. Позволяют создавать ConfigMaps и Secrets из файлов, директорий или литералов.
-
Custom Generators также позволяет создавать собственные генераторы, что открывает двери для еще большей гибкости и адаптивности. Вы можете написать сценарий или программу, которая генерирует нужные ресурсы на основе ваших уникальных требований.
Для использования генератора, нужно указать его в файле kustomization.yaml. Тут определеятся тип генератора и его входные данные. Kustomize затем автоматически обработает эти инструкции и сгенерирует соответствующие ресурсы.
Работа с Kustomize
Для нужен kubectl , Kustomize работает в тандеме с kubectl .
Способы установки:
-
Через kubectl (начиная с версии 1.14): если у вас установлен Kubernetes 1.14 или выше, у вас уже есть Kustomize! Он встроен прямо в
kubectl. -
Через Homebrew (для macOS): если вы используете ОС мака, просто запустите
brew install kustomize. -
Можно также скачать бинарный файл 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. Регистрация доступна всем желающим.
ссылка на оригинал статьи https://habr.com/ru/articles/788046/
Добавить комментарий