В порядке наилучшего подхода к худшему:
PersistentVolumeClaim
PersistentVolumeClaim
Подход 3 является худшим, потому что вы теряете переносимость. Если вы переместите ваш модуль в кластер Kubernetes, где GCE PD недоступен, вам придется модифицировать ваш модуль в соответствии с типом хранилища, доступным в новом кластере. Вы не должны использовать этот подход.
С обоими подходами 1 и 2 Ваши объекты Pod
и PersistentVolumeClaim
остаются переносимыми и не содержат в себе специфичных для кластера деталей.
Используйте подход 1 (вручную создавая PersistentVolumeClaim
и PersistentVolume
), если у вас уже есть существующий диск, который вы хотите использовать с Kubernetes. Сначала вы создаете объект PersistentVolume
для представления диска в Kubernetes, затем вы создаете PersistentVolumeClaim
для привязки к нему и в качестве указателя, который вы можете использовать в вашем модуле Pod. Вы должны быть осторожны, чтобы убедиться, что объекты указывают друг на друга, см. https://stackoverflow.com/a/34323691/5443528 для получения подробной информации о том, как это сделать. Это подход, который вы должны использовать для существующих GCE PD.
Подход 2 (вручную создайте PersistentVolumeClaim
и дайте системе автоматически создать PersistentVolume
). Если ваша система хранения поддерживает динамическое предоставление томов Kubernetes, вы просто создаете объект PersistentVolumeClaim
, и ваша система хранения автоматически создает новый том. У Kubernetes в GCE и GKE по умолчанию установлен StorageClass для GCE PD, поэтому это должно работать «из коробки», и именно этот подход вам следует использовать для создания и использования новых GCE PD.
Подробнее см. https://www.youtube.com/watch?v=uSxlgK1bCuA .
Я принимаю, писали ли Вы необработанный SQL, Вы использовали бы Пост-ГРЭС bytea или MySQL VARBINARY. Существует билет с патчем (отмеченное "тестирование потребностей"), который предположительно делает поле как это (Билет 2417: Поддержка двоичных полей типа (иначе: bytea в пост-ГРЭС и VARBINARY в mysql)).
Иначе Вы могли, вероятно, попробовать силы в записи пользовательского типа поля.
Вы могли также записать Вашему собственному Образцовому менеджеру, который делает выход и невыход для Вас.
"У меня есть двадцатибайтовый шестнадцатеричный хеш, который я хотел бы сохранить в django модели".
Django делает это. Они используют шестнадцатеричные обзоры, которые являются - технически - строки. Не байты.
Не использовать someHash.digest()
- Вы получаете байты, которые Вы не можете легко сохранить.
Использовать someHash.hexdigest()
- Вы получаете строку, которую можно легко сохранить.
Редактирование - код почти идентичен.