Рубрики
Uncategorized

Введение в Kustomize — Как настроить объекты Kubernetes

Что такое Kustomize? Kustomize — это инструмент, используемый для настройки объектов Kubernetes в … Tagged with Kubernetes, Kustomize, DevOps, Yaml.

Что такое Kustomize?

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

Мы можем использовать Kustomize двумя способами: используйте автономную версию Kustomize или использовать kubectl. Kustomize является частью Kubectl с версии 1.14.

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

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

Мы увидим выше, основные особенности Kustomize.

Функции

1. SecretGenerator и ConfigMapGenerator

С помощью Kustomize мы можем генерировать секреты и конфигурации из литералов или файлов и развернуть изменения. Это возможно благодаря использованию SecretGenerator и ConfigMapGenerator.

Пример: использование Kustomize для генерации секрета Kubernetes для хранения сертификата TLS и файла ключа.

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

resources:
 - namespace.yaml

secretGenerator:
- name: my-tls
 files:
 - cert/tls.cert
 - cert/tls.key
 type: "kubernetes.io/tls"
 namespace: my-app

Пример: использование Kustomize для генерации секрета Kubernetes для хранения пароля базы данных.

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

secretGenerator:
- name: database-password
 literals:
   - password=pass

Для SecretGenerator, как мы видим, мы можем указать пространство имен, где мы хотим хранить секреты. Мы также можем указать тип секрета и добавить метки и аннотации.

Пример: сгенерировать ConfigMap YAML:

# config-file.cnf
character-set-server=utf8mb4
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: database-config-file
  files:
  - config-file.cnf

2. Контейнерное изображение

Kustomize позволяет нам переопределить имя и версию контейнера. Мы можем указать тег или дайджест для версии контейнера.

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  template:
    spec:
      containers:
      - name: app-one
        image: app-one:latest
      - name: app-two
        image: app-two:latest
      - name: app-three
        image: app-three:latest
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

images:
- name: app-one
  newName: main-application
- name: app-two
  newTag: 1.0.1
- name: app-three
  digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3

resources:
- deployment.yaml

3. Пространства имен и имена

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

Если пространство имен уже установлено, Kustomize будет переопределить его.

Пример: установить пространство имен с помощью Kustomize

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: backend-services
resources:
- deployment.yaml

Пример: Сделает значение к именам всех ресурсов и ссылок.

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namePrefix: staging-

resources:
- deployment.yaml

Пример: добавляет значение к именам всех ресурсов и ссылок

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

nameSuffix: -beta

resources:
- deployment.yaml

4. Установить этикетки и аннотации

Мы можем использовать Kustomize, чтобы установить этикетки и аннотации для группы ресурсов. Для этого используйте Commonlabels и Commonannations.

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
  environment: staging
commonAnnotations:
  imageregistry: "https://hub.docker.com/"
resources:
- deployment.yaml

5. Базы

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

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

# kustomization.yaml
bases:
# GitHub URL
- github.com/example/kustomize/bases/staging/?ref=v1.1.1

7. Наложения

Наложение — это каталог с кустамиацией.

8. Встроенные патчи

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

Есть 3 способа исправления файла Kustomization:

  • Стратегический патч слияния
# kustomization.yaml
patchesStrategicMerge:
- |-
  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: deploy
  spec:
    template:
      spec:
        containers:
        - name: nginx
          image: nginx:1.20.0-alpine
        - $patch: replace
  • Json patch
# kustomization.yaml
patchesJSON6902:
- target:
    group: apps
    version: v1
    kind: Deployment
    name: deploy
  patch: |-
    - op: replace
      path: /spec/template/spec/containers/0/image
      value: nginx:1.20.0-alpine
  • Список патчей

Вывод

Есть много способов настройки объектов Kubernetes, и цель этого поста — представить Kustomize и показать, как настроить объекты Kubernetes с файлами Kustomization.

Оригинал: «https://dev.to/katiatalhi/introduction-to-kustomize-how-to-customize-kubernetes-objects-3e08»