探索k8s集群的存储卷 emptyDir hostPath nfs

目录

一 含义

查看支持的存储卷类型

emptyDir存储卷  

1.1 特点

1.2 用途 

1.3部署 

二、hostPath存储卷 


一 含义

容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在Pod中同时运行多个容器时,这些容器之间通常需要共享文件。Kubernetes 中的Volume抽象就很好的解决了这些问题。Pod中的容器通过Pause容器共Volume。
 

查看支持的存储卷类型

kubectl explain pod.spec.volumes

 

 

常用的有:emptyDir、hostPath、nfs、persistentVolumeClaim  

emptyDir存储卷  

当Pod被分配给节点时,首先创建emptyDir卷,并且只要该Pod在该节点上运行,该卷就会存在。正如卷的名字所述,它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件,尽管该卷可以挂载到每个容器中的相同或不同路径上。当出于任何原因从节点中删除 Pod 时,emptyDir中的数据将被永久删除。(将数据卷挂载到容器里面,如果容器被删除,则里面的数据也会被永久删除)

1.1 特点
  • 临时性存储:

emptyDir 提供的存储是临时的,其生命周期与所属的 Pod 相关。

当 Pod 被删除时,emptyDir 中的数据也会被清除,因此不适合用于持久化存储。

  • Pod 内容器之间的共享:

emptyDir 在同一个 Pod 中的所有容器之间共享,容器可以读写其中的数据。pod里面的容器挂载数据卷里面的内容都是一致的。

1.2 用途 

适用于需要在同一个 Pod 中的多个容器之间进行临时数据交换或共享的场景。

例如,可以用于容器间的缓存共享、临时文件存储等用途。

1.3部署 
apiVersion: v1
kind: Pod
metadata:name: pod-emptydirnamespace: defaultlabels:app: myapp
spec:containers:- name: myappimage: soscscs/myapp:v1imagePullPolicy: IfNotPresentports:- name: httpcontainerPort: 80#定义容器挂载内容volumeMounts:#使用的存储卷名称,如果跟下面volume字段name值相同,则表示使用volume的这个存储卷- name: html#挂载至容器中哪个目录mountPath: /usr/share/nginx/html/- name: busyboximage: busybox:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: html#在容器内定义挂载存储名称和挂载路径mountPath: /data/command: ['/bin/sh','-c','while true;do echo $(date) >> /data/index.html;sleep 2;done']#定义存储卷volumes:#定义存储卷名称  - name: html#定义存储卷类型emptyDir: {}

 

kubectl apply -f pod-emptydir.yamlkubectl get pods -o wide

 

 

随后,利用同样的方法去查看 busybox容器里面

两个容器里面的内容是一致的,两个数据目录里面的内容是同步的

在上面定义了2个容器,其中一个容器是输入日期到index.html中,然后验证访问nginx的html是否可以获取日期。以验证两个容器之间挂载的emptyDir实现共享。

 因为emptydir是临时存在的:

删除之前创建的pod  随后,再重新apply -f 生成新的yaml文件和新的pod

随后,再进入查看里面的内容是否发生改变

删除pod

随后,进行重新创建pod 

 随后,再进入pod容器里面查看数据 是否能保存   之前的数据丢失

二、hostPath存储卷 (只能在单个节点进行存储)

例如 在node01上面创建目录,并且写入内容,随后将此目录共享到pod容器里面

补充:在yaml文件里面 主要hostpath有以下几种类型:

查看hostPath中必须要写的类型

apiVersion: v1
kind: Pod
metadata:name: pod01namespace: default
spec:containers:- name: myappimage: soscscs/myapp:v1#定义容器挂载内容volumeMounts:#使用的存储卷名称,如果跟下面volume字段name值相同,则表示使用volume的这个存储卷- name: html#挂载至容器中哪个目录mountPath: /usr/share/nginx/html#读写挂载方式,默认为读写模式falsereadOnly: false#volumes字段定义了paues容器关联的宿主机或分布式文件系统存储卷volumes:#存储卷名称- name: html#路径,为宿主机存储路径hostPath:#在宿主机上目录的路径path: /data/pod/volume1#定义类型,这表示如果宿主机没有此目录则会自动创建type: DirectoryOrCreate

 因为挂载到node01上面,所以在node01上面操作 

去node01里面的/data/pod/volume1 如果没有的情况下,会自动创建,并且写入数据

随后,去容器里面进行查看,node节点跟pod容器共享数据成功

删除pod,再重建,验证是否依旧可以访问原来的内容

kubectl delete -f pod-hostpath.yaml  
kubectl apply -f pod-hostpath.yaml 

 删除pod,再重建,指定到node02节点,验证是否依旧可以访问原来的内容 

 随后,进入到node02节点上

在自己节点本身是可以可读可写的,而容器里面是只能读,不能写

举例说明

进入到容器里面

并且hostpath指定的是一个节点,不能实现跨主机数据持久化,在node02上面的是this is node01 而指定调度到node02时,指定的是this is node02  不能实现跨主机数据持久化

 

 hostpath:可以实现持久化存储,使用node节点的目录或文件挂载到容器,但是存储空间会受到node节点单机限制,node节点故障数据会丢失,pod跨节点不能共享数据

 hostPath特点

2.3 用途

三、nfs共享存储卷

nfs:可以实现持久化存储,使用nfs将存储设备空间挂载到容器中,pod可以跨node节点共享数据

3.2用途 

3.3部署 

准备一台新的机器去下载nfs

 

 

 随后,去node节点上面查看是否有共享数据

node1:

node2:

随后,将nfs上的主机名修改为stor01

并且在node节点上面添加映射 node1 node2一起操作

 

 master节点操作

 

 在nfs服务器上创建index.html

 master节点操作

 

将nfs的共享目录挂载到容器里面,随后容器跟共享目录的数据一致,可读可写。

假设如果要指定容器在node01上,因为刚刚没有指定的情况下是指定在node02上的

apiVersion: v1
kind: Pod
metadata:name: pod-vol-nfsnamespace: default
spec:nodeName: node01containers:- name: myappimage: soscscs/myapp:v1volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlvolumes:- name: htmlnfs:path: /opt/k8sserver: stor01
~                            

 随后,删除并重新建立yaml文件

 表示,nfs可以跨主机保存数据

nfs总结:将nfs服务的共享数据卷挂载到pod容器中,有持久化数据的能力,且也能实现跨node节点的pod共享数据。

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

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

相关文章

全面掌握 Chrome DevTools:Web 开发者的终极攻略

全面掌握 Chrome DevTools:Web 开发者的终极攻略 Chrome DevTools 是一组内置于谷歌浏览器中的强大开发工具,旨在帮助开发者更高效地构建和调试 Web 应用。无论是前端开发、性能优化还是调试 JavaScript 代码,Chrome DevTools 都提供了丰富的功能和工具。本篇文章将详细介绍…

FreeRTOS【12】队列集使用

1.开发背景 基于以上的章节,了解了 FreeRTOS 多线程间的信号量、队列的使用,已经满足了日常使用场景。这个篇章要介绍的是队列集,实际上队列的升级版,存储信号量和队列等的触发事件。 队列集在实际的开发项目中应用相对比较少&…

chap4 simple neural network

全连接神经网络 问题描述 利用numpy和pytorch搭建全连接神经网络。使用numpy实现此练习需要自己手动求导,而pytorch具有自动求导机制。 我们首先先手动算一下反向传播的过程,使用的模型和初始化权重、偏差和训练用的输入和输出值如下: 我…

达梦数据库写文件的方式探索

0x01 前沿 这篇文章整体算是《达梦数据库手工注入笔记》的续集,达梦作为国内优秀的信创数据库,在关基单位中拥有越来越大的用户使用量。 通过SQL注入来写文件一直以来都是SQL注入漏洞深入利用的一种方式,对于不同的数据库通常写文件的方式也是…

刷代码随想录有感(86):贪心算法——跳跃游戏II(最小跳跃次数)

题干&#xff1a; 代码&#xff1a; class Solution { public:int jump(vector<int>& nums) {if(nums.size() 1)return 0;int curcover 0;int nextcover 0;int res 0;for(int i 0; i < curcover; i){nextcover max(i nums[i], nextcover);if(i curcover …

二叉树的链式存储

目录 1.二叉树的概念和性质2.二叉树的链式存储2.1二叉树的遍历2.1.1前中后遍历2.1.2层次遍历 2.2求节点的个数2.3求叶子节点的个数2.4求第k层节点个数2.5二叉树的销毁2.6怎样通过前序遍历构建二叉树2.7判断是否是满二叉树 1.二叉树的概念和性质 一&#xff0c;概念 1.五种形态…

掌握 JavaScript 基本输出方法

掌握 JavaScript 基本输出方法 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 JavaScript 是一种强大且灵活的编程语言&#xff0c;广泛用于 Web 开发。通过 JavaScript&#xff…

NeuralForecast 推理 - 数据集从文件dataset.pkl读

NeuralForecast 推理 - 数据集从文件dataset.pkl读 flyfish from ray import tune from neuralforecast.core import NeuralForecast from neuralforecast.auto import AutoMLP from neuralforecast.models import NBEATS, NHITS import torch import torch.nn as nn import …

YOLOV8训练自己的数据集图文实战,包含voc数据集处理代码

yolov8官方链接: link 本文章是以labelimg标注好的voc数据集为基础,通过转换格式训练模型, 一,安装 pip install ultralyticsor pip install githttps://github.com/ultralytics/ultralytics.gitmainlink 二,数据集准备 数据集格式如下 ├── ultralytics └── datase…

RocketMq broker源码解析

broker 集群工作流程 NameSrv启动成功后&#xff0c;等待broker、Consumer和producer启动后也与NameSrv保持长连接, NameSrv相当于是路由控制中心。启动broker, broker与所有的NameSrv建立长连接, broker&#xff0c;通过定时线程定时向NameSrv发送心跳&#xff0c;broker信息…

LightDB pro*c迁移指南(游标模块)

文章目录 一、不使用SQLDA描述符范围的游标操作1.1 oracle 案例1.1.1 使用游标获取数据1.1.2 对于fetch结果集怎么去利用 1.2 LightDB 案例1.2.1 使用游标获取数据1.2.2 对于fetch结果集怎么去利用 3 总结&#xff1a;不同项 二、使用SQLDA描述符范围的游标操作2.1 Oracle样例2…

JS 【详解】双指针排序 -- 数组合并后递增排序

时间复杂度为 O(m n) &#xff0c;可简称为 O(n) 排序流程 在两个数组中&#xff0c;从第一项开始&#xff0c;各自设一个指针将两指针对应的元素进行比较&#xff0c;将较小的放入最终数组中&#xff0c;若两元素相同&#xff0c;就都放入最终数组中&#xff0c;若有一个指针…

KMPlayer v2024.4.25.13 官方版 (万能播放器)

前言 KMPlaye通过各种插件扩展KMP可以支持层出不穷的新格式。KMPlaye强大的插件功能&#xff0c;直接从Winamp继承的插件功能&#xff0c;能够直接使用Winamp的音频&#xff0c;输入&#xff0c;视觉效果插件&#xff0c;而通过独有的扩展能力&#xff0c;只要你喜欢&#xff…

webman-admin多图上传预览和删除

前言 在webmen文档和论坛中都没找到多图上传的示例&#xff0c;自己找了一个&#xff0c;整合了一下凑合用 insert页面 引入css <link rel"stylesheet" href"/app/admin/admin/css/muti-upload.css" />muti-upload.css内容如下 .uploader-list .ha…

微信小程序学习

04.认识小程序项目的基本组成结构 把allow改成disallow,表示所有的页面不被微信进行索引。 比如修改首页的上面栏颜色

自制数据#国家2000投影带划分范围shp(高斯克吕格 3°/6°分带)

国家2000投影分带范围&#xff08;3&#xff09; https://www.123pan.com/s/lqEljv-xvCHA.html 国家2000投影分带范围&#xff08;6&#xff09; https://www.123pan.com/s/lqEljv-xvCHA.html 声明&#xff1a;转载此文不为商业用途。文字和图片版权归原作者所有&#xff0c;…

网络安全基础技术扫盲篇名词解释之“证书“

用通俗易懂的话说&#xff1a; 证书就好比是一张身份证&#xff08;类似&#xff0c;但不完全相同&#xff09;&#xff0c;用来证明一个网站的身份是否可信。就像你要确认一个陌生人的身份需要看他的身份证一样&#xff0c;电脑在连接一个网站时&#xff0c;也会查看网站的证…

延时性(过期/超时)和周期性的定时任务的实现方式

延时性&#xff08;过期/超时&#xff09;和周期性的定时任务的实现方式 一、延时性的定时任务&#xff08;例如订单超时30分钟后自动取消该订单&#xff09;1.使用DelayQueue实现任务即将到期提醒功能&#xff08;非分布式&#xff09;2.使用Redis实现任务即将到期提醒功能&am…

检查对象是否包含某一属性值

在 JavaScript 或 TypeScript 中&#xff0c;可以通过多种方式检查对象是否包含某一属性值。以下是一些常用的方法&#xff1a; 方法 1&#xff1a;in 运算符 in 运算符可以用来检查对象是否具有特定属性&#xff0c;无论该属性是在对象本身还是其原型链上。 const obj { a…

对于多amis embed渲染导致的tracker 无响应问题解决:

原因&#xff1a;是amis对于默认env(fetcher,isCancel,tracker,session)进行了缓存(env保存在store中,store被缓存到stores对象中),只使用第一次缓存的数据,除非进行了clearStoresCache. 解决方法1&#xff1a; amis.embed({ })时传入env.session,session值不同则每次embed都…