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,一经查实,立即删除!

相关文章

OD C卷 - 寻找最优的路测线路

寻找最优的路测线路(200) 给定一个m行、n列的数组(路线网络),每个值代表当前位置的信号质量,越大信号越好;从 [0, 0] 到 [m-1, n-1]位置的路线中,最小值代表当前路线的评分&#xf…

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

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

springboot项目使用本地依赖项,打包后出现NoClassDefFoundError的一种解决方法

可以把本地依赖项上传到本地仓库后再引用 建立 Maven 本地仓库并将依赖上传到本地仓库 要建立 Maven 本地仓库并将依赖上传到本地仓库,可以按照以下步骤进行操作: 1. 配置 Maven 本地仓库路径 Maven 默认会在用户的主目录下的 .m2/repository 目录创…

基于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 使用自定义…

8月15日

上午开会 rag继续 异构大模型 狂野飙车9之前的账号终于找回来了 下午 关于minicpm的代码 minicpm-v 大模型预训练论文&方法总结 - 知乎 (zhihu.com) 这里有讲解的代码 发现还是先推荐把llava的掌握好了之后再看minicpm 多模态大模型LLaVA模型讲解——transformers源…

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/…

SQL Server事务日志文件过大的处理方法

正常情况下事务日志文件过大时可以右点数据库--任务--收缩--文件--选择日志进行收缩,从而达到减小事务日志文件的目的。 但在有些情况下没有达到执行收缩条件,无法执行收缩: 1、数据库恢复模式 为 完整恢复模式(FULL&#xff09…

c++,python实现网络爬虫

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

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

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

Android高级UI --- canvas

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

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

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

如何上传NPM包:一步步指南

在JavaScript和Node.js开发中,NPM(Node Package Manager)是一个广泛使用的包管理工具。通过NPM,我们可以方便地管理项目中的依赖库,也可以将自己的代码打包发布给其他开发者使用。这篇文章将详细介绍如何将你自己的代码…

电商API 接口的发展会对传统行业产生哪些影响

API 接口的发展会给传统行业带来多方面的影响,具体如下: 提升运营效率与生产力 优化业务流程:以制造业为例,通过 API 接口可将生产设备、管理系统等进行连接,实现设备数据的自动采集与传输,实时监控生产状态…

004、架构_配置文件_总览

配置文件用来配置各模块运行时使用的参数,GoldenDB数据库的配置文件以及文件说明参见 下表: 模块/服务器名称配置文件文件路径配置文件功能CNproxy.ini os.ini dis_info_load.ini$HOME/etc/proxy.ini 配置 CN 运行参数。 os.ini 配置链路信息 ,以及模块启动信 息。 dis_info…

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博…