Как управлять k8s yaml манифестами для нескольких окружений с помощью kustomize?


Что такое Kustomize?

Kustomize — это менеджер конфигурации CLI для объектов Kubernetes, который использует многослойность для сохранения базовых настроек приложения. Это достигается путем наложения декларативных артефактов YAML для переопределения настроек по умолчанию без внесения изменений в исходный манифест. Kustomize также интегрирован с kubectl.

Kustomize знает о ресурсах kubernetes и их полях и не является простым текстовым шаблоном, как другие инструменты.

С помощью Kustomize вы можете повторно использовать один из базовых файлов во всех окружениях (development, staging, production и т.д.) и накладывать спецификации для каждого из этих окружений.

Kustomize также можно использовать с helm и CD решениями, такими как argo CD.

Чтобы установить kustomize, проверьте —> https://kubectl.docs.kubernetes.io/installation/kustomize/.

как работает kustomize?

kustomization.yaml

Каждый каталог содержит файл kustomization.yaml, который по сути является списком ресурсов или манифестов, описывающих, как генерировать или преобразовывать объекты Kubernetes.

С помощью Kustomize вы можете конфигурировать необработанные, свободные от шаблонов файлы YAML, что позволяет легко изменять настройки/аннотации между развертыванием и производством.

Kustomize предоставляет 2 метода применения патчей,

  1. patchesStrategicMerge
  2. patchesJson6902

patchesStrategicMerge является наиболее распространенной и простой в использовании стратегией слияния. Чтобы узнать больше о патчах, ознакомьтесь —> https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/#customizing.

базовая папка

В папке base хранятся общие ресурсы, такие как deployment.yaml, service.yaml и configmap.yaml. Она содержит начальный манифест и включает пространство имен и метку для ресурсов.

папка overlays

В папке overlays находятся специфические для среды оверлеи, которые используют патчи, позволяющие определять YAML-файлы и накладывать их поверх базовых для любых изменений.

Пример структуры,
Создание базового ресурса configmap и изменение переменной configmap для staging и production. Для получения полноценного примера проверьте —> https://github.com/sureshdsk/kustomize-k8s-example.

kustomize-k8s
├── base
│   ├── configmap.yaml
│   ├── kustomization.yaml
└── overlays
    ├── production
    │   ├── configmap-patch.yaml
    │   ├── kustomization.yaml
    └── staging
        ├── configmap-patch.yaml
        ├── kustomization.yaml
Вход в полноэкранный режим Выход из полноэкранного режима

base/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: django-configmap
data:
  DJANGO_AUTH_PUBLIC_URI: "http://dj.192.168.0.139.sslip.io"
  DEBUG: "True"
Войти в полноэкранный режим Выход из полноэкранного режима

base/kustomization.yaml

# common labels to be added on all manifests
commonLabels:
  app: demo

# resources that needs to be kustomized
resources:
  - configmap.yaml

Ввести полноэкранный режим Выход из полноэкранного режима

Теперь изменим значение DJANGO_AUTH_PUBLIC_URI для среды staging.

overlays/staging/configmap-patch.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: django-configmap
data:
  DJANGO_AUTH_PUBLIC_URI: "http://staging.192.168.0.139.sslip.io"
Вход в полноэкранный режим Выход из полноэкранного режима

overlays/staging/kustomization.yaml

# prefix to be added to name of the resource
namePrefix: staging-
commonLabels:
  env: staging
# directory contains base yaml
bases:
  - ../../base
# patch strategy
patchesStrategicMerge:
  - configmap-patch.yaml

Ввести полноэкранный режим Выход из полноэкранного режима

Клонирование репозитория

git clone git@github.com:sureshdsk/kustomize-k8s-example.git
cd kustomize-k8s-example
Войти в полноэкранный режим Выйти из полноэкранного режима

Предварительный просмотр и применение манифестов

Мы можем просмотреть результат kustomize, используя команду kustomize build.

# preview output
kustomize build overlays/staging

# apply output to kubernetes
kustomize build overlays/staging | kubectl apply -f -

Войти в полноэкранный режим Выход из полноэкранного режима

Мы также можем использовать kustomize под командой kubectl kustomize как плагин kubectl.

# preview output
kubectl kustomize overlays/staging

# apply output to kubernetes
kubectl apply -k overlays/staging
Вход в полноэкранный режим Выход из полноэкранного режима

Ресурсы

  • Веб-сайт Kustomize
  • учебник по kubernetes
  • Argo CD — Kustomize
  • Kustomize — диаграмма Helm

Оцените статью
Procodings.ru
Добавить комментарий