1. Цели
Kustomize — это инструмент, предлагающий способ настройки конфигурации приложений без использования шаблонов, что упрощает использование готовых приложений. Он доступен как отдельная утилита и может быть встроен в kubectl с помощью kubectl apply -k или использоваться как автономный CLI. Для получения дополнительной информации посетите сайт kustomize.io .
В этом руководстве вы познакомитесь с некоторыми основными концепциями Kustomize и научитесь использовать его для управления вариациями в приложениях и средах.
Вы будете:
- Используйте клиент командной строки kustomize.
- Переопределить общие элементы
- Исправление больших YAML-структур
- Используйте несколько слоев наложения.
2. Подготовка рабочего места
- Откройте редактор Cloud Shell, перейдя по следующей ссылке.
https://ide.cloud.google.com
- В окне терминала создайте рабочую директорию для этого урока.
mkdir kustomize-lab
- Перейдите в нужную директорию и выберите рабочую область IDE.
cd kustomize-lab && cloudshell workspace .
3. Использование клиента командной строки kustomize
Мощь Kustomize заключается в возможности наложения и изменения базовых YAML-файлов Kubernetes с помощью пользовательских значений. Для этого Kustomize требует наличия базового файла с инструкциями о том, где находятся файлы и что нужно переопределить. Kustomize входит в экосистему Kubernetes и может быть запущен различными способами.
В этом разделе вы создадите базовую конфигурацию kustomize и обработаете файлы с помощью автономного клиента командной строки kustomize.
- Для начала создайте папку для хранения базовых конфигурационных файлов.
mkdir -p chat-app/base
- Создайте простой файл развертывания Kubernetes
deployment.yamlв базовой папке.
cat <<EOF > chat-app/base/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`metadata:`
`name: chat-app`
`spec:`
`containers:`
`- name: chat-app`
`image: chat-app-image`
EOF
- Создайте базовый файл
kustomization.yaml
Kustomize ищет в качестве точки входа файл с именем kustomization.yaml. Этот файл содержит ссылки на различные базовые и переопределяющие файлы, а также конкретные значения переопределений.
Создайте файл kustomization.yaml , который будет ссылаться на файл deployment.yaml в качестве базовых ресурсов.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- Выполните команду kustomize в базовой папке. В результате будут созданы YAML-файлы развертывания без изменений, что и ожидаемо, поскольку вы еще не добавили никаких вариантов.
kustomize build chat-app/base
Этот автономный клиент можно использовать в сочетании с клиентом kubectl для непосредственного применения выходных данных, как показано в следующем примере. При этом выходные данные команды сборки передаются непосредственно в команду kubectl apply.
(Не выполнять — приведено только для справки)
kustomize build chat-app/base | kubectl apply -f -
Этот метод полезен, если требуется определенная версия клиента kustomize.
В качестве альтернативы команду kustomize можно выполнить с помощью инструментов, встроенных в сам kubectl. Как показано в следующем примере.
(Не выполнять — приведено только для справки)
kubectl apply -k chat-app/base
4. Переопределение общих элементов
Теперь, когда ваше рабочее пространство настроено и вы убедились, что kustomize работает, пришло время переопределить некоторые базовые значения.
Изображения, пространства имен и метки очень часто настраиваются индивидуально для каждого приложения и среды. Поскольку они часто изменяются, Kustomize позволяет объявлять их непосредственно в файле kustomize.yaml , устраняя необходимость создания множества патчей для этих распространенных сценариев.
Этот метод часто используется для создания конкретного экземпляра шаблона. Один базовый набор ресурсов теперь можно использовать для нескольких реализаций, просто изменив имя и пространство имен.
В этом примере вы добавите пространство имен, префикс имени и несколько меток в файл kustomization.yaml .
- Обновите файл
kustomization.yaml, добавив в него общие метки и пространства имен.
Скопируйте и выполните следующие команды в терминале.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- Выполните команду сборки.
На этом этапе выполнения сборки видно, что полученный YAML-файл теперь содержит пространство имен, метки и префиксы имен как в определениях сервиса, так и в определениях развертывания.
kustomize build chat-app/base
Обратите внимание, что в выходных данных содержатся метки и пространства имен, которых нет в YAML-файле развертывания. Также обратите внимание на то, как имя было изменено с chat-app на my-chat-app
(Вывод не копировать)
kind: Deployment
metadata:
labels:
`app: my-app`
name: my-chat-app
namespace: my-namespace
5. Исправление больших YAML-структур
Kustomize также предоставляет возможность применять патчи, которые накладываются поверх базовых ресурсов. Этот метод часто используется для обеспечения вариативности между приложениями и средами.
На этом этапе вы создадите варианты окружения для одного и того же приложения, использующие одни и те же базовые ресурсы.
- Для начала создайте папки для различных сред.
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- Создайте патч сцены с помощью следующей команды.
cat <<EOF > chat-app/dev/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: dev`
EOF
- Теперь напишите патч для продакшена с помощью следующей команды.
cat <<EOF > chat-app/prod/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: chat-app`
`env:`
`- name: ENVIRONMENT`
`value: prod`
EOF
Обратите внимание, что в приведенных выше патчах отсутствует имя образа контейнера. Это значение указано в файле base/deployment.yaml, созданном вами на предыдущем шаге. Однако эти патчи содержат уникальные переменные среды для разработки и производства.
- Реализуйте YAML-файлы kustomize для базового каталога.
Перепишите базовый файл kustomization.yaml, удалите пространство имен и префикс имени, поскольку это всего лишь базовая конфигурация без каких-либо изменений. Эти поля будут перенесены в файлы окружения чуть позже.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- Реализуйте YAML-файлы kustomize для каталога dev.
Теперь реализуйте варианты для среды разработки и продакшена, выполнив следующие команды в терминале.
cat <<EOF > chat-app/dev/kustomization.yaml
bases:
- ../base
namespace: dev
nameprefix: dev-
commonLabels:
env: dev
patches:
- deployment.yaml
EOF
Обратите внимание на добавление раздела patches : в файл. Это указывает на то, что kustomize должен накладывать эти файлы поверх базовых ресурсов.
- Реализуйте YAML-файлы Kustomize для каталога prod.
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- Запустите kustomize для объединения файлов.
После создания базового файла и файла окружения вы можете запустить процесс kustomize для внесения изменений в базовые файлы.
Выполните следующую команду в режиме разработки, чтобы увидеть результат объединения.
kustomize build chat-app/dev
Обратите внимание, что выходные данные содержат объединенные результаты, такие как метки из базовой и тестовой конфигураций, а также имя образа контейнера из базовой конфигурации и переменную среды из папок разработки.
6. Использование нескольких слоев наложения
Во многих организациях есть команда, которая помогает командам разработчиков приложений и управляет платформой. Зачастую этим командам необходимо включить определенные детали, которые должны быть учтены во всех приложениях во всех средах, например, агент логирования.
В этом примере вы создадите shared-kustomize и ресурсы, которые будут включены всеми приложениями независимо от среды их развертывания.
- Создайте папку shared-kustomize.
mkdir shared-kustomize
- Создайте простой файл
deployment.yamlв общей папке.
cat <<EOF > shared-kustomize/deployment.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
name: app
spec:
template:
`spec:`
`containers:`
`- name: logging-agent`
`image: logging-agent-image`
EOF
- Создайте файл kustomization.yaml в общей папке.
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- Добавьте ссылку на папку shared-kustomize в ваше приложение.
Поскольку вы хотите, чтобы папка shared-kustomize была базовой для всех ваших приложений, вам потребуется обновить файл chat-app/base/kustomization.yaml , чтобы использовать shared-kustomize в качестве базовой. Затем внесите изменения в соответствующий файл deployment.yaml. После этого изменения будут внесены и в папки environment.
Скопируйте и выполните следующие команды в терминале.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- ../../shared-kustomize
commonLabels:
app: chat-app
patches:
- deployment.yaml
EOF
- Запустите kustomize и просмотрите результаты объединения для разработчиков.
kustomize build chat-app/dev
Обратите внимание, что выходные данные содержат объединенные результаты из базового приложения, среды приложения и папок shared-kustomize . В частности, в разделе containers вы можете увидеть значения из всех трех мест.
(Вывод не копировать)
<pre>
`containers:`
`- env:`
`- name: ENVIRONMENT`
`value: dev`
`name: chat-app`
`- image: image`
`name: app`
`- image: logging-agent-image`
`name: logging-agent`
</pre>