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下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性