GCE Kubernetes: требование постоянного диска и постоянного тома
Подход 1 (том kubernetes подключен к постоянному диску Google, объем тома kubernetes присоединен к тому kubernetes)
apiVersion: v1
kind: PersistentVolume
metadata:
name: volume-1
spec:
storageClassName: ""
capacity:
storage: 50Gi
accessModes:
- ReadWriteOnce
gcePersistentDisk:
pdName: pd-test-1
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv-claim-1
spec:
storageClassName: ""
volumeName: volume-1
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Подход 2 (Заявка на объем Kubernetes напрямую прикреплена к постоянному диску Google)
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pv-claim-1
spec:
volumeName: pd-test-1
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Подход 3 (модуль напрямую использует постоянные дисковые документы Google)
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: k8s.gcr.io/test-webserver
name: test-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
# This GCE PD must already exist.
gcePersistentDisk:
pdName: my-data-disk
fsType: ext4
Я не уверен, какой метод должен использоваться в каких сценариях.
В чем разница между тремя подходами и какой мне следует использовать, если я хочу хранить данные на постоянных дисках Google?
1 ответ
В порядке наилучшего подхода:
- Лучший: подход 2 - обеспечение динамического объема
- Хорошо: Подход 1 - Предварительно подготовленные объемы через
PersistentVolumeClaim
- Наихудший: подход 3 - прямая ссылка на диск через модуль без
PersistentVolumeClaim
Подход 3 является худшим, потому что вы теряете мобильность. Если вы переместите ваш модуль в кластер Kubernetes, где GCE PD недоступен, вам придется модифицировать ваш модуль в соответствии с типом хранилища, доступным в новом кластере. Вы не должны использовать этот подход.
При обоих подходах 1 и 2 ваш Pod
а также PersistentVolumeClaim
объекты остаются переносимыми и не содержат в себе специфичных для кластера деталей.
Используйте подход 1 (вручную создавая оба PersistentVolumeClaim
а также PersistentVolume
) если у вас уже есть диск, который вы хотите использовать с Kubernetes. Сначала вы создаете PersistentVolume
объект для представления диска в Kubernetes, то вы создаете PersistentVolumeClaim
привязать к нему и действовать как указатель, который вы можете использовать в вашем Pod. Вы должны быть осторожны, чтобы убедиться, что объекты указывают друг на друга, см. /questions/6970606/mozhno-li-svyazat-pvh-s-konkretnyim-pv/6970628#6970628 для получения подробной информации о том, как это сделать. Это подход, который вы должны использовать для существующих GCE PD.
Подход 2 (вручную создать PersistentVolumeClaim
и пусть система автоматически создаст PersistentVolume
). Если ваша система хранения поддерживает динамическое предоставление томов Kubernetes, вы просто создаете PersistentVolumeClaim
объект и ваша система хранения автоматически создаст новый том. Для Kubernetes в GCE и GKE по умолчанию установлен StorageClass для GCE PD, так что это должно работать "из коробки", и именно этот подход вы должны использовать для создания и использования новых GCE PD.
См. https://www.youtube.com/watch?v=uSxlgK1bCuA для получения подробной информации обо всем этом.