как связать требование постоянного тома с gcePersistentDisk?

Я хотел бы связать PersistentVolumeClaim с gcePersistentDisk PersistentVolume. Ниже приведены шаги, которые я сделал для этого:

1. Создание gcePersistentDisk:

gcloud compute disks create --size=2GB --zone=us-east1-b gce-nfs-disk

2. Определение PersistentVolume и PersistentVolumeClaim.

# pv-pvc.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: gce-nfs-disk
    fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
  labels:
    app: test
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi

После запуска kubectl apply -f pv-pvc.yml nfs-pvc не связывается с nfs-pv. Фактически, ниже приведен список имеющихся у меня PersistentVolume и PersistentVolumeClaim:

$ kubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM             STORAGECLASS   REASON    AGE
nfs-pv                                     2Gi        RWO            Retain           Available                                              30s
pvc-16e4cdf2-cd3d-11e7-83ae-42010a8e0243   2Gi        RWO            Delete           Bound       default/nfs-pvc   standard                 26s
$ kubectl get pvc
NAME      STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc   Bound     pvc-16e4cdf2-cd3d-11e7-83ae-42010a8e0243   2Gi        RWO            standard       59s

Полученный PersistentVolume - это том на диске узла, который я создал в Google Container Engine. Итак, я что-то упустил?

PS: версия кубернетов

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.3", GitCommit:"f0efb3cb883751c5ffdbe6d515f3cb4fbe7b7acd", GitTreeState:"clean", BuildDate:"2017-11-08T18:39:33Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"7+", GitVersion:"v1.7.8-gke.0", GitCommit:"a7061d4b09b53ab4099e3b5ca3e80fb172e1b018", GitTreeState:"clean", BuildDate:"2017-10-10T18:48:45Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"linux/amd64"}

comment
Имя вашего PV - my-pvc, а PVC - my-pvc. Однако в результате команд 'Kubectl get pv, pvc' имя будет другим: nfd-pv, nfs-pvc. Почему такое поведение?   -  person Suresh Vishnoi    schedule 19.11.2017
comment
Японял твою точку зрения. Возвращаются оригинальные имена. Но, в любом случае, проблема все еще здесь ...   -  person Amine Jallouli    schedule 20.11.2017


Ответы (2)


Я нашел решение.

Ниже приведены новые определения PV и PVC:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
  labels:
    app: test  # the label has been added to make sure the bounding is working as expected
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  gcePersistentDisk:
    pdName: gce-nfs-disk
    fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
  labels:
    app: test
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: "" # the storageClassName has to be specified
  resources:
    requests:
      storage: 2Gi
  selector:
    matchLabels:
      app: test

После этих модификаций это ограничение сработало:

$ kubectl get pvc
NAME      STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
nfs-pvc   Bound     nfs-pv    2Gi        RWO                           8s
$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM             STORAGECLASS   REASON    AGE
nfs-pv    2Gi        RWO            Retain           Bound     default/nfs-pvc                            22m

Надеюсь, это поможет.

person Amine Jallouli    schedule 20.11.2017
comment
Получение этой ошибки при использовании громкости, как указано выше. Не удалось получить GCE GCECloudProvider с ошибкой ‹nil› - person Harpartap Singh Permar; 23.08.2019

При использовании PersistentVolumeClaim не нужно создавать объекты PersistentVolume или gcePersistentDisk. Вместо этого создайте только PVC, и Kubernetes автоматически создаст объект PV, который ссылается на резервное хранилище.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ssd-sc  # specify the storage class created below
  resources:
    requests:
      storage: 10Gi

Создайте StorageClass, чтобы он знал, какое резервное хранилище использовать. Вы можете указать, что он сохраняет хранилище (reclaimPolicy: Retain), если вы удалите PVC и тип хранилища (type: pd-ssd).

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ssd-sc 
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Retain # Retain storage even if we delete PVC
parameters:
  type: pd-ssd # ssd
person Emmanuel Osimosu    schedule 30.11.2018