Изучение Kubernetes Kustomize: упрощение управления конфигурацией

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

  1. Базовые и наложения.
    При настройке используется подход «база и наложения», при котором вы определяете базовую конфигурацию, а затем применяете наложения для настройки ее для различных сред или вариантов использования. Базовая конфигурация содержит общие настройки и ресурсы, а наложения обеспечивают конкретные настройки.

Пример:
Базовая конфигурация (base.yaml):

apiVersion: v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 3
  template:
    spec:
      containers:
        - name: myapp
          image: myapp:v1.0.0

Оверлей для производства (production-overlay.yaml):

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - base.yaml
  - production-patches.yaml
  1. Патчи.
    Настройка позволяет применять исправления к базовой конфигурации для внесения конкретных изменений. Исправления можно применять к отдельным ресурсам или глобально ко всем ресурсам в базе.

Пример:
Патч для производственной среды (production-patches.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  template:
    spec:
      containers:
        - name: myapp
          image: myapp:v2.0.0
  1. Подстановка переменных.
    Настройка позволяет заменять переменные в файлах YAML, что обеспечивает динамическую настройку на основе различных сред или вариантов использования.

Пример:
Базовая конфигурация с переменными (base.yaml):

apiVersion: v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: $(replicaCount)
  template:
    spec:
      containers:
        - name: myapp
          image: myapp:$(tag)

Файл настройки со значениями переменных (kustomization.yaml):

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - base.yaml
vars:
  - name: replicaCount
    objref:
      kind: ConfigMap
      name: myapp-config
      apiVersion: v1
    fieldref:
      fieldpath: data.replicaCount
  - name: tag
    objref:
      kind: ConfigMap
      name: myapp-config
      apiVersion: v1
    fieldref:
      fieldpath: data.tag
  1. Генераторы ConfigMap и секретов.
    Kustomize предоставляет генераторы для создания ConfigMap и секретов из файлов, что упрощает управление и внедрение данных конфигурации в ваши ресурсы.

Пример:
Файл настройки с генератором ConfigMap (kustomization.yaml):

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - base.yaml
configMapGenerator:
  - name: myapp-config
    files:
      - config.properties
  1. Исключение ресурсов.
    Настройка позволяет исключить определенные ресурсы из базовой конфигурации, обеспечивая детальный контроль над тем, что развертывается.

Пример:
Файл настройки с исключением ресурсов (kustomization.yaml):

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - base.yaml
  - overlays/*
  - !overlays/dev

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