k8s-数据卷

存储卷----数据卷

容器内的目录和宿主机的目录进行挂载

容器在系统上的生命周期是短暂的,delete,k8s用控制创建的pod,delete相当于重启,容器的状态也会恢复到初识状态

一旦容器回到初始状态,所有得分后天编辑的文件都会消失

容器和所有节点之间创建一个可以持久化保存容器内文件的存储卷,即使容器被销毁,删除,重启,节点上的存储卷的数据依然存在,后续也可以继续使用,可以继续将容器内目录和宿主机进行挂载,保存的数据继续使用

  1. emptyDir 

容器内部共享存储卷,k8s系统中,是一个pod当中的多个容器共享一个存储卷目录

EmptyDir卷可以是pod当中容器在这个存储卷上读取和写入

EmptyDir是不能挂载到节点的,随着pod的生命周期结束,emptyDir也会结束,数据也不会保留

只能用于内部共享

演示:

k8s-数据卷_第1张图片

k8s-数据卷_第2张图片

进入容器:

k8s-数据卷_第3张图片

  1. hostPath:

将容器内的挂载点,和节点上的目录进行挂载,hostpath可以实现数据持久化,node节点将会被销毁,那么数据也就会丢失

污点设置为NoExecute:节点上的pod会被驱逐,文件数据在不在?

Pod被驱逐,并不是node节点被销毁,所有的数据还保留在节点上

Pod被驱逐(基于控制器创建的),会在其他节点继续部署,又会在其他节点生成一个新的存储卷,数据依然可以持久化

EmptyDir被驱逐,数据会丢失

演示

k8s-数据卷_第4张图片

k8s-数据卷_第5张图片

查看不同pod输出的日志

k8s-数据卷_第6张图片

第三种

NFS共享存储方式:

所有的pod内部的目录都和节点上的NFS共享形成数据同步,所有文件都将保存在一个目录当中,便于管理

k8s-数据卷_第7张图片

k8s-数据卷_第8张图片

k8s-数据卷_第9张图片

k8s-数据卷_第10张图片

k8s-数据卷_第11张图片

验证

k8s-数据卷_第12张图片

k8s-数据卷_第13张图片

k8s-数据卷_第14张图片

用主机名做

k8s-数据卷_第15张图片

找不到,挂载卷因为没有映射

k8s-数据卷_第16张图片

每个主机都做映射

k8s-数据卷_第17张图片

HostPath和NFS是我们常用的方式,推荐使用NFS

PVC和PV(必问)

PV:全称persistent volume持久化存储卷,描述和定义一个存储卷,PV是由我们运维人员来定的

PVC:全称persistent Volume Claim 持久化存储的请求,PVC实际上是用来描述或者声明我希望使用什么样PV来进行存储

PVC---->pv------NFS 意思就是说,PVC请求PV

PVC是发起一个请求,PVC是提供一个虚拟化的存储卷

PVC和PV都是虚拟的概念,是k8s的抽象的虚拟化的存储资源

结构图:

k8s-数据卷_第18张图片

PVC和PV之间的静态请求,一旦百个PVC怎么办,所有引申出了动态请求

PV是集群当中的存储资源,PVC请求存储资源,也是对存储资源的一个索引(检查索引),选择一个最合适的PV来存储资源

PV和PVC之间是有生命周期管理:

Provisioning(配置)------PVC请求request-----检索(找一个合适的PV)----PVC和PV(binding绑定)----使用---pod被删除-------PV的releasing(释放)-------recycling(回收)

配置:静态,动态

绑定:就是把PV分配给PVC

使用:就是pod通过PVC使用存储资源---NFS

释放:pod解除和挂载卷volume的关系,删除PVC

回收:保留PV,让下一个PVC使用

PV的状态:

Available:可用,而且没有被任何PVC绑定

Bound:绑定,PV已经绑定了PVC,绑定即使用

Released:释放,PVC已经被删除了,但是PV的存储资源还没有被集群回收

Failed:表示PV资源回收失败,而且PV为不可用状态

ReadWriteOnce: RWO,配置文件里面是全称,存储PV可读可写,但是只能被单个pod挂载

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

ReadWriteMany:RWX 存储可以支持读写的方式被多个pod共享

EmptyDir:不考虑

NFS:可以支持以上三种读写和挂载方式

ISCSI:不支持ReadWriteMany

hostPath:只支持ReadWriteOnce方式

iscsiadm -m session -P 3查看服务器是否有iscsi设备

-m session:指定操作的会话模块,管理iscsi会话

-P 3:显示详细信息的级别,级别就是3,显示详细信息

集群回收PV资源的方式:

Retain保留,pod和挂载点的数据不会被删除

Recycle:回收,PV上的数据被删除,挂载点的数据也被删除

Delete:淡出,解绑时,自动删除PV上的数据。(本地硬盘不能使用,AWS,EBD,GCE)支持动态卷的可以使用,PV不再可用(云平台自己处理)

补充:当pod运行之后,通过PVC请求到了PV,除非pod被销毁,否则无法删除PVC

演示PVC静态和资源回收方式:

k8s-数据卷_第19张图片

映射(全部)

k8s-数据卷_第20张图片

k8s-数据卷_第21张图片

发布

k8s-数据卷_第22张图片

每个节点查看:

k8s-数据卷_第23张图片

k8s-数据卷_第24张图片

vim pv.yml

k8s-数据卷_第25张图片

k8s-数据卷_第26张图片

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv001

  labels:

    name: pv001

spec:

  nfs:

    path: /data/v1

    server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 1Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv002

  labels:

    name: pv002

spec:

  nfs:

    path: /data/v2

    server: 20.0.0.74

  accessModes: ["ReadWriteOnce"]

  capacity:

    storage: 2Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv003

  labels:

    name: pv003

spec:

  nfs:

    path: /data/v3

    server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 2Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv004

  labels:

    name: pv004

spec:

  nfs:

    path: /data/v4

    server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 4Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

  name: pv005

  labels:

    name: pv005

spec:

  nfs:

   path: /data/v5

   server: 20.0.0.74

  accessModes: ["ReadWriteMany","ReadWriteOnce"]

  capacity:

    storage: 5Gi

k8s-数据卷_第27张图片

k8s-数据卷_第28张图片

定义一个PVC请求:

vim pvc.yml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: mypvc

spec:

  accessModes: ["ReadWriteMany"]

#pvc期望请求的PV的读写挂载类型是什么

  resources:

    requests:

      storage: 2Gi

#PVC期望请求PV的存储大小是2G。上面合起来的意思:期望读写模式:ReadWriteMany 并且大小是2G

---

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: nginx

  name: nginx

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - image: nginx:1.22

        name: nginx

        volumeMounts:

        - name: html

          mountPath: /usr/share/nginx/html

      volumes:

      - name: html

        persistentVolumeClaim:

          claimName: mypvc

k8s-数据卷_第29张图片

k8s-数据卷_第30张图片

k8s-数据卷_第31张图片

选择了PV003

k8s-数据卷_第32张图片

测试:

k8s-数据卷_第33张图片

k8s-数据卷_第34张图片

怎么删除PVC

k8s-数据卷_第35张图片

删不掉,因为pod还在

怎么删呢,删除pod

k8s-数据卷_第36张图片

处在回收状态

k8s-数据卷_第37张图片

怎么让其回到可用状态

kubectl edit pv pv003

k8s-数据卷_第38张图片

回到了available状态

k8s-数据卷_第39张图片

配置回收策略

persistentVolumeReclaimPolicy: Recycle

k8s-数据卷_第40张图片

k8s-数据卷_第41张图片

k8s-数据卷_第42张图片

k8s-数据卷_第43张图片

k8s-数据卷_第44张图片

稍微等等

k8s-数据卷_第45张图片

也就是挂载内容被回收,也就是被删除了

k8s-数据卷_第46张图片

persistentVolumeReclaimPolicy: Delete

k8s-数据卷_第47张图片

k8s-数据卷_第48张图片

先删pod,再删PVC,删除之后数据卷还在

k8s-数据卷_第49张图片

k8s-数据卷_第50张图片

动态卷是要删除的,这里还在,只是演示一下

怎么恢复:

k8s-数据卷_第51张图片

k8s-数据卷_第52张图片

总结:

k8s当中存储卷的模式:

EmptyDir:用于容器内共享,随着pod被销毁,也会被销毁,数据不保留

hostPath:节点目录的存储卷,可以实现存储化存储,数据在每个节点上都有,不方便集中管理

NFS:共享目录存储卷,既可以实现持久化,也可以数据集中在一个目录,方便管理

PV和PVC

PVC是一种请求----PV存储资源----------硬盘空间(NFS)

NFS支持PVC的所有挂载方式和读写模式

hostPath仅支持readwriteOnce方式

PVC是以检索的方式找到匹配的PV资源

检索挂载方式和读写模式:

检索PV能提供的存储资源的大小

谁合适选谁

保留:默认可以不写

回收:自动回收,节点上的数据会被删除

删除:PV会变成failed模式,不可用,数据也会被删除

你可能感兴趣的:(kubernetes,docker,容器)