Управление дополнительной конфигурацией приложения
Конфигурация приложения собирается оператором из набора кастомизаций (Kustomization). Если изменить эти кастомизации или порожденные ими ресурсы вручную (например, через kubectl edit или прямые правки кастомизаций), на ближайшей сверке оператор выполнит синхронизацию актуального состояния с желаемым и перезапишет изменения.
Чтобы добавлять собственные патчи декларативно и без потерь, используйте поле spec.customPatches. Описанные в нем патчи оператор применяет к указанным кастомизациям на каждой сверке, поэтому они сохраняются.
|
Изменяйте дополнительную конфигурацию только через |
1. Предварительные условия
-
Приложение установлено: CR применен, и кастомизации, в которые вносятся патчи, уже созданы.
-
Известны имена кастомизаций (
kustomizationName), к которым нужно добавить патчи.
2. Структура поля
Поле spec.customPatches — массив. Каждый элемент описывает патчи для одной кастомизации.
spec:
customPatches:
- kustomizationName: <kustomization-name> (1)
patches: (2)
- patch: | (3)
<тело патча>
target: (4)
kind: <resource-kind>
name: <resource-name>
namespace: <namespace>
| 1 | kustomizationName (тип: string, обязательное) — имя кастомизации, в которую добавляются патчи. Кастомизация должна существовать, иначе CR не будет принят. |
| 2 | patches (тип: array, обязательное) — список патчей в формате Kustomize. Каждый патч — пара patch + target. |
| 3 | patch (тип: string) — тело патча: JSON 6902 (операции op/path/value) или strategic merge (фрагмент манифеста). |
| 4 | target (тип: object) — селектор ресурсов: kind, name, namespace, необязательно group, version, labelSelector, annotationSelector. |
Чтобы изменить несколько кастомизаций, добавьте в массив customPatches несколько элементов.
3. Применение
-
Заполните
spec.customPatchesи примените CR. -
Выполняется проверка веб-хуком: имя кастомизации, формат YAML, тип патча и обязательные поля. При ошибке валидации CR не принимается, а состояние приложения не меняется.
-
Оператор добавляет патчи в
spec.patchesсоответствующей Flux Kustomization. -
Flux выполняет применение итоговых манифестов. Если патч синтаксически корректен, но не применим к целевому ресурсу, ошибка отображается в статусе Flux Kustomization (или соответствующего компонента).
Чтобы откатить патч, удалите соответствующий элемент patch или всю группу из spec.customPatches. На следующей сверке оператор обновит Flux Kustomization без этого патча.
4. Пример
Сохраните CR с полем spec.customPatches в файл, например CustomPatches.yaml, и примените его командой kubectl apply -f CustomPatches.yaml.
|
Пример приведен для ознакомления: значения |
apiVersion: <api-group>/v1alpha1
kind: <Kind>
metadata:
name: <resource-name>
spec:
customPatches:
- kustomizationName: <kustomization-name>
patches:
- patch: | (1)
- op: replace
path: /spec/replicas
value: 3
target:
kind: Deployment
name: <deployment-name>
namespace: <namespace>
- patch: | (2)
apiVersion: apps/v1
kind: Deployment
metadata:
name: <deployment-name>
spec:
template:
spec:
containers:
- name: <container-name>
resources:
limits:
memory: 2Gi
target:
kind: Deployment
name: <deployment-name>
namespace: <namespace>
| 1 | Патч в формате JSON 6902: задает 3 реплики Deployment. |
| 2 | Патч в формате strategic merge: увеличивает лимит памяти контейнера. |
5. Ограничения
-
Применять
customPatchesможно только после установки приложения. -
kustomizationNameдолжна ссылаться на существующую кастомизацию приложения. -
Выполняется проверка веб-хуком: формат патчей, тип, наличие
targetдля JSON 6902 и допустимость ссылки на кастомизацию. Полная проверка совместимости патчей между собой не выполняется — ошибки применения проявляются при сверке Flux Kustomization. -
Запрещено изменять поля идентичности и владения ресурсом — патчи, затрагивающие эти пути, отклоняются веб-хуком:
/metadata/name /metadata/namespace /metadata/ownerReferences /metadata/finalizers -
Формат
patch/targetполностью соответствует Kustomizepatches.