PV-and-PVC

Volume

kubernentes的存储部分第一个介绍了Volume。Volume可以支持localnfscephfsglusterfs以及各种云计算平台。

官网Volume的配置都是在一个创建pod的yaml文件中,例如

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: k8s.gcr.io/test-webserver
    name: test-container
    volumeMounts:
    - mountPath: /test-pd
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      # directory location on host
      path: /data
      # this field is optional
      type: Directory

Persistent Volume和Persistent Volume Claim

除了Volume之外,kubernetes还提供了Persistent Volume的方法。Volume主要是为了存储一些有必要保存的数据,而Persistent Volume主要是为了管理集群的存储。

Persistent Volume相对独立于Pods,单独创建。比如:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.207.121
    path: "/nas/dg_vd"

Persistent Volume对具体的存储进行配置和分配,而Pods等则可以使用Persistent Volume抽象出来的存储资源,不需要知道集群的存储细节。

Persistent Volume和Persistent Volume Claim类似Pods和Nodes的关系,创建Pods需要消耗一定的Nodes的资源。而Persistent Volume则是提供了各种存储资源,而Persistent Volume Claim提出需要的存储标准,然后从现有存储资源中匹配或者动态建立新的资源,最后将两者进行绑定。

PVC的创建

上面已经提到了创建PV的配置文件。PVC的内容如下:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: manual
  resources:
    requests:
      storage: 1Gi

Pods的使用

Pods使用的是PersistentVolumeClaim而非PersistentVolume

具体配置如下

apiVersion: v1
kind: Pod
metadata:
  name: testpv
  labels:
    role: web-frontend
spec:
  containers:
  - name: web
    image: nginx
    ports:
      - name: web
        containerPort: 80
    volumeMounts:
        - name: nfs
          mountPath: "/usr/share/nginx/html"
  volumes:
  - name: nfs
    persistentVolumeClaim:
      claimName: nfs

一些注意事项

在配置文件中的kind是PersistentVolumePersistentVolumeClaim。但是查询时,使用的是缩写pv,pvc

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×