Pod пресеты (Pod Preset)

В этом посте представлен обзор PodPresets, которые являются объектами для добавления определенной информации в Pod во время создания. Информация может включать в себя секреты, тома, монтирования томов (volume mounts) и переменные среды.

Pod Preset - это ресурс API для добавления дополнительных требований времени выполнения (runtime) в Pod во время создания. Вы используете селекторы меток, чтобы указать Pod'ы, к которым применяется данный набор настроек.

Использование набора настроек позволяет авторам шаблонов Pod не предоставлять явную информацию для каждого Pod. Таким образом, авторам шаблонов pod, использующих конкретный сервис, не нужно знать все подробности об этом сервисе.

Как устроены Pod Preset

Kubernetes предоставляет контроллер доступа (PodPreset), который при включении применяет Pod пресеты к входящим запросам на создание Pod. Когда происходит запрос на создание Pod, система выполняет следующие действия:

  1. Получает все PodPresets, доступные для использования.
  2. Проверяет, соответствуют ли селекторы меток любого PodPreset меткам на создаваемом Pod.
  3. Пытается объединить различные ресурсы, определенные PodPreset, в создаваемый Pod.
  4. В случае ошибки создает событие, документирующее ошибку слияния, в Pod и создает Pod без каких-либо вложенных ресурсов из PodPreset.
  5. Аннотирует полученную модифицированную спецификацию Pod, чтобы указать, что она была изменена PodPreset. Аннотация имеет вид podpreset.admission.kubernetes.io/podpreset-<pod-preset name>: "<версия ресурса>".

Каждый Pod может соответствовать нулю или нескольким Pod пресетам; и каждый PodPreset может быть применен к нулю или более Pod'ов. Когда PodPreset применяется к одному или нескольким Pod, Kubernetes модифицирует Pod Spec (спецификацию Pod'а). Для изменений в Env, EnvFrom и VolumeMounts, Kubernetes изменяет спецификацию контейнера для всех контейнеров в Pod; для изменения Volume Kubernetes модифицирует Pod Spec (спецификацию Pod'а).

Примечание. Pod Preset может при необходимости изменять следующие поля в спецификации Pod: поле .spec.containers, поле initContainers (требуется версия Kubernetes 1.14.0 или более поздняя).

Отключить Pod Preset для определенного Pod

Могут быть случаи, когда вы хотите, чтобы Pod не изменялся какими-либо мутациями Pod Preset. В этих случаях вы можете добавить аннотацию в спецификации Pod в виде: podpreset.admission.kubernetes.io/exclude: "true".

Включить Pod Preset

Чтобы использовать Pod пресеты в вашем кластере, вы должны убедиться в следующем:

  1. Вы включили тип API settings.k8s.io/v1alpha1/podpreset. Например, это можно сделать, включив settings.k8s.io/v1alpha1=true в параметре --runtime-config для сервера API. В minikube добавьте флаг --extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true при запуске кластера.
  2. Вы включили контроллер доступа (admission controller) PodPreset. Один из способов сделать это - включить PodPreset в значение параметра --enable-admission-plugins, указанное для сервера API. В minikube добавьте флаг --extra-config=apiserver.enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset во время запуска кластера.
  3. Вы определили свои Pod пресеты, создав объекты PodPreset в пространстве имен, которое вы будете использовать.

Читайте также:


Комментарии

Популярные сообщения из этого блога

Контроллеры в Kubernetes: DaemonSet

Контроллеры в Kubernetes: ReplicaSet

Контроллеры в Kubernetes: StatefulSet