K8s后端技术

Kubernetes Pv & Pvc

2017-03-28  本文已影响10303人  YichenWong

Kubernetes PV & pvc


介绍

PersistentVolume(pv)和PersistentVolumeClaim(pvc)是k8s提供的两种API资源,用于抽象存储细节。管理员关注于如何通过pv提供存储功能而无需
关注用户如何使用,同样的用户只需要挂载pvc到容器中而不需要关注存储卷采用何种技术实现。
pvc和pv的关系与pod和node关系类似,前者消耗后者的资源。pvc可以向pv申请指定大小的存储资源并设置访问模式,这就可以通过Provision -> Claim 的方式,来对存储资源进行控制。

生命周期

pv和pvc遵循以下生命周期:

Provisioning

两种方式提供的PV资源供给:

存储卷,成功之后再创建PersistentVolume对象,才能够在kubernetes中使用。动态卷供给能让集群管理员不必进行预先创建存储卷,而是随着用户需求
进行创建。在1.5版本提高了动态卷的弹性和可用性。

    在此前1.4版本中加入了一个 新的 API 对象 StorageClass,可以定义多个 StorageClass 对象,并可以分别指定存储插件、设置参数,用于提

供不同的存储卷。这样的设计让集群管理员能够在同一个集群内,定义和提供不同类型的、不同参数的卷(相同或者不同的存储系统)。这样的设计还确
保了最终用户在无需了解太多的情况下,有能力选择不同的存储选项。

PV类型

pv支持以下类型:

PV属性:

PV卷阶段状态:

AwsElasticBlockServer 静态PV示例

需要满足以下条件方可使用EBS:

1. 创建PV(Persistent Volume)

$ vim ebs-pv.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: ebs-pv
      labels:
        type: amazonEBS
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteOnce
      awsElasticBlockStore:
        volumeID: vol-079c492115a7be6e1
        fsType: ext4

$ kubectl create -f ebs-pv.yaml

    persistentvolume "ebs-pv" created

2. 创建PVC(Persistent Volume Claim)

$ vim nginx-pvc.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nginx-pvc
      labels:
        type: amazonEBS
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 5Gi

$ kubectl create -f nginx-pvc.yaml

    persistentvolumeclaim "nginx-pvc" created

3.创建deployment服务使用pvc资源

$ vim nginx-with-pvc.yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx-with-pvc
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            service: nginx
            app: test
        spec:
          containers:
          - image: nginx
            name: nginx-with-pvc
            volumeMounts:
            - mountPath: /test-ebs
              name: my-pvc
          volumes:
          - name: my-pvc
            persistentVolumeClaim:
              claimName: nginx-pvc

kubectl create -f nginx-with-pvc.yaml

    Deployment "nfs-web" created

注意事项

    - 由于aws ebs限制一个ebs只能同时挂载一个ec2,在使用基于pvc的pod时,建议使用replicas=1来创建一个部署集。StatefulSet可解决数据库集群问题。
    - pod迁移,pvc迁移(卸载旧实例/挂载新实例)默认35秒。
    - 通过deployemnt部署,删除deployment之后,可重新挂载原有pvc到新的pod里面。
    - 当pod被删除,同时删除依赖的pvc,pv状态变更为release。此时不能被其他pvc使用,aws ebs需要delete pv重建。目前不支持通过手动回收


- 已经被pvc绑定的pv可以被删除,删除后对应的pvc仍为Bound状态。如有pod正在使用此pvc则仍可使用。如无pod使用,则创建pod挂载此pvc时
会出现失败。
- pv可以在绑定后被编辑(如访问模式,容量),导致信息与对应的pvc不一致。

上一篇 下一篇

猜你喜欢

热点阅读