Что такое 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»