赞
踩
在我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在Node 上而已,
在使用 PVC 之前,我们还得把其他节点上的 nfs 客户端给安装上
我们需要在所有节点安装 nfs 客户端程序,安装方法和上节课的安装方法一样的。必须在所有节点都安装 nfs 客户端,否则可能会导致 PV 挂载不上的问题
新建一个数据卷声明,请求 1Gi 的存储容量,访问模式也是ReadWriteOnce,YAML 文件如下:(pvc-nfs.yaml)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1-nfs
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
可以看到我们这里的声明方法几乎和新建 PV 是一样的,在新建 PVC 之前,我们可以看下之前创建的 PV 的状态:
[root@master ~]# kubectl get pv
pv1 1Gi RWO Recycle Available 93m
我们可以看到当前 pv1 是在 Available 的一个状态,所以这个时候我们的 PVC 可以和这个 PV 进行绑定:
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-nfs Bound pv1 1Gi RWO 5m13s
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv1 1Gi RWO Recycle Bound default/pvc-nfs 97m
可以看到 PV 也是 Bound 状态了,对应的声明是 default/pvc-nfs,就是 default 命名空间下面的 pvc-nfs,证明我们刚刚新建的 pvc-nfs和我们的 pv-nfs 绑定成功了。
系统自动匹配pv\pvc
他会根据我们的声明要求去查找处于 Available 状态的 PV,如果没有找到的话那么我们的 PVC 就会一直处于 Pending 状态,找到了的话当然就会把
新建没有合适的pv看下状态会是什么样子的
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc1-nfs spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi selector: matchLabels: app: nfs [root@master ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc2-nfs Pending 5s [root@master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv001 1Gi RWO Recycle Bound default/www-web-0 22h pv002 1Gi RWO Recycle Bound default/www-web-1 22h pv1 1Gi RWO Recycle Bound default/pvc-nfs 164m pvc-558f0315-7994-4b22-a32a-c3978c7794ce 5Gi RWX Delete Bound default/www-test-pvc-0 course-nfs-storage 8d pvc-fe7e15b0-da47-4f2c-a43a-aba53b1f8a87 1Gi RWX Delete Bound default/test-pvc course-nfs-storage 8d 可以看到没有匹配PVC2的pv所以PVC2会一直处于pending状态,直到有符合的PV才会bound
创建一个符合PVC2的pv
apiVersion: v1 kind: PersistentVolume metadata: name: pvc2-pv labels: app: nfs spec: capacity: storage: 2Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle nfs: server: 192.168.0.38 path: /data/k8s [root@master ~]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc2-pv 2Gi RWO Recycle Bound default/pvc2-nfs 15s [root@master ~]# kubectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc2-nfs Bound pvc2-pv 2Gi RWO 7m18s 可以看到正常绑定
需要注意的是不管PVC多大只要没有超过PV容量大小都正常绑定PV,PV有多大的容量空间就可以使用多大容量的空间。
apiVersion: apps/v1 kind: Deployment metadata: name: pvc-nginx spec: selector: matchLabels: app: pvc-nginx replicas: 2 template: metadata: labels: app: pvc-nginx spec: containers: - name: nginx image: nginx ports: - name: web containerPort: 80 volumeMounts: - name: www mountPath: /usr/share/nginx/html subPath: html volumes: - name: www persistentVolumeClaim: claimName: pvc2-nfs --- apiVersion: v1 kind: Service metadata: name: pvc-nginx spec: type: NodePort ports: - name: web port: 80 targetPort: 80 selector: app: pvc-nginx [root@master ~]# kubectl get svc,pv,pvc service/pvc-nginx NodePort 10.100.178.66 <none> 80:30054/TCP 13m persistentvolume/pvc2-pv 2Gi RWO Recycle Bound default/pvc2-nfs 14m persistentvolumeclaim/pvc2-nfs Bound pvc2-pv 2Gi RWO 13m [root@master k8s]# pwd /data/k8s [root@master k8s]# ll html/ 总用量 4 -rw-r--r--. 1 root root 12 3月 13 15:45 index.html
访问nginx
注意:
删除顺序 pod>pvc>pv
如果删除PV则不影响已挂载的pod但影响新建的pod挂载
删除PVC需要看回收策略是否影响数据持久化
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。