pv pvc学习笔记

2018-09-21  本文已影响0人  华阳_3bcf

不使用pv/pvc 直接挂载存储

以Azure File存储举例,先定义访问的用户名/密码

$ cat azure-secret.yml 
apiVersion: v1
kind: Secret
metadata:
  name: azure-secret
type: Opaque
data:
  azurestorageaccountname: cm95c3RvcmU=
  azurestorageaccountkey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx2c9PQ==

再挂载资源

$ cat azure.yml 
apiVersion: v1
kind: Pod
metadata:
 name: nginx
spec:
 containers:
  - image: nginx
    name: nginx
    volumeMounts:
      - name: azure
        mountPath: /mnt/azure
 volumes:
      - name: azure
        azureFile:
          secretName: azure-secret
          shareName: myshare
          readOnly: false

应用:

$ kubectl apply -f azure-secret.yml
$ kubectl apply -f azure.yml

这种用法缺点:

使用pv/pvc 方式

PersistentVolume (PV) 是外部存储系统中的一块存储空间,由管理员创建和维护。
PersistentVolumeClaim (PVC) 是对 PV 的申请 (Claim)。PVC 通常由普通用户创建和维护。
有了 PersistentVolumeClaim,用户只需要告诉 Kubernetes 需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。这些 Storage Provider 的底层信息交给管理员来处理,只有管理员才应该关心创建 PersistentVolume 的细节信息。

创建PersistentVolume

定义PersistentVolume,这里使用hostPath作为存储底层。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
  labels:
    release: stable
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  hostPath:
    path: /tmp/data

应用并检查状态

$ kubectl apply -f pv2.yml 
persistentvolume/pv0003 created
$ kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
pv0003      5Gi        RWO            Recycle          Available                                      5m

创建PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim1
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      release: stable

PVC是用户对存储资源PV的请求,根据PVC中指定的条件Kubernetes动态的寻找系统中的PV资源并进行绑定。目前PVC与PV匹配可以通过StorageClassNamematchLabels或者matchExpressions三种方式。
应用并检查状态

$ kubectl apply -f pvc2.yml
persistentvolumeclaim/myclaim1 created
$ kubectl get pvc
NAME       STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim1   Bound     pv0003    5Gi        RWO                           7s
$ kubectl get pv
NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS   REASON    AGE
pv0003      5Gi        RWO            Recycle          Bound       default/myclaim1                            9m

pvc 的状态是Bound, pv的状态也从Available变成了Bound

PersistentVolume有四种状态:

Available – 可用状态
Bound – 绑定到PVC
Released – PVC被删掉,但是尚未回收
Failed – 自动回收失败

挂载Volume到Pod

apiVersion: v1
kind: Pod
metadata:
 name: pvpod
spec:
 containers:
  - image: nginx
    name: nginx
    volumeMounts:
      - name: mypd
        mountPath: /var/www/html
 volumes:
   - name: mypd
     persistentVolumeClaim:
       claimName: myclaim1

应用并检查状态

$ kubectl apply -f mypod.yml 
pod/pvpod created
$ kubectl get pod
NAME                         READY     STATUS              RESTARTS   AGE
pvpod                        0/1       ContainerCreating   0          3s
$ kubectl get pod
NAME                         READY     STATUS    RESTARTS   AGE
pvpod                        1/1       Running   0          8s

$ ls /tmp/data
$ kubectl exec -it pvpod bash
root@pvpod:/# echo abc > /var/www/html/index.html
root@pvpod:/# exit
exit
$ ls /tmp/data
index.html

Azure file 静态PV PVC 方式

PV 配置

$ cat pv5.yml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mypv5
  labels:
    app: pg5
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  azureFile:
    secretName: azure-secret
    shareName: myshare
    readOnly: false
  mountOptions:
  - uid=999
  - gid=999

PVC 配置

$ cat pvc5.yml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc5
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      app: pg5

通过matchLabels 方式来匹配 PV 和 PVC 之间的关系。
执行和检查

$ kubectl create -f pv5.yml
$ kubectl create -f pvc5.yml
$ $ kubectl get pv mypv5
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS    CLAIM            STORAGECLASS   REASON    AGE
mypv5     5Gi        RWO            Retain           Bound     default/mypvc5                            2d

部分参数解释

accessModes

用于定义资源的访问方式,受限于存储底层的支持,访问方式包括以下几种:

ReadWriteOnce – 被单个节点mount为读写rw模式
ReadOnlyMany – 被多个节点mount为只读ro模式
ReadWriteMany – 被多个节点mount为读写rw模式

persistentVolumeReclaimPolicy

用于定义资源的回收方式,也首先与存储底层的支持,现有的回收策略:

Retain – 手动回收
Recycle – 删除数据 (“rm -rf /thevolume/*”)
Delete – 通过存储后端删除卷,后端存储例如AWS EBS, GCE PD或Cinder等。
上一篇 下一篇

猜你喜欢

热点阅读