У меня есть свойство sizeLimit
под emptyDir
, установленное на 2Gi в моем базовом файле шаблона. Я хочу удалить sizelimit
и просто иметь emptyDir: {}
. Мне не удалось добиться этого с помощью наложений настройки. Ниже я подробно опишу структуру папок и настройки yamls.
Структура папки:
application
├── majorbase
│ ├── kustomization.yaml
│ └── resources
│ └── web-template.yaml
├── minorbase
│ ├── kustomization.yaml
│ └── resources
└── myoverlays
├── kustomization.yaml
└── resources
└── my-new-web.yaml
Папка myoverlays
содержит следующее содержимое в файле kustomization.yaml
bases:
- ../minorbase
patchesStrategicMerge:
- resources/my-new-web.yaml
Папка minorbase
содержит следующее содержимое в файле kustomization.yaml
bases:
- ../majorbase
Папка majorbase
содержит следующее содержимое в файле kustomization.yaml
resources:
- resources/web-template.yaml
Раздел, который я хочу отредактировать, выглядит так в файле majorbase/template.
volumes:
- name: test-vol
emptyDir:
sizeLimit: "2Gi"
Приведенную выше конфигурацию необходимо обновить с помощью наложений, как показано ниже.
volumes:
- name: test-vol
emptyDir: {}
Вот в чем моя проблема. Кастомизация просто выбирает значение 2Gi, указанное в базе, всякий раз, когда я удаляю sizelimit
в своих наложениях. Когда я упоминаю другое значение для sizeLimit
, например «1Gi» в моем файле оверлеев, настройка подхватывает изменение. В чем причина такого поведения? Можно ли добиться того, что я пытаюсь сделать здесь?
NB: этот ответ предполагает наличие последней версии Kustomize (я запускаю 4.5.2 локально). В ваших примерах используется устаревший синтаксис (например, раздел bases
устарел в версии 2.1.0).
Ваша проблема в том, что вы используете патч strategicMerge
и сливаете пустую карту ({}
) с {"sizeLimit": "26gi"}
. Если вы объедините пустую карту с чем-либо, это будет бесполезно: вы получите «что угодно».
Чтобы явно удалить элемент, у вас есть несколько вариантов.
Вы можете использовать директиву $patch: replace
(вы можете найти пример этой здесь), чтобы настроить заменять элемент emptyDir
, а не объединять содержимое. Это будет выглядеть так:
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
volumes:
- name: test-vol
emptyDir:
$patch: replace
Соответствующий kustomization.yaml
может выглядеть примерно так:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patches:
- path: resources/my-new-web.yaml
В качестве альтернативы вы можете использовать патч JSONPatch, который хорош для явного удаления полей:
- path: /spec/volumes/0/emptyDir/sizeLimit
op: remove
Где kustomization.yaml
будет выглядеть:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ....//base
patches:
- target:
kind: Pod
name: example
path: resources/my-new-web.yaml
Вы можете найти полную работоспособную демонстрацию этого здесь.
Это решение сработало и для меня с
strategicMerge
. Принятый.