Кубинецская постоянная заявка на объем производства в неизлечимом состоянии
Я создал 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 создается впоследствии, чтобы решить эту проблему фазы "Ожидание".
Я публикую этот ответ после того, как несколько раз протестировал его, надеясь, что он может помочь кому-то с этим бороться.