k8s:PVC 的使用
PVC 的使用在我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在Node 上而已,准备工作在使用 PVC 之前,我们还得把其他节点上的 nfs 客户端给安装上我们需要在所有节点安装 nfs 客户端程序,安装方法和上节课的安装方法一样的。必须在所有节点都安装 nfs 客户端,否则可能会导致 PV 挂载不上的问题新建 PVC新建一个数
PVC 的使用
在我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在Node 上而已,
准备工作
在使用 PVC 之前,我们还得把其他节点上的 nfs 客户端给安装上
我们需要在所有节点安装 nfs 客户端程序,安装方法和上节课的安装方法一样的。必须在所有节点都安装 nfs 客户端,否则可能会导致 PV 挂载不上的问题
新建 PVC
新建一个数据卷声明,请求 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有多大的容量空间就可以使用多大容量的空间。
使用 PVC
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需要看回收策略是否影响数据持久化
更多推荐
所有评论(0)