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 для получения подробной информации обо всем этом.

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