#kubernetes
#kubernetes
Вопрос:
Допустим, у меня есть ранее существующий (сохраненный) том EBS, созданный с помощью PVC / PV, который был удален по ошибке. Этот том был создан следующим образом:
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp2-retain
parameters:
fsType: ext4
type: gp2
provisioner: kubernetes.io/aws-ebs
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: Immediate
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: prometheus
name: prometheus-server
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: gp2-retain
volumeMode: Filesystem
и использовался модулем, созданным helm chart с
helm install prometheus-current stable/prometheus server.persistentVolume.existingClaim=prometheus-server
Итак, этот EBS содержит некоторые файлы, созданные этим модулем, которые я хочу сохранить. Теперь нам удалось удалить PVC / PV, но том EBS был сохранен из-за reclaimPolicy
.
Итак, я хочу воссоздать PersistingVolumeClaim и PersistentVolume таким образом, чтобы они указывали на этот конкретный идентификатор тома EBS aws://eu-west-1/vol-xxxxx
. Как создать PVC без запуска динамической подготовки и создать новый PV, поддерживаемый совершенно новым томом EBS?
Ответ №1:
Вы можете «адаптировать» существующий EBS-том к новому PVC / PV. ключевые моменты:
- Создайте
PersistentVolume
с.metadata.name
по вашему выбору (например,vol-imported-prometheus-server
и.spec.awsElasticBlockStore.volumeID
равнымaws://region/vol-xxxx
- Если вы укажете
volumeID
, Kubernetes не будет пытаться выделить новый том EBS
- Если вы укажете
- Создайте
PersistentVolumeClaim
сspec.volumeName
именем PV на предыдущем шаге- Если вы укажете
volumeName
, Kubernetes будет привязывать PVC к существующему PV вместо того, чтобы пытаться динамически создавать новый PV на основеStorageClass
- Если вы укажете
Как этот пример:
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: vol-imported-prometheus-server
spec:
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
volumeID: aws://eu-west-1c/vol-xxxxx
capacity:
storage: 8Gi
persistentVolumeReclaimPolicy: Retain
storageClassName: gp2-retain
volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
labels:
app: prometheus
name: imported-prometheus-server
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: gp2-retain
volumeMode: Filesystem
volumeName: vol-imported-prometheus-server
Если вы kubectl apply -f thatfile.yaml
получите желаемый том PVC -> PV -> existing EBS.
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
vol-imported-prometheus-server 8Gi RWO Retain Bound prometheus/imported-prometheus-server gp2-retain 15m
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
imported-prometheus-server Bound vol-imported-prometheus-server 8Gi RWO gp2-retain 16m
И затем вы можете использовать это имя PVC в helm вот так:
helm install prometheus-current stable/prometheus server.persistentVolume.existingClaim=imported-prometheus-server
где imported-prometheus-server
имя только что созданного вами PVC.