Большая полезная нагрузка для пользовательских объектов
Несмотря на то, что я могу прекрасно создавать собственные объекты, мне интересно, как можно обрабатывать большие полезные нагрузки (гигабайты) для объекта.
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, сохраняя данные в хранилище объектов.