K8S持久化存储数据volumeMountsvolumes

环境:

Ubuntu-1:192.168.114.110作为主

Ubuntu-2:192.168.114.120作为从1,node节点1

Ubuntu-3:192.168.114.130作为从2,node节点2

持久化volumeMounts

pod里面:emptyDir和hostPath。存储在node,NFS...,Cloud

当创建若干个pod后,其容器中的重要数据需要持久化存储,但如果删除了一个pod,则这个容器中的所有数据都将清空,故需要将容器中的数据持久化存储。那么就引入了两个持久化的机制:volumes和volumeMounts。

volumeMounts是pod中的容器内部中的持久化的数据,将其内部的数据挂载到指定的持久化存储目录下。而volumes则是被pod挂载访问的存储目录。它支持同一个pod下的多个容器挂载到该目录下,来达到共享数据的目的。

在持久化存储中,有两种方式:emptyDir,hostPath方式

emptyDir:

emptyDir:当Pod因为某些原因被从节点上删除时,emptyDir卷中的数据也会被永久删除。

  volumeMounts:- moutPath: /cachename: cache-volume
volumes:
- name: cache-volumeemptyDir: {}

emptyDir验证:

写一个yaml文件:vim empty.yaml

[root@Node-1 data]#:cat empty.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-empty-dir
spec:containers:- name: empty-dir-containerimage: harbor.hiuiu.com/nginx/nginx:1.21.5volumeMounts:- mountPath: /cachename: cache-volumevolumes:- name: cache-volumeemptyDir: {}

metadata:

  name: pod-empty-dir     #pod的名字

spec:

  containers:

  - name:empty-dir-container                #镜像的名字

    image: harbor.hiuiu.com/nginx/nginx:1.21.5            #镜像,最好在node节点上有本地镜像

    volumeMounts:                #指定容器中的路径,挂载点

    - mountPath: /cache                #容器中的目录,会自动创建/cache/这个目录

      name: chache-volume                #卷名

  volumes:                                #本地挂载点,系统的路径下,默认在/var/lib/kubelet/pods/下

  - name: cache-volume                #与volumeMounts中的名字一致

    emptyDir: {}                        #emptyDir类型

创建pod:

[root@Node-1 data]#:kubectl apply -f empty.yaml 
pod/pod-empty-dir created

 查看调度到了哪个node节点上,通过kubectl get pod -o wide发现调度到了从2上,也就是node-3节点。

通过yaml的形式展示出来,过滤出pod的uid。

去从2节点node-3上查看:

[root@Node-3 ~]#:cd /var/lib/kubelet/pods
[root@Node-3 pods]#:ls
20ddc71d-281f-4919-abe7-47c18ecda2f4  e0f4f44f-d8dc-407f-a07e-4a72ba4c9bc3
21b8e3bc-aa44-4dea-9ed7-beac6028ba76
[root@Node-3 pods]#:cd 20ddc71d-281f-4919-abe7-47c18ecda2f4/volumes/kubernetes.io~empty-dir/cache-volume/
[root@Node-3 cache-volume]#:ls
[root@Node-3 cache-volume]#:

这里为空。我们去主node-1上。进入pod里面到/cache/下,创建文件和文件夹。看在node-3上是否生成我们创建的。

[root@Node-1 data]#:kubectl exec -it pod-empty-dir bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod-empty-dir:/# cd /cache/
root@pod-empty-dir:/cache# ls
root@pod-empty-dir:/cache# touch 123
root@pod-empty-dir:/cache# mkdir abc
root@pod-empty-dir:/cache# ls
123  abc
root@pod-empty-dir:/cache# exit
exit
[root@Node-1 data]#:

在node-3上的目录下查看是否创建了abc文件夹和123文件:

[root@Node-3 cache-volume]#:ls
[root@Node-3 cache-volume]#:
[root@Node-3 cache-volume]#:
[root@Node-3 cache-volume]#:ls
123  abc

但如果我们删除了pod后,在node-3上的数据也就一并删除消失:

[root@Node-1 data]#:kubectl delete -f empty.yaml 
pod "pod-empty-dir" deleted
[root@Node-1 data]#:kubectl get pod 
NAME    READY   STATUS    RESTARTS       AGE
nginx   1/1     Running   10 (55m ago)   6d7h

主上操作删除pod后,去node-3上查看,看是否还存在文件夹abc和123文件:

hostPath:

编写yaml文件:vim hostpath.yaml

[root@Node-1 data]#:cat hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-hostpath-dir
spec:containers:- name: host-dir-containerimage: harbor.hiuiu.com/nginx/nginx:1.21.5volumeMounts:- mountPath: /usr/share/nginx/htmlname: nginx-volumevolumes:- name: nginx-volumehostPath:path: /data/nginxtype: DirectoryOrCreate

解释说明:

volumes:

- name: nginx-volume                #改名字与volumeMounts.name的名字相同

  hostPath:                                #hostPath形式

    path: /data/nginx                        #指定本地挂载点的路径,在/data/nginx/下

    type: DirectoryOrCreate         #类型指定为DirectoryOrCreate ,如果本地没有这个路径就自动创建

运行创建pod:发现调度到了node-3上。

那么去node-3上查看:发现自动创建了/data/nginx/挂载共享目录。

在主上进入容器中的/usr/share/nginx/html/路径下,创建文件夹和文件,在本地的/data/nginx/下查看是否有我们创建的文件夹和文件。

[root@Node-1 data]#:kubectl exec -it pod-hostpath-dir bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod-hostpath-dir:/# touch /usr/share/nginx/html/123
root@pod-hostpath-dir:/# mkdir /usr/share/nginx/html/abc
root@pod-hostpath-dir:/# exit
exit
[root@Node-1 data]#:

在node-3上查看:

有了我们创建的文件夹和文件。在hostPath类型下,我们删除pod后,node-3上的/data/nginx/下的数据不会被删除。

查看node-3上的/data/nginx/下是否还存在文件夹abc和文件123

依旧存在!实现了数据的持久化存储。相比于emptyDir来说,emptyDir更适合存储一些临时数据。hostPath适合存储永久存储的数据,不丢失。

除此之外,还可以将容器中的多个目录挂载到本机的一个目录挂载点下。

[root@Node-1 data]#:cat hostpath.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-hostpath-dir
spec:containers:- name: host-dir-containerimage: harbor.hiuiu.com/nginx/nginx:1.21.5volumeMounts:- mountPath: /usr/share/nginx/htmlname: nginx-volume- mountPath: /dataname: nginx-volume- mountPath: /mntname: nginx-volumevolumes:- name: nginx-volumehostPath:path: /datas/nginxtype: DirectoryOrCreate

/usr/share/nginx/html

/data

/mnt

都挂在到node节点的/datas/nginx/下

可以发现,调度在了node-3上。在node-3上查看。还没有任何数据。

[root@Node-3 ~]#:cd /datas/nginx/
[root@Node-3 nginx]#:ls
[root@Node-3 nginx]#:

我们在主上进入容器,在三个挂载的共享目录下创建文件,再在node-3上的/datas/nginx/查看:

 我们分别在/usr/share/nginx/html/下创建了aaa文件。在/data/下创建了bbb文件。在/mnt/下创建了ccc文件。

[root@Node-1 data]#:kubectl exec -it pod-hostpath-dir bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@pod-hostpath-dir:/# touch /usr/share/nginx/html/aaa
root@pod-hostpath-dir:/# touch /data/bbb
root@pod-hostpath-dir:/# touch /mnt/ccc
root@pod-hostpath-dir:/# exit
exit
[root@Node-1 data]#:

去node-3上查看。发现同时是挂载了容器中的三个目录。持久化的三个目录的数据。

这里在本机的目录下,可以对数据大小做个限制,比如在/datas/nginx/下持久化的数据量不超过500M的数据。

emptyDir:sizeLimit: 500Mi		#限额,在本机默认的路径下,限制500M的数据

---end---

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

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

相关文章

高斯混合模型原理及Python实践

高斯混合模型(Gaussian Mixture Model,简称GMM)是一种统计学中的概率模型,用于表示由多个高斯分布(正态分布)混合组成的数据集合。其核心原理基于假设数据集中的每个数据点都是由多个潜在的高斯分布之一生成…

基于Modbus的MFC智能控制

1. 系统概述 利用LabVIEW通过Modbus 485协议实现对七星(Sevenstar)品牌质量流量控制器(MFC)的智能化控制。该系统将自动控制多个MFC的流速,实时监控其状态,并根据需要进行调整。 2. 硬件配置 MFCs: 七星品…

JavaScript学习文档(7):Web API、获取DOM对象、操作元素内容、元素属性、定时器-间歇函数

目录 一、Web API 1、作用和分类 2、DOM是什么 3、DOM树 4、DOM对象 (1)DOM对象如何创建的? (2)DOM对象怎么创建的? 二、获取DOM对象 1、根据CSS选择器来获取DOM元素 (1)选择匹配的第一个元素 …

Spring(2)

目录 一、使用注解开发 1.1 主要注解 1.2 衍生注解 1.3 xml与注解 二、使用Java的方式配置Spring 三、代理模式 3.1 静态代理 3.1.1 角色分析 3.1.2 代码步骤 3.1.3 优点 3.1.4 缺点 3.2 动态代理 3.2.1 代码步骤 四、AOP 4.1 使用Spring的API接口 4.2 使用自定义…

YoloV8改进策略:卷积篇|ACConv2d模块在YoloV9中的创新应用与显著性能提升|简单易用_即插即用

摘要 在本文中,我们创新性地将ACConv2d模块引入到YoloV9目标检测模型中,通过对YoloV9中原有的Conv卷积层进行替换,实现了模型性能的大幅提升。ACConv2d模块基于不对称卷积块(ACB)的设计思想,利用1D非对称卷…

sql server导入mysql,使用工具SQLyog

概述 需要将sql server的数据导入到mysql中,由于2种数据库存在各种差异,比如表字段类型就有很多不同,因此需要工具来实现。 这里使用SQLyog来实现。 SQLyog安装 安装过程参考文档:https://blog.csdn.net/Sunshine_liang1/article/…

c++,python实现网络爬虫

前言: 社交网络中用户生成的海量数据,社交网络数据的多样性和复杂性 如何高效地从海量的数据中获取和处理我们需要的信息资源? 该微博爬虫能够从社交网络平台中地提取文本、图片和用户之间的转发关系,并将这些数据结构化存储到…

【图论】Tarjan算法(强连通分量)

一、Tarjan算法简介 Tarjan算法是一种由美国计算机科学家罗伯特塔杨(Robert Tarjan)提出的求解有向图强连通分量的线性时间的算法。 二、强连通分量的概念 在有向图 G G G 中,如果任意两个不同的顶点相互可达,则称该有向图是强…

Android高级UI --- canvas

前言 我们先来聊聊,在我们生活中如何绘制一张如下的图。 我们需要两样东西来绘制: 一张纸(Android 中的 canvas):用来承载我们绘制的内容。一支笔(Android 中的 paint):负责绘制内…

(QT-UI)十四、在时间轴上绘制一段段时间片

本系列预计实现 ①刻度上方文字显示, ②时间轴拖动效果, ③时间轴刻度缩放, ④时间轴和其他控件联动显示, ⑤鼠标放置到时间轴,显示具体时间。 ⑥通过定时器,实时更新时间轴 ⑦时间轴上绘制时间片 完…

linux系统使用 docker 来部署web环境 nginx+php7.4 并配置称 docker-compose-mysql.yml 文件

Docker是一个开源的容器化平台,旨在简化应用程序的创建、部署和管理。它基于OS-level虚拟化技术,通过将应用程序和其依赖项打包到一个称为容器的标准化单元中,使得应用程序可以在任何环境中快速、可靠地运行。 Docker的优势有以下几个方面&a…

重发布实验

一、实验拓扑 二、实验需求 1.如图搭建网络拓扑,所有路由器各自创建一个环回接 口,合理规划IP地址 2.R1-R2-R3-R4-R6之间使用OSPF协议,R4-R5-R6之间使用 RIP协议 3.R1环回重发布方式引入OSPF网络 4.R4/R6上进行双点双向重发布 5.分析网络中出…

VScode | 我想推荐这些插件,好用

系列文章目录 本系列文章主要分享作位前端开发的工具之------VScode的使用分享。 VScode | 我的常用插件分享_vscode 别名跳转-CSDN博客 VScode | 我的常用代码片段,提升开发速度-CSDN博客 VScode | 我会设置文件夹右键用VScode打开_vscode右键打开文件夹-CSDN博…

如何使用ssm实现基于ssm的“游侠”旅游信息管理系统

TOC ssm190基于ssm的“游侠”旅游信息管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化&#x…

RocketMQ~刷盘机制、主从复制方式、存储机制

刷盘机制 生产者发布MQ给Brocker,Brocker在存储这些数据的时候,需要进行刷盘,分为同步刷盘和异步刷盘。 在同步刷盘中需要等待一个刷盘成功的ACK,同步刷盘对MQ消息可靠性来说是一种不错的保障,但是性能上会有较大影响…

GoWeb 设置别名和多环境配置

别名 vite.config.ts中添加代码如下即可 //设置别名resolve: {alias: {"": path.resolve(process.cwd(),"src"),//用替代src}}随后即可使用 配置多环境 vite.config.ts中添加代码如下 envDir: ./viteenv,//相对路径随后在项目根目录创建对应的viteenv…

【游戏速递】 小猪冲刺:萌动指尖的极速挑战,小虎鲸Scratch资源站独家献映!

在线玩:Scratch小猪冲刺:全新挑战的几何冒险游戏-小虎鲸Scratch资源站 想象一下,一群憨态可掬的小猪,穿上炫酷的装备,踏上了追逐梦想的赛道。它们或跳跃、或滑行,灵活躲避各种障碍,只为那终点的…

Web API 学习笔记 第四弹

1.时间戳 获取时间戳的方法①date.getTime()②new Date() 2.定时器 console.log(111)setTimeout(()>{console.log(222)},1000)console.log(333) console.log(111)setTimeout(()>{console.log(222)},0)console.log(333) 这两段代码打印结果分别是? 第一段 …

【STM32】驱动OLED屏

其实我没买OLED屏哈哈哈,这个只是学习了,没机会实践。 大部分图片来源:正点原子HAL库课程 专栏目录:记录自己的嵌入式学习之路-CSDN博客 目录 1 显示原理 2 读写方式:8080并口 2.1 支持的指令类型 2.2 …

【Tesla FSD V12的前世今生】从模块化设计到端到端自动驾驶技术的跃迁

自动驾驶技术的发展一直是全球汽车行业的焦点,Tesla的Full-Self Driving(FSD)系统凭借其持续的技术革新和强大的数据支持,在这个领域独占鳌头。本文将深入介绍Tesla FSD V12的演进历史,从自动驾驶的基础概念入手&#…