88、k8s之pv+pvc

一、pv和pvc

pv

pv:Persistent volume

是k8s虚拟化的存储资源,实际上就是存储,例如本地的硬盘,网络文件系统(nfs)

lvm RAID oss(ceph) 云存储。

pvc

pvc:Persistent volume claim

用户对存储资源的请求,定义了需要存储的空间大小,以及对存储空间的访问模式。

有了pvc请求之后 ,和pv进行匹配,匹配到了之后绑定,绑定成功,就可以使用pv的存储空间。

1.1、静态-----手动创建pv

1.2、动态----自动创建pv

在这里插入图片描述

1.3、pv和pvc的生命周期

1、配置 定义pvc的请求详细情况-------匹配pv------绑定-------使用--------释放--------pv回收

pv的状态有四种:

1、Available:可用的,可以被pvc匹配。未绑定状态。

2、bound:已绑定,pv已经被pvc绑定,正在使用。

3、released:已释放,pvc以及被删除,但是pv的资源还没有被回收,pv不可用的状态。

4、failed失败 pv自动回收失败,pv不可用。

1.4、pvc在请求的过程中支持的权限控制选项:

ReadWriteOnce RWO : 存储目录可读,可写,但是这个目录只能被一个pod挂载。

ReadOnlyMany:ROX 存储可以以只读的方式被多个pod挂载

ReadWriteMany:RWX 存储目录可以读写的方式被多个pod挂载

NFS支持以上三种所有模式。

hostPath只支持ReadWriteOnce: 存储目录可读,可写,但是这个目录只能被一个pod挂载。

云存储(对象存储可以支持动态扩缩容)

ISCSI不支持ReadWriteMany

ISCSI是一种在网络上运行SCSI协议的网络存储技术

[root@master01 k8s-yaml]# lsscsi
[0:0:0:0] disk VMware, VMware Virtual S 1.0 /dev/sda
[2:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0

1.5、pv的回收策略:

Retain: 保留

虽然pvc被删除了,但是pv还是处于released的状态,即使恢复到available状态,上一个挂载的数据也不会丢失。

Delete:删除

虽然pvc被删除了,但是pv还是处于released的状态,即使恢复到available状态,数据全部删除

Recycle回收:

虽然pvc被删除了,但是pv还是处于released的状态,pv会自动的对资源进行回收,删除数据,然后pv自动回到available状态。

我们使用的文件系统是nfs共享

nfs共享文件
[root@k8s5 ~]# vim /etc/exports

/data/v1 192.168.168.0/24(rw,no_root_squash)
/data/v2 192.168.168.0/24(rw,no_root_squash)
/data/v3 192.168.168.0/24(rw,no_root_squash)
[root@k8s5 /]# rm -rf data
[root@k8s5 /]# mkdir -p /data/v{1,2,3}
[root@k8s5 /]# cd data
[root@k8s5 data]# ls
v1  v2  v3
[root@k8s5 data]# systemctl restart rpcbind
[root@k8s5 data]# systemctl restart nfs
[root@k8s5 data]# showmount -e
Export list for k8s5:
/data/v3 192.168.168.0/24
/data/v2 192.168.168.0/24
/data/v1 192.168.168.0/24
[root@master01 k8s-yaml]# showmount -e 192.168.168.85
Export list for 192.168.168.85:
/data/v3 192.168.168.0/24
/data/v2 192.168.168.0/24
/data/v1 192.168.168.0/24



pv指定
[root@master01 k8s-yaml]# kubectl explain pv
KIND:     PersistentVolume




[root@master01 k8s-yaml]# vim pv.yaml

#我们定义3个pv,定义目录的路径,访问模式,pv的大小
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
#定义pv使用的文件系统
    server: 192.168.168.85
    path: /data/v1
#如果请求匹配到这个pv,使用的是目标主机的/data/v1
  accessModes: ["ReadWriteOnce"]
#定义访问模式
  capacity:
    storage: 1Gi
#Mi Gi Ti
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv002
  labels:
    name: pv002
spec:
  nfs:
    server: 192.168.168.85
    path: /data/v2
  accessModes: ["ReadWriteMany"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv003
  labels:
    name: pv003
spec:
  nfs:
    server: 192.168.168.85
    path: /data/v3
  accessModes: ["ReadOnlyMany"]
  capacity:
    storage: 3Gi




[root@master01 k8s-yaml]# kubectl apply -f pv.yaml 
persistentvolume/pv001 created
persistentvolume/pv002 created
persistentvolume/pv003 created

[root@master01 k8s-yaml]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
pv001   1Gi        RWO            Retain           Available                                           49m
pv002   2Gi        RWX            Retain           Bound       default/mypvc                           49m
pv003   3Gi        ROX            Retain           Available   




pvc
[root@master01 k8s-yaml]# kubectl explain pvc
KIND:     PersistentVolumeClaim


[root@master01 k8s-yaml]# vim pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes: ["ReadWriteMany"]
  resources:
    requests:
      storage: 2Gi
#我需要pv,权限ReadWriteMany,空间是2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx1
  labels:
    app: nginx1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx1
  template:
    metadata:
      labels:
        app: nginx1
    spec:
      containers:
      - name: nginx1
        image: nginx:1.22
        volumeMounts:
        - name: xy102
          mountPath: /usr/share/nginx/html/
      volumes:
      - name: xy102
        persistentVolumeClaim:
#直接使用pvc的请求把容器内目录挂载pv请求对应的目录。
          claimName: mypvc

[root@master01 k8s-yaml]# kubectl apply -f pvc.yaml 
persistentvolumeclaim/mypvc unchanged
deployment.apps/nginx1 created
[root@master01 k8s-yaml]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
pv001   1Gi        RWO            Retain           Available                                           23m
pv002   2Gi        RWX            Retain           Bound       default/mypvc                           23m
pv003   3Gi        ROX            Retain           Available                                           23m

[root@master01 k8s-yaml]# kubectl exec -it nginx1-7fd846678-jfs42 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@nginx1-7fd846678-jfs42:/# cd /usr/share/nginx/
root@nginx1-7fd846678-jfs42:/usr/share/nginx# ls
html
root@nginx1-7fd846678-jfs42:/usr/share/nginx# cd html/
root@nginx1-7fd846678-jfs42:/usr/share/nginx/html# ls
index.html
root@nginx1-7fd846678-jfs42:/usr/share/nginx/html# cat index.html 
123


[root@master01 k8s-yaml]# kubectl expose deployment nginx1 --port=80 --target-port=80 --type=NodePort
service/nginx1 exposed            ##开启主机和service服务
[root@master01 k8s-yaml]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        9d
nginx1       NodePort    10.96.38.241   <none>        80:30972/TCP   21s
[root@mas
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值