3.9 共享数据卷volume

2024-05-16 06:48
文章标签 数据 共享 volume 3.9

本文主要是介绍3.9 共享数据卷volume,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、emptyDir类型volume
  • 二、hostPath类型volume

pod中每个容器都有自己独立的文件系统,文件系统来自镜像,每个容器都是通过在构建镜像时加入的详细配置文件来启动,所以在容器中添加的文件,在容器重启后又会从镜像中重新加载,导致新添加的文件会丢失。k8s提供了volume卷,用于容器之间进行共享文件,容器重启后重新加载卷中的文件数据,所以文件不会丢失。
Voume的生命周期同pod的生命周期,当pod不存在时,volume也会丢失,所以重新启动pod也会导致volume卷中的数据丢失。
volume有很多种类型,下面以最常用的emptyDir和hostPath两种类型为例。

一、emptyDir类型volume

emptyDir卷的生命周期与pod的生命周期相同,当pod被分配到节点上首先创建emptyDir卷。pod中含有多个容器时,多个容器通过pod中的pause容器共享emptyDir卷。emptyDir卷最初是空的,pod容器可以读取和写入emptyDir卷文件,emptyDir卷可以挂在到每个容器中的相同或不同路径上。当pod被从节点上删除时,emptyDir中数据将被永久删除。
下面pod中创建两个容器busybox和nginx,让两个容器通过emptyDir共享文件
emptyDir:

apiVersion: v1
kind: Pod
metadata:name: emptydir-pod
spec:containers:- image: busyboxname: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]volumeMounts:- mountPath: /filesname: file-volume- image: nginxname: nginximagePullPolicy: IfNotPresentvolumeMounts:- mountPath: /contentname: file-volumevolumes:- name: file-volumeemptyDir: {}

通过上述资源文件创建pod,在nginx中的/content目录下生成一个hello.html文件,进入busybox的/files目录下可以发现共享了该文件

[root@k8s-master01 volume_work]# kubectl exec emptydir-pod -c nginx -it -- /bin/sh
# ls
bin  boot  content  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
# cd content
# ls
# echo "hello world" > hello.html
# ls
hello.html
[root@k8s-master01 pod_work]# kubectl exec emptydir-pod -c busybox -it -- /bin/sh
/ # ls
bin    dev    etc    files  home   proc   root   sys    tmp    usr    var
/ # cd files
/files # ls
hello.html

二、hostPath类型volume

hostPath卷是一种持久性存储,hostPath类型卷将主机节点的文件系统中的文件或目录挂载到集群中,在同一个节点上运行并在其中hostPath卷中使用相同路径的pod可以看到相同的文件。如果删除了一个节点上pod,并且重启的Pod也在同一个节点上,那么这个pod就可以看到已经删除的pod遗留的信息。但hostPath一个缺点就是如果pod被调度到了另一个节点上,则看到的数据不再与原来一致。
以下面hostpath.yaml为例

apiVersion: v1
kind: Pod
metadata:name: hostpath-pod
spec:containers:- image: busyboxname: busyboximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "sleep 3600"]volumeMounts:- mountPath: /hello 		#挂载到容器位置name: hellovolumes:- name: hellohostPath:path: /root/hello  		#节点上位置type: DirectoryOrCreate	#如果节点上不存在/root/hello目录,就创建该目录

下面创建pod,并进入容器向hostPath持久卷中写入内容

#创建pod
[root@k8s-master01 volume_work]# kubectl apply -f hostpath.yaml 
pod/hostpath-pod created#查看pod被调到了kus-node01节点上
[root@k8s-master01 volume_work]# kubectl get pod hostpath-pod -o wide
NAME           READY   STATUS    RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
hostpath-pod   1/1     Running   0          15s   10.244.1.178   k8s-node01   <none>           <none>#进入pod中的容器,并进入/hello目录下写入hello.html内容
[root@k8s-master01 volume_work]# kubectl exec hostpath-pod -it -- /bin/sh
/ # cd /hello
/hello # echo "hello nginx" > hello.html
/hello # ls
hello.html

容器中已经向持久卷中写入了hello.html内容,下面进入k8s-node01节点上的/root/hello目录查看,发现宿主机节点上已经持久化了容器中写入内容。

[root@k8s-node01 ~]# cd /hello
[root@k8s-node01 hello]# ls
hello.html

在上述案例中创建pod时指定的type: DirectoryOrCreate,当节点目录不存在时就创建该目录,如果存在就用存在的目录。type还有以下选项可用

type名字type的值
空字符串创建hostPath卷之前不会做任何检查,也是默认选项
DirectoryOrCreate如果节点上不存在hostPath指定目录,则创建该目录,权限设置为0755
DirectoryhostPath指定目录必须存在,否则创建pod失败
FilehostPath指定的路径下必须存在文件
SockethostPath指定路径下必须存在UNIX套接字
CharDevicehostPath指定路径下必须存在字符设备
BlockDeviceBlockDevice hostPath指定路径下必须存在块设备

这篇关于3.9 共享数据卷volume的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994171

相关文章

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.