В порядке наилучшего подхода:
- Наилучший: подход 2 - обеспечение динамического объема
- ОК: Подход 1 - Предварительно подготовленные тома через
PersistentVolumeClaim
- Наихудший: подход 3 - Прямая ссылка на диск через модуль без
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.