k8s的存储卷之静态

存储卷----数据卷

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

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

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

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

存储的方式

1、emptyDir 容器内部共享存储卷,k8s系统中,是一个pod当中的多个容器共享一个存储卷目录,emptyDir卷可以是pod当中容器在这个存储卷上读取和写入

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

,容器内部共享。lnmp

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-xb
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.22
        name: xb
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
#第一个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者其他容器的共享目录
      - image: nginx:1.22
        name: xb1
        volumeMounts:
        - name: html
          mountPath: /data/
#引用上一个挂载的名称,表示我将和usr/share/nginx/html这个目录挂载,由data目录和它的目录挂载
        command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done']
      volumes:
      - name: html
        emptyDir: {}

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      - name: nginx1
        image: nginx:1.22
        volumeMounts:
        - name: html
          mountPath: /data
        command: ["/bin/bash","-c","while ture; do echo $(date) >> /data/index.html; sleep 2; done"]
      volumes:
      - name: html
        hostPath:
          path: /opt/test
          type: DirectoryOrCreate

3、NFS共享存储

所有pod内的目录都和节点上的nfs共享目录形成数据卷,所有的数据文件都保存在共享目录当中,集中方便管理

在私有仓库上
vim /etc/exports
/data/volumes 20.0.0.0/24(rw,no_root_squash)


在主节点上
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.22
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
#第一个name,存储的名称,可以自定义,mountPath,定义容器内的挂载目录点,和节点或者其他容器的共享目录
      - image: nginx:1.22
        name: nginx1
        volumeMounts:
        - name: html
          mountPath: /data
#引用上一个挂载的名称,表示我将和usr/share/nginx/html这个目录挂载,由data目录和它的目录挂载
        command: ["/bin/bash","-c","while ture; do echo $(date) >> /data/index.html; sleep 2; done"]
      volumes:
      - name: html
        nfs:
          path: /data/volumes
          server: 20.0.0.73

pvs和PV

pv:全称Persistent Volume 持久化存储卷,用来描述和定义一个存储卷,pv是由运维人员来定的

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

pvc-pv是一一对应的关系(描述,存储(大小))

pvc--->pv---?

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

pod内的挂载点声明一个请求pvc请求,pvc会找一个最合适的pv来作为pod的存储卷,pv和共享目录在一一映射,最终由nfs来提供最终的共享存储空间

pvc和pv的请求方式

静态请求

动态请求

pvc和pv之间静态请求,一旦成百个怎么办,所有还有动态pvc

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

pv和pvc之间是有生命周期管理

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

配置:动态 静态

绑定:就是把pv分配给pvc

使用:就是pod通过pvc使用存储资源

释放:pod解除和Volume的关系,删除pvc

回收:保留pv,让下一个pvc使用

pv的状态

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

Bound:绑定,pv已经绑定了pvc,绑定即使用

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

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

pv的读写方式

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

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

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

nfs:可以支持三种读写和挂载方式
ISCSI 不支持
hostPath:支持ReadWriteOnce方式

查看设备上所有的Iscsi

[root@master01 opt]# lsscsi 
[1:0:0:0]    cd/dvd  NECVMWar VMware SATA CD01 1.00  /dev/sr0 
[30:0:0:0]   disk    VMware,  VMware Virtual S 1.0   /dev/sda 


iscsiadm -m session -P 3
iscsiadm   查看服务器是否有iscsi设备
-m session	指定操作的会话模块,管理iscsi的会话
-P 3	显示详细信息的级别,级别就是3,显示详细信息
集群回收pv资源的方式

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

2、Recycle 回收,pv上的数据被删除,挂载点的数据也被删除

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

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

静态
mkdir v{1,2,3,4,5}
vim/etc/perports
/data/v1 20.0.0.0/24(rw,no_root_squash)
/data/v2 20.0.0.0/24(rw,no_root_squash)
/data/v3 20.0.0.0/24(rw,no_root_squash)
/data/v4 20.0.0.0/24(rw,no_root_squash)
/data/v5 20.0.0.0/24(rw,no_root_squash)

systemctl restart rpcbind
systemctl restart nfs
exportfs -arv

节点上查看
showmount -e 20.0.0.73
Export list for 20.0.0.73:
/data/v5      20.0.0.0/24
/data/v4      20.0.0.0/24
/data/v3      20.0.0.0/24
/data/v2      20.0.0.0/24
/data/v1      20.0.0.0/24
/data/volumes 20.0.0.0/24

主节点
vim pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv001
  labels:
    name: pv001
spec:
  nfs:
    path: /data/v1
    server: 20.0.0.73
  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.73
  accessModes: ["ReadWriteOnce"]
  capacity:
    storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv003
  labels:
    name: pv003
spec:
  nfs:
    path: /data/v3
    server: 20.0.0.73
  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.73
  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.73
  accessModes: ["ReadWriteMany","ReadWriteOnce","ReadOnlyMany"]
  capacity:
    storage: 5Gi


查看生成的pv
[root@master01 opt]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv001   1Gi        RWO,RWX        Retain           Available                                   7s
pv002   2Gi        RWO            Retain           Available                                   7s
pv003   2Gi        RWO,RWX        Retain           Available                                   7s
pv004   4Gi        RWO,RWX        Retain           Available                                   7s
pv005   5Gi        RWO,ROX,RWX    Retain           Available                                   7s

vim pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes: ["ReadWriteMany"]
#pvc期望请求的pv的读写挂载类型是什么
  resources:
    requests:
      storage: 2Gi
#pvc 期望请求pv的存储大小是2G,期望的pv类型:ReadWritemany 大小是2G
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-xb
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:1.22
        name: xb
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
      - name: html
        persistentVolumeClaim:
          claimName: mypvc

查看
[root@master01 opt]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM           STORAGECLASS   REASON   AGE
pv001   1Gi        RWO,RWX        Retain           Available                                           144m
pv002   2Gi        RWO            Retain           Available                                           144m
pv003   2Gi        RWO,RWX        Retain           Bound       default/mypvc                           144m
pv004   4Gi        RWO,RWX        Retain           Available                                           144m
pv005   5Gi        RWO,ROX,RWX    Retain           Available                                           144m



pvc --- 请求用哪个pv的存储-----pv和物理存储做映射(挂载)----

删除pvc
[root@master01 opt]# kubectl delete pvc mypvc(会卡)
[root@master01 /]# kubectl delete deployments.apps nginx-xb 
进入kubectl edit pv pv003,删除 claimRef模块

修改pv的资源方式
pv.yaml
......
  accessModes: ["ReadWriteMany","ReadWriteOnce"]
  persistentVolumeReclaimPolicy: Recycle
  capacity:
    storage: 4Gi
.....

查看
[root@master01 opt]# kubectl get pv
NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv001   1Gi        RWO,RWX        Retain           Available                                   151m
pv002   2Gi        RWO            Retain           Available                                   151m
pv003   2Gi        RWO,RWX        Retain           Available                                   151m
pv004   4Gi        RWO,RWX        Recycle          Available                                   151m
pv005   5Gi        RWO,ROX,RWX    Retain           Available                                   151m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++力扣题目110--平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:t…

大数据系列之:腾讯云服务器性能和价格比较

大数据系列之:腾讯云服务器性能和价格比较 一、磁盘性能和价格比较二、高性能云硬盘三、ssd云硬盘四、极速型ssd云硬盘五、增强型ssd云硬盘六、查看腾讯云服务器价格 一、磁盘性能和价格比较 磁盘名称高性能ssd云硬盘极速型ssd云硬盘增强型ssd云硬盘规格500g 5800 …

UM2003A 一款200 ~ 960MHz ASK/OOK +18dBm 发射功率的单发射芯片

UM2003A 是一款工作于 200 ~ 960MHz 频段的单片集成、高性能、可独立运行的 OOK 发射器。内部集成的 OTP 方便用户对各种射频参数以及特色功能进行编程。该芯片以其高集成度和低功耗的设计,特别适用于低成本,低功耗,电池驱动的无线发射应用。…

Unity URP下阴影锯齿

1.概述 在Unity开发的URP项目中出现阴影有明显锯齿。如下图所示: 并且在主光源的Shadow Type已经是Soft Shadows模式了。 2.URP Asset 阴影出现锯齿说明阴影质量不高,所以要先找到URP Asset文件进行阴影质量参数的设置。 1.打开PlayerSetting找到Graph…

切分大文件sql为小份

数据库太大了,整个备份导入出问题或者慢,需要将整个库按照表分割(一个表一个sql文件) 环境 win10 工具:python3.7pycharm 要分割的文件大小:6G,sql文件import redbname with open(best**.sql,…

C++标准学习--多线程

在以往多线程的实现的时候,都是自己去亲自创建线程,采用特殊flag 及锁控制线程的运转状态。这无可厚非,但又似乎有重复造轮子的嫌疑。最近发现了一个线程池的轮子,很不错,ZZ一下。 C多线程线程池(全详解&a…

理解Herbrand Equivalence

笔者最近在看GVN的一系列论文,总会看到一个概念叫Herbran Equivalence,依靠这种定义,能够判断一个GVN算法是否是complete的,也即检测一个算法是否是precise的,只有找到所有Herbrand Equivalence关系的算法才能称得上是…

Python基础知识:整理9 文件的相关操作

1 文件的打开 # open() 函数打开文件 # open(name, mode, encoding) """name: 文件名(可以包含文件所在的具体路径)mode: 文件打开模式encoding: 可选参数,表示读取文件的编码格式 """ 2 文件的读取 文…

18-链表-移除链表元素

这是链表的第18题,力扣链接。 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,…

杨中科 .NET项目结构及程序发布

一样的csproj,不一样的接口 1.文件包含于排除: 2. *.config 文件包含于排除 新建 .netcore 与 .netframework 项目 打开framework 项目文件位置 打开 frameworkConsoleApp1.csproj文件 查看 .netcore的CoreconsoleApp2.csproj文件 该文件十分简洁 改变版本…

springCould中的Bus-从小白开始【11】

目录 🧂1.Bus是什么❤️❤️❤️ 🌭2.什么是总线❤️❤️❤️ 🥓3.rabbitmq❤️❤️❤️ 🥞4.新建模块3366❤️❤️❤️ 🍳5.设计思想 ❤️❤️❤️ 🍿6.添加消息总线的支持❤️❤️❤️ &#x1f9…

java将word转换成pdf,并去除水印

注意我这里只是将word字节替换成pdf字节&#xff0c;如果是文件根据自己实际情况来做 1、所需jar包 <dependency><groupId>com.aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0</version></dependency&g…

模拟超市商品结算系统

要求:全程一个角色(管理员即用户) (1)需要管理员注册与登录 (2)管理员登录之后&#xff0c;可以进行上架新的商品(商品名称和单价) (3)管理员登录之后&#xff0c;也可以下架商品 (4)在节假日有优惠活动,可以对其中的一些商品修改相应的单价(价格提高和价格降低都可以) (5)用户…

JavaScript中alter、confrim、prompt的区别及使用

文章目录 一、alter1.什么是alert&#xff1f;2.alter的使用 二、confrim1.什么是confrim&#xff1f;2.confrim的使用 三、prompt1.什么是prompt&#xff1f;2.prompt的使用 四、总结alter、confrim、prompt的区别 一、alter 1.什么是alert&#xff1f; 在JavaScript中&…

在线问卷调查的优势:提升数据收集与分析效率的关键要素

无论是在工作中还是学习中&#xff0c;我们经常会使用问卷调查法来解决一些问题。不过&#xff0c;问卷调查有两种形式——线上和线下&#xff0c;这两者之间有什么优势和不足呢&#xff1f; 纸质问卷&#xff1a; 1、优势&#xff1a; 我们在使用纸质问卷的时候&#xff0c;通…

如何在Win10电脑接收苹果手机日程提醒呢?

有很多小伙伴手机使用的是iPhone苹果手机&#xff0c;但办公电脑使用的win10系统的电脑&#xff0c;这时候如果想要在win10电脑上同步接收苹果手机上设置的日程提醒&#xff0c;该怎么操作呢&#xff1f;如何在win10电脑接收苹果手机日程提醒呢&#xff1f; 如果你设置的日程提…

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行

目录 1. &#x1f959;collect_list: 聚合-不去重 2. &#x1f959;collect_set(col): 聚合-去重 3. &#x1f959;mysql的聚合函数-group_concat 4. leetcode练习题 1. &#x1f959;collect_list: 聚合-不去重 将组内的元素收集成数组 不会去重 2. &#x1f959;collec…

C++指针小练习

双色球统计1-33个数字出现的次数(很详细) 做这个题一定要注意审题:题目要求是统计1-33个数字出现的次数,而不是前六个数字出现的次数 算法设计: ①:用一个数组p1来保存每一行的数据,再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0, ②…

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】 1.MySQL和MybatisPlus简介2.maven依赖3.配置1.在application.yaml配置中加入mysql配置2.新增Mybatis-Plus配置类 4.参考文章 1.MySQL和MybatisPlus简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;被广泛应用…

linux中出现不在 sudoers 文件中。此事将被报告的解决方法

出现如下提示gaokaoli 出现不在 sudoers 文件中。此事将被报告 一般是该用户 权限不够 既然知道权限不够可以添加到root用户组&#xff0c;获取权限即可 通过命令行添加到权限&#xff0c;发现还是不行 sudo usermod -g root gaokaoli 那就直接在配置文件中修改 通过执行vi…