Вот моя общая цель:
Подход, который я выбрал:
Вот тупая версия конфигурации:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: some-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: do-block-storage
---
apiVersion: v1
kind: Service
metadata:
name: some-headless-service
labels:
app: my-app
spec:
ports:
- port: 27017
name: my-app-database
clusterIP: None
selector:
app: my-app
tier: database
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: my-app-database
labels:
app: my-app
tier: database
spec:
serviceName: some-headless-service
replicas: 1
selector:
matchLabels:
app: my-app
tier: database
template:
metadata:
labels:
app: my-app
tier: database
spec:
containers:
- name: my-app-database
image: mongo:latest
volumeMounts:
- name: some-volume
mountPath: /data
ports:
- containerPort: 27017
name: my-app-database
volumes:
- name: some-volume
persistentVolumeClaim:
claimName: some-pvc
Это работает, как и ожидалось.Я могу развернуть реплики до 0:
kubectl scale —replicas=0 statefulset/my-app-database
Повернуть обратно:
kubectl scale —replicas=1 statefulset/my-app-database
И данные сохранятся..
Но однажды, когда я возился с масштабированием набора состояний вверх и вниз, я встретил эту ошибку:
Volume is already exclusively attached to one node and can't be attached to another
Будучи новичком в k8s, я удалил PVC и«Воссоздал» тот же:
kubectl delete pvc some-pvc
kubectl apply -f persistent-volume-claims/
statefulset
возобновил работу с новым PV, и старый PV был удален, так как persistentVolumeReclaimPolicy
был установлен в Delete
по умолчанию.
Я установил этот новый PV persistentVolumeReclaimPolicy
на Retain
, чтобы гарантировать, что данные не будут автоматически удалены ... и я понял: я не уверен, как бы я восстановил этот PV.Ранее, чтобы избежать ошибки «присоединения тома», я удалил PVC, который просто создаст другой новый PV с моей настройкой, и теперь у меня остались данные в этом Released
PV.
Мои основные вопросы:
Похоже ли это на общий подход к моей цели?
Стоит ли добавлять * 1076?* к динамически создаваемому PV, а затем воссоздание нового PVC с этим requestRef, как указано здесь: Можно ли связать PVC с конкретным PV?
Должен ли япытаться заставить этот свежий statefulset
PVC на самом деле использовать тот старый PV?
Имеет ли смысл попытаться подключить старый PV к правильному узлу, и как мне это сделать?что?