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

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络