Кубинецская постоянная заявка на объем производства в неизлечимом состоянии

Я создал PersistentVolume, полученный с постоянного диска Google Compute Engine, который я уже отформатировал и предоставил данные. Кубернетес говорит, что доступен PersistentVolume.

kind: PersistentVolume
apiVersion: v1
metadata:
  name: models-1-0-0
  labels:
    name: models-1-0-0
spec:
  capacity:
    storage: 200Gi
  accessModes:
    - ReadOnlyMany
  gcePersistentDisk:
    pdName: models-1-0-0
    fsType: ext4
    readOnly: true

Затем я создал PersistentVolumeClaim, чтобы я мог присоединить этот том к нескольким контейнерам на нескольких узлах. Однако кубернеты на неопределенный срок заявляют, что находятся в состоянии ожидания.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: models-1-0-0-claim
spec:
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 200Gi
  selector:
    matchLabels:
      name: models-1-0-0

Любые идеи? Я чувствую, что может быть что-то не так с селектором...

Возможно ли даже предварительно сконфигурировать постоянный диск с данными и иметь модули на нескольких узлах, которые можно читать с него?

Ответ 1

Я быстро понял, что PersistentVolumeClaim по умолчанию помещает storageClassName в поле standard, если это не указано. Однако при создании PersistentVolume storageClassName не имеет значения по умолчанию, поэтому селектор не находит совпадения.

Следующие работали для меня:

kind: PersistentVolume
apiVersion: v1
metadata:
  name: models-1-0-0
  labels:
    name: models-1-0-0
spec:
  capacity:
    storage: 200Gi
  storageClassName: standard
  accessModes:
    - ReadOnlyMany
  gcePersistentDisk:
    pdName: models-1-0-0
    fsType: ext4
    readOnly: true
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: models-1-0-0-claim
spec:
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 200Gi
  selector:
    matchLabels:
      name: models-1-0-0

Ответ 2

При динамическом обеспечении вам не нужно создавать PV и PVC по отдельности. В Kubernetes 1. 6+ есть поставщики по умолчанию для GKE и некоторых других облачных сред, которые должны позволить вам просто создать PVC и автоматически предоставить PV и базовый постоянный диск для вас.

Для получения дополнительной информации о динамическом обеспечении см.:

https://kubernetes.io/blog/2017/03/dynamic-provisioning-and-storage-classes-kubernetes/

Ответ 3

Я видел такое поведение в microk8s когда два PersistentVolume имеют одинаковое значение для spec/hostPath/path, например

kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv-name
  labels:
    type: local
    app: app
spec:
  storageClassName: standard
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/k8s-app-data"

Кажется, что microk8s основан на событиях (что не обязательно для кластера с одним узлом) и выбрасывает информацию о любых сбойных операциях, что приводит к ненужной ужасной обратной связи почти для всех сбоев.

Ответ 4

Убедитесь, что на вашей виртуальной машине также достаточно места на диске.

Ответ 5

Я столкнулся с той же проблемой, в которой PersistentVolumeClaim находился в ожидающей фазе неопределенно долго, я попытался предоставить storageClassName в качестве "значения по умолчанию" в PersistentVolume, так же как я делал для PersistentVolumeClaim, но это не помогло устранить эту проблему.

Я сделал одно изменение в моем persistentvolume.yml и переместил конфигурацию PersistentVolumeClaim поверх файла, а затем PersistentVolume в качестве второго конфига в файле yml. Это исправило эту проблему.

Нам нужно убедиться, что PersistentVolumeClaim создается первым, а PersistentVolume создается впоследствии, чтобы решить эту проблему фазы "Ожидание".

Я публикую этот ответ после того, как несколько раз протестировал его, надеясь, что он может помочь кому-то с этим бороться.