k8s-数据卷

存储卷----数据卷

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

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

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

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

  1. emptyDir 

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

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

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

只能用于内部共享

演示:

进入容器:

  1. hostPath:

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

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

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

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

EmptyDir被驱逐,数据会丢失

演示

查看不同pod输出的日志

第三种

NFS共享存储方式:

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

验证

用主机名做

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

每个主机都做映射

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的抽象的虚拟化的存储资源

结构图:

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静态和资源回收方式:

映射(全部)

发布

每个节点查看:

vim pv.yml

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

定义一个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

选择了PV003

测试:

怎么删除PVC

删不掉,因为pod还在

怎么删呢,删除pod

处在回收状态

怎么让其回到可用状态

kubectl edit pv pv003

回到了available状态

配置回收策略

persistentVolumeReclaimPolicy: Recycle

稍微等等

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

persistentVolumeReclaimPolicy: Delete

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

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

怎么恢复:

总结:

k8s当中存储卷的模式:

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

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

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

PV和PVC

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

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

hostPath仅支持readwriteOnce方式

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

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

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

谁合适选谁

保留:默认可以不写

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

粒子群算法优化RBF神经网络回归分析

目录 完整代码和数据下载链接:粒子群算法优化RBF神经网络回归分析(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88738570 RBF的详细原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,基于rbf的空调功率预测 代码 结果分析 展望…

通过Wireshark抓包分析谈谈DNS域名解析的那些事儿

原创/朱季谦 本文主要想通过动手实际分析一下是如何通过DNS服务器来解析域名获取对应IP地址的,毕竟,纸上得来终觉浅,绝知此事要躬行。 一、域名与IP地址 当在浏览器上敲下“www.baidu.com”时,一键回车,很快&#x…

Linux远程登陆协议ssh

目录 一、SSH服务 1. ssh基础 2. 原理 3. 服务端配置 3.1 常用配置项 3.2 具体操作 3.2.1 修改默认端口号 3.2.2 禁止root用户登录 3.2.3 白名单列表 3.2.4 黑名单列表 3.2.5 使用秘钥对及免交互验证登录 3.2.6 免交互式登录 一、SSH服务 1. ssh基础 SSH&…

VQE音频处理流程

VQE 上行VQE,主要针对MIC采集部分的音频增强 下行VQE,主要针对SPK播放部分的音频增强 附关键词解释 RES RES 模块为重采样(Resampler)模块。当AI上行或AO下行通路中开启VQE 各功能 模块时,在处理前后各存在一次重采样…

c语言实现b树

概述:B 树(B-tree)是一种自平衡的搜索树数据结构,广泛应用于数据库和文件系统等领域。它的设计旨在提供一种高效的插入、删除和查找操作,同时保持树的平衡,确保各个节点的深度相差不大。 B 树的特点包括&a…

怎么使用好爬虫IP代理?爬虫代理IP有哪些使用技巧?

在互联网时代,爬虫技术被广泛应用于数据采集和处理。然而,在使用爬虫技术的过程中,经常会遇到IP被封禁的问题,这给数据采集工作带来了很大的困扰。因此,使用爬虫IP代理成为了解决这个问题的有效方法。本文将介绍如何使…

Java中泛型和Object类型 初级进阶教程(一)

在学习的过程中&#xff0c;常常看到某个类或者接口等中使用 List<T>, Test<T>&#xff0c;其中<T>的作用是什么呢&#xff1f; 1 在类中使用泛型 public class Box<T> {private T content;public void setContent(T content) {this.content conten…

深度学习与药物发现在健康衰老中的应用

深度学习是一种模拟人脑神经网络处理信息的方法&#xff0c;其已在语音、图像、自然语言等处理中发挥了巨大作用。但在健康衰老这一领域的应用中&#xff0c;它面临着很多挑战。 首先&#xff0c;健康衰老是一个复杂的生物学过程&#xff0c;涉及众多因素&#xff0c;如基因、…

Linux———top命令详解(狠狠爱住)

top 命令 是一个常用的系统性能监测工具&#xff0c;它可以实时显示系统中各个进程的状态和资源占用情况。 启动 top 命令&#xff1a; 直接在终端输入 top 命令即可启动。默认情况下&#xff0c;top 显示的是按照 CPU 使用率排序的进程列表。 功能键说明&#xff1a; h&…

【redis基础1】基础数据类型详解和应用案例

博客计划 &#xff0c;我们从redis开始&#xff0c;主要是因为这一块内容的重要性不亚于数据库&#xff0c;但是很多人往往对redis的问题感到陌生&#xff0c;所以我们先来研究一下。 本篇&#xff0c;我们先看一下redis的基础数据类型详解和应用案例。 1.redis概述 以mysql为…

文章测试测试

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

xtu oj 1340 wave

题目描述 一个n列的网格&#xff0c;从(0,0)网格点出发&#xff0c;波形存在平波(从(x,y)到(x1,y))&#xff0c;上升波(从(x,y)到(x1,y1))&#xff0c;下降波(从(x,y)到(x1,y−1))三种波形&#xff0c;请问从(0,0)出发&#xff0c;最终到达(n,0)的不同波形有多少种&#xff1f…

C++PythonC# 三语言OpenCV从零开发(1):环境配置

文章目录 前言课程选择环境配置PythonC#COpenCV官网下载新建C项目测试运行Csharp版Python版 gitee仓库总结 前言 由于老王我想转机器视觉方向的上位机行业&#xff0c;我就打算开始从零学OpenCV。但是目前OpenCV有两个官方语言&#xff0c;C和Pyhont。C# 有大佬做了对应的Open…

快速幂板子

快速幂是快速算 a 的 c 次幂 原理&#xff1a; 我们用分治思想是比一个一个乘快的 即比如我们求a的8次方 &#xff1a;a1*a1 a2 ,那么我们直接a2*a2 a4&#xff0c;a4*a4 a8 参数就是几次幂。返回值是对应参数的幂 &#xff08;这里对p取余了&#xff09;(一般也把a当参数…

vue 自定义网页图标 favicon.ico 和 网页标题

效果预览 1. 添加配置 vue.config.js 在 module.exports { 内添加 // 自定义网页图标pwa: {iconPaths: {favicon32: "./favicon.ico",favicon16: "./favicon.ico",appleTouchIcon: "./favicon.ico",maskIcon: "./favicon.ico",msTil…

Java进阶第一天

Java进阶第一天 文章目录 Java进阶第一天双列集合特点Map的常见APIMap集合的遍历方式 双列集合 特点 双列集合一次需要存一对数据,分别是键和值(键值对)键不能重复,值可以重复键和值一一对应 Map的常见API Map是双列集合的顶层接口,它的功能是全部双列集合都可以继承使用的…

memory泄露分析方法(java篇)

#memory泄露主要分为java和native 2种&#xff0c;本文主要介绍java# 测试每天从monkey中筛选出内存超标的app&#xff0c;提单流转到我 首先&#xff0c;辨别内存泄露类型&#xff08;java&#xff0c;还是native&#xff09; 从采到的dumpsys_meminfo_pid看java heap&…

【ROS2】使用C++实现简单的发布订阅方

1 构建自定义数据类型 1、自定义消息类型Student 1.1 创建base_interfaces_demo包 1.2 创建Student.msg文件 string name int32 age float64 height 1.2 在cmakeLists.txt中增加如下语句 #增加自定义消息类型的依赖 find_package(rosidl_default_generators REQUIRED) # 为…

C++ namespace高级用法

高级用法 C++中的命名空间(namespace)是一种用于组织代码的机制,它可以帮助避免命名冲突,并使代码更加清晰和易于维护。以下是C++命名空间的一些高级用法: 嵌套命名空间:命名空间可以嵌套在其他命名空间中,形成一个层次结构。嵌套命名空间可以进一步细化命名空间,使其更…

k8s operator从0到1实践

文章目录 环境准备一个k8s集群开发工具包mac安装 实践初始化operator项目核心逻辑编写测试验证验证 部署 参考 环境准备 一个k8s集群 推荐使用docker-desktop&#xff0c;本地单机集群 开发工具包 这里推荐使用脚手架工具kubebuilder 使用脚手架工具&#xff0c;能生成项目…