#kubernetes #persistent-volumes #persistent-volume-claims
#kubernetes #постоянные тома #постоянные утверждения тома
Вопрос:
Я создал простой локальный том хранилища. Что-то вроде этого:
apiVersion: v1
kind: PersistentVolume
metadata:
name: vol1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /srv/volumes/vol1
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- my-node
Я создаю утверждение:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage:1Gi
По неизвестной причине они не получают совпадений. Что я делаю не так?
Ответ №1:
О локальном хранилище стоит отметить, что:
Использование локального хранилища привязывает ваше приложение к этому конкретному узлу, усложняя планирование вашего приложения. Если этот узел или локальный том сталкивается со сбоем и становится недоступным, то этот модуль также становится недоступным. Кроме того, многие облачные провайдеры не предоставляют исчерпывающих гарантий надежности данных для локального хранилища, поэтому в определенных сценариях вы можете потерять все свои данные.
Это для Kubernetes 1.10. В Kubernetes 1.14 локальные постоянные тома стали GA.
Вы опубликовали ответ, что требуется пользователь. Просто чтобы уточнить, что пользователь, которого вы имели в виду, является потребителем, таким как pod, deployment, statefullset и т. Д. Таким образом, использование простого определения pod приведет к тому, что ваш PV станет связанным:
kind: Pod
apiVersion: v1
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
Теперь проблема возникает, когда вы удаляете модуль и пытаетесь запустить другой. В этом случае, если вы или кто-то другой будете искать решение, оно было описано в этом выпуске GitHub .
Надеюсь, это прояснит ситуацию.
Ответ №2:
Вы должны указать volumeName
в своем PVC, чтобы привязать его конкретно к PV, который вы только что создали как so:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeName: "vol1"
resources:
requests:
storage:1Gi
Кроме того, если вы укажете storageClassName
в своем PVC, ваш PVC также будет привязан к PV, соответствующему этой спецификации (хотя это не гарантирует, что он будет привязан к вашему PV «vol1», если для этого класса хранения имеется более 1 PV).
Надеюсь, это поможет!
Ответ №3:
Я понял это. Мне просто нужен был пользователь. Пока у меня был пользователь, все работало отлично.