Большая полезная нагрузка для пользовательских объектов

Несмотря на то, что я могу прекрасно создавать собственные объекты, мне интересно, как можно обрабатывать большие полезные нагрузки (гигабайты) для объекта.

CR в основном используются для взаимодействия со сборщиком мусора / подсчетом ссылок в Kubernetes.

Однако добавление полезной нагрузки через YAML не работает (недостаточно памяти для больших полезных нагрузок):

apiVersion: "data.foo.bar/v1" 
kind: Dump 
metadata:
  name: my-data
  ownerReferences:
    - apiVersion: apps/v1
      kind: Deploy
      name: my-deploy
      uid: d9607a69-f88f-11e7-a518-42010a800195
spec: 
  payload: dfewfawfjr345434hdg4rh4ut34gfgr_and_so_on_...

Можно было бы добавить полезную нагрузку в PV и просто ссылаться на этот путь в CR. Тогда у меня возникает проблема: мне кажется, что я не могу очистить файл полезной нагрузки, если CR будет завершен (не смог найти никакой информации о пользовательских финализаторах).

Понятия не имею, как интегрировать такую ​​концепцию в жизни Кубернетов.

2 ответа

Решение

Мы по-прежнему использовали CO. Наряду с этим мы создали контроллер Kubernetes, который управляет временем жизни в PV. Для нас это работает нормально, поскольку контроллер может быть единственным автором для PV, в то время как реальным службам нужен только доступ для чтения к PV. В сочетании с ownerReferenceэто делает для хорошей интеграции в время жизни Kubernetes.

В общем, ограничение размера для любого объекта API Kube составляет ~1M из-за ограничений etcd, но помещать в объект более 20-30k - плохая идея и будет дорогим для доступа (и сборка мусора также будет дорогой).

Я бы порекомендовал хранить данные в хранилище объектов и использовать прокси-сервер RBAC, например https://github.com/brancz/kube-rbac-proxy для доступа к содержимому хранилища (используйте URL-адрес для прокси в качестве ссылки из вашего объект). Это дает вам все преимущества отслеживания данных в API, но сохраняет размер объекта небольшим. Если вы хотите более сложную интеграцию, вы можете реализовать агрегированный API и повторно использовать основные библиотеки Kubernetes для обработки вашего API, сохраняя данные в хранилище объектов.

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