Невозможно удалить свойство «Sizelimit» с помощью kustomize

У меня есть свойство 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» в моем файле оверлеев, настройка подхватывает изменение. В чем причина такого поведения? Можно ли добиться того, что я пытаюсь сделать здесь?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
0
16
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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. Принятый.

vishal 04.05.2022 10:51

Другие вопросы по теме