Спасибо за разъяснение того, что вы пытаетесь сделать в комментариях.
У меня есть 2 разных ответа.
Первое, что мое тестирование показывает, что Kubernetes GCE PD документация в точности соответствует действительности, и предупреждение о форматировании может быть проигнорировано.
Если вы просто выполните команду:
gcloud compute disks create --size=10GB --zone=us-central1-a my-test-data-disk
И затем используйте еев модуле:
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: nginx-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
# This GCE PD must already exist.
gcePersistentDisk:
pdName: my-test-data-disk
fsType: ext4
Он будет отформатирован при монтировании. Вероятно, это связано с тем, что параметр fsType
указывает системе, как форматировать диск . Вам не нужно ничего делать с отдельным экземпляром GCE. Диск сохраняется, даже если вы удалите модуль или даже весь кластер. Он не переформатируется при использовании после первого, и данные сохраняются.
Итак, предупреждающее сообщение от gcloud сбивает с толку, но в этом случае его можно проигнорировать.
Теперь, чтобы динамически создать постоянный том на основе GCE PD, который не удаляется автоматически, вам нужно будет создать новый StorageClass
, в котором для политики восстановления установлено значение Retain
, а затем создатьPersistentVolumeClaim
на основании этого StorageClass
. Это также сохраняет в основном всю операцию внутри Kubernetes без необходимости что-либо делать с gcloud. Аналогично, подобный подход - то, что вы хотели бы использовать с StatefulSet
в отличие от одного модуля, как описано здесь .
Описано большинство того, что вы хотите сделатьв этой документации GKE о динамическом распределении PVC , а также в документации Kubernetes StorageClass . Вот пример:
gce-pd-retain-storageclass.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gce-pd-retained
reclaimPolicy: Retain
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
replication-type: none
Приведенный выше класс хранения в основном совпадает со стандартным классом хранения GKE, за исключением *Для 1044 * установлено значение Сохранять.
pvc-demo.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-demo-disk
spec:
accessModes:
- ReadWriteOnce
storageClassName: gce-pd-retained
resources:
requests:
storage: 10Gi
При применении вышеизложенного будет динамически создан диск, который будет сохранен при удалении заявки.
И, наконец, demo-pod.yaml, который монтирует PVC как том (это на самом деле бессмысленный пример с использованием nginx, но демонстрирует синтаксис):
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: nginx-container
volumeMounts:
- mountPath: /test-pd
name: test-volume
volumes:
- name: test-volume
persistentVolumeClaim:
claimName: pvc-demo-disk
Теперь, если вы примените эти три вВ этом случае вы получите контейнер, работающий с использованием PersistentVolumeClaim, который автоматически создал (и отформатировал) диск для вас. Когда вы удаляете модуль, иск сохраняет диск вокруг. Если вы удалите претензию , StorageClass по-прежнему удерживает диск от удаления.
Обратите внимание, что PV, оставшийся после этого, не будет автоматически повторно использован, так как данные все еще включены. диск. См. документацию Kubernetes о том, что вы можете сделать, чтобы вернуть его в этом случае. На самом деле это в основном говорит о том, что вам не следует удалять PVC, если вы не готовы выполнить работу по удалению данных со старого тома.
Обратите внимание, что эти диски будут продолжать существовать, даже когда весь кластер GKEтакже удаляется (и вы будете продолжать выставлять счета за них, пока не удалите их).