Масштабирование с помощью настройки

1. Цели

Kustomize — это инструмент, который предоставляет возможность настройки конфигурации приложения без шаблонов, упрощая использование готовых приложений. Он доступен как отдельная утилита и встроен в kubectl, поэтому kubectl apply -k of может использоваться как отдельный CLI. Дополнительную информацию можно найти на сайте kustomize.io .

В этом руководстве вы познакомитесь с некоторыми основными концепциями Kustomize и будете использовать их для управления изменениями в приложениях и средах.

Вы будете:

  • Используйте настроенный клиент командной строки
  • Переопределить общие элементы
  • Исправление больших структур yaml.
  • Используйте несколько слоев наложений

2. Подготовка рабочего места

  1. Откройте редактор Cloud Shell, перейдя по следующему URL-адресу.

https://ide.cloud.google.com

  1. В окне терминала создайте рабочий каталог для этого урока.

mkdir kustomize-lab

  1. Перейдите в каталог и установите рабочее пространство IDE.

cd kustomize-lab && cloudshell workspace .

3. Использование клиента командной строки kustomize

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

В этом разделе вы создадите базовую конфигурацию настройки и обработаете файлы с помощью автономного клиента командной строки настройки.

  1. Для начала вы создадите папку для хранения файлов базовой конфигурации.

mkdir -p chat-app/base

  1. Создайте простой файл 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

  1. Создайте базовый файл kustomization.yaml

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

Создайте файл kustomization.yaml , который ссылается на файл deployment.yaml как на базовые ресурсы.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Запустите команду настройки для базовой папки. При этом файлы 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 .

  1. Обновите файл kustomization.yaml , включив в него общие метки и пространства имен.

Скопируйте и выполните следующие команды в своем терминале

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. Выполните команду сборки

Выполнение сборки на этом этапе показывает, что полученный файл 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 также предоставляет возможность применять исправления, накладывающиеся на базовые ресурсы. Этот метод часто используется для обеспечения вариативности между приложениями и средами.

На этом этапе вы создадите варианты среды для одного приложения, использующие одни и те же базовые ресурсы.

  1. Начните с создания папок для разных сред.

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. Напишите патч сцены с помощью следующей команды

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

  1. Теперь напишите патч 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, который вы создали на предыдущем шаге. Однако эти патчи содержат уникальные переменные среды для разработки и производства.

  1. Реализуйте настройку файлов YAML для базового каталога.

Перепишите базовый файл kustomization.yaml, удалите пространство имен и префикс имени, поскольку это всего лишь базовая конфигурация без каких-либо изменений. Эти поля будут перенесены в файлы среды буквально через мгновение.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Реализуйте настройку файлов 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 : файла. Это указывает на то, что настройка должна накладывать эти файлы поверх базовых ресурсов.

  1. Реализуйте настройку файлов YAML для каталога prod.

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. Запустите настройку, чтобы объединить файлы.

После создания базовых файлов и файлов среды вы можете выполнить процесс настройки для исправления базовых файлов.

Запустите следующую команду для dev, чтобы увидеть объединенный результат.

kustomize build chat-app/dev

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

6. Использование нескольких слоев наложений

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

В этом примере вы создадите shared-kustomize папку и ресурсы, которые будут включены во все приложения независимо от того, в какой среде они развернуты.

  1. Создайте папку общей настройки.

mkdir shared-kustomize

  1. Создайте простой файл 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

  1. Создайте файл kustomization.yaml в общей папке.

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. Ссылка на папку общей настройки из вашего приложения.

Поскольку вы хотите, чтобы папка 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

  1. Запустите настройку и просмотрите объединенные результаты для разработчиков.

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>