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