【云原生|Kubernetes】05-Pod的存储卷(Volume)
【云原生Kubernetes】05-Pod的存储卷(Volume)
文章目录
- 【云原生Kubernetes】05-Pod的存储卷(Volume)
- 简介
- Volume类型解析
- emptyDir
- HostPath
- gcePersistentDisk
- NFS
- iscsi
- glusterfs
- ceph
- 其他volume
简介
- Volume 是Pod 中能够被多个容器访问的共享目录。 Kubernetes 中的Volume 概念、用 途和目的与 Docke 中的 Vo lume 比较类似,但二者不能等价, 首先 Kubernetes 中的Volume 被定义在 Pod上 ,被一个 Pod 里的多个容器挂载到具体的文件目录 ;其次, Kubernete 中的 Volume与 Pod 的生命周期相同,但与容器的生命周期不相关, 当容器终止或者重启,volume 中的数据也不会丢失;最后, Kubemetes 支持多种类型的 Volume ,例如 GlusterFS Ceph 等分布式文件系.
Volume类型解析
kubernetes提供了非常丰富的Volume类型供容器使用,例如emptyDir(临时目录);宿主机目录(hostpath),共享存储(NFS,glusterfs等),下面将对常见的类型进行说明:
emptyDir
emptyDir是在Pod分配到node时创建的,从它的名称就可以看出,它的初始内容为空,并且必须指定宿主机上对应的目录文件,因为这是Kubernetes自动分配的一个目录,当Pod从Node上移除时,emptyDir中的数据也将被永久删除。emptyDir的一些用途如下:
临时空间,例如用于某些应用程序运行时所需的临时目录,且无需永久保留;
长时间任务执行过程中使用的临时目录;
一个容器需要从另一个容器中获取数据的目录(多容器共享目录)
在默认情况下,emptyDir使用的是节点存储介质,例如磁盘或者网络存储,还可以使用emptyDir.medium属性,把这个属性设置为“Memory”,就可以使用更快的基于内存的后端存储了。需要注意的是,这种情况下的emptyDir使用的内存会被计入容器的内存消耗,将受到资源限制和配额的管理。
示例
- 在pod中创建两个容器:tomcat和busybox,在pod级别设置名为‘app-logs’的volume,用于tomcat容器向其中写日志文件,busybox容器从中读取日志文件。
apiVersion: v1
kind: Pod
metadata:name: volume-podspec:containers:- name: tomcat-containerimage: tomcatports:- containerPort: 8080volumeMounts:- name: app-logsmountPath: /usr/loacl/tomcat/logs- name: busybox-containerimage: busyboxcommand: ["sh", "-c", "tail -f /logs/catalins*.log"]volumeMounts:- name: app-logsmountPath: /logsvolumes:- name: app-logsemptyDir: {}
- 查看pod的详细信息
kubectl describe pods volume-pod
HostPath
- hostpath为在Pod上挂载宿主机的文件或目录,通常可以用于以下几个方面:
- 在容器应用程序生成的日志文件需要永久保存时,可以使用宿主机的高速文件系统对其存储;
- 需要访问宿主机上的Docker引擎内部数据结构的容器应用时,可以通过定义hostPath为宿主机/var/lib/docker目录,使容器内部的应用可以直接访问docker的文件系统。
- 在使用这种类型的Volume时,需要注意以下几点:
- 在不同的Node上具有相同配置的Pod,可能会因为宿主机上的 目录和文件不同而导致对Volume上目录和文件的访问结果不一致。
- 目录和文件路径不同:不同节点上的宿主机可能具有不同的目录和文件路径,这意味着在不同节点上运行的 Pod 访问 HostPath 卷上的目录和文件时,可能会得到不同的结果。例如,在一个节点上,HostPath 卷可能映射到
/mnt/data
目录,而在另一个节点上,它可能映射到/data
目录。- 目录和文件权限不同:不同节点上的宿主机可能具有不同的文件权限,这意味着在不同节点上运行的 Pod 访问 HostPath 卷上的目录和文件时可能需要不同的权限。
- 如果使用了资源配额管理,则Kubernetes无法将hostPath在宿主 机上使用的资源纳入管理。
示例
- 在pod中创建一个容器:tomcat,在pod级别设置名为‘app-logs1’的volume,将本地/var/log目录挂载到pod的/data/log1下
apiVersion: v1
kind: Pod
metadata:name: volume-pod1spec:containers:- name: tomcat-container1image: tomcatports:- containerPort: 8080volumeMounts:- name: app-logs1mountPath: /data/log1volumes:- name: app-logs1hostPath:path: /var/logtype: Directory
gcePersistentDisk
gcePersistentDisk是Google Cloud Platform(GCP)提供的一种持久性磁盘存储。它是一种网络附加的块存储解决方案,为在Google Compute Engine上运行的虚拟机实例提供耐用且高性能的存储。
gcePersistentDisk具有多种优点,包括:
- 耐久性:存储在gcePersistentDisk上的数据在多个物理磁盘和计算机上进行复制,确保高耐用性和可用性。
- 性能:gcePersistentDisk提供高性能存储,具有实现高读写速度的能力。
- 可扩展性:gcePersistentDisk可以轻松调整大小,以满足不断变化的存储需求,无需停机。
- 兼容性:gcePersistentDisk可以与在Google Compute Engine上运行的各种虚拟机实例一起使用,使其成为一种灵活的存储解决方案。
使用gcePersistentDisk时有以下一些限制条件:
- Node(运行kubelet的节点)需要是GCE虚拟机。
- 这些虚拟机需要与PD存在于相同的GCE项目和Zone中。
示例
- Pod中有一个名为“my-container”的容器,它使用了一个名为“my-volume”的卷,将gcePersistentDisk挂载到了容器的“/mnt/data”目录下。同时,在Pod的“volumes”字段中定义了一个名为“my-volume”的卷,并指定了使用名为“my-disk”的gcePersistentDisk,并将文件系统类型设置为“ext4”
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxvolumeMounts:- name: my-volumemountPath: /mnt/datavolumes:- name: my-volumegcePersistentDisk:pdName: my-diskfsType: ext4
NFS
- NFS(Network File System)是一种分布式文件系统协议,用于在网络上共享文件和目录。它允许多个计算机共享相同的文件系统,从而使多个计算机可以访问相同的文件和数据。
示例
- Pod 中有一个名为“tomcat-container3”的容器,它使用了一个名为“ nfs-volume”的卷,将 NFS 挂载到了容器的“/nfs”目录下。同时,在 Pod 的“volumes”字段中定义了一个名为“nfs-volume”的卷,并指定了使用 NFS,指定 NFS 服务器的地址为“192.168.194.134”,共享路径为"/data"”
Kubernetes 节点上需要安装nfs-util客户端
apiVersion: v1
kind: Pod
metadata:name: nfs-podspec:containers:- name: tomcat-container3image: tomcatimagePullPolicy: IfNotPresentports:- name: tomcat-portcontainerPort: 8080volumeMounts:- name: nfs-volumemountPath: /nfsvolumes:- name: nfs-volumenfs:server: 192.168.194.134path: /data
iscsi
- iSCSI(Internet Small Computer System Interface)是一种基于TCP/IP的存储协议,用于在计算机网络上共享块存储设备。它允许远程计算机(即iSCSI客户端)通过网络连接访问存储设备(即iSCSI存储设备),就像它们是直接连接在本地计算机上的一样。
- 在Kubernetes中,可以将iSCSI存储设备挂载到Pod中,以为Pod提供持久性的块存储。
示例
- me”的卷,将 iSCSI 存储设备挂载到了容器的“/mnt/data”目录下。同时,在 Pod 的“volumes”字段中定义了一个名为“my-volume”的卷,并指定了使用 iSCSI,指定 iSCSI 目标地址为“192.168.1.100:3260”,iSCSI 名称为“iqn.2022-05.com.example:storage.target01”,逻辑单元号为“0”,文件系统类型为“ext4”,只读模式为“false”。
需要在 Kubernetes 节点上安装 iSCSI 客户端软件
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxvolumeMounts:- name: my-volumemountPath: /mnt/datavolumes:- name: my-volumeiscsi:targetPortal: 192.168.1.100:3260iqn: iqn.2022-05.com.example:storage.target01lun: 0fsType: ext4readOnly: false
glusterfs
GlusterFS是一种开源的分布式文件系统,用于在计算机网络上共享文件和目录。它是一种基于用户空间的文件系统,可以在多个服务器之间创建一个可扩展的、高可用性的存储池,从而提供高性能、可靠的存储解决方案。
GlusterFS可以通过将多个存储节点组合成一个存储池来扩展存储容量。每个存储节点都运行一个GlusterFS客户端,用于将本地存储设备映射到存储池中。这样,多个存储节点就可以共享相同的文件系统,并提供高可用性和容错性。
s示例
- Pod 中有一个名为“my-container”的容器,它使用了一个名为“my-volume”的卷,将 GlusterFS 文件系统挂载到了容器的“/mnt/data”目录下。同时,在 Pod 的“volumes”字段中定义了一个名为“my-volume”的卷,并指定了使用 GlusterFS,指定 GlusterFS 集群的地址为“glusterfs-cluster”,共享路径为“my-volume”,只读模式为“false”。
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxvolumeMounts:- name: my-volumemountPath: /mnt/datavolumes:- name: my-volumeglusterfs:endpoints: glusterfs-clusterpath: my-volumereadOnly: false
ceph
RBD(RADOS Block Device)是一种基于Ceph存储集群的块存储协议,用于在计算机网络上共享块存储设备。它允许远程计算机(即RBD客户端)通过网络连接访问存储设备(即RBD存储设备),就像它们是直接连接在本地计算机上的一样。
RBD协议的工作原理是将块设备映射到Ceph存储集群中的对象存储池,从而提供分布式、高可用性、高性能的块存储服务。RBD存储设备可以动态调整大小,并且可以在多个客户端之间共享。
示例
- Pod 中有一个名为“my-container”的容器,它使用了一个名为“my-volume”的卷,将 RBD 存储设备挂载到了容器的“/mnt/data”目录下。同时,在 Pod 的“volumes”字段中定义了一个名为“my-volume”的卷,并指定了使用 RBD,指定 Ceph 存储集群的监视器地址为“192.168.1.100:6789, 192.168.1.101:6789, 192.168.1.102:6789”,对象存储池为“rbd-pool”,镜像名称为“my-image”,用户名为“admin”,密钥文件为“/etc/ceph/keyring”,文件系统类型为“xfs”,只读模式为“false”。
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: nginxvolumeMounts:- name: my-volumemountPath: /mnt/datavolumes:- name: my-volumerbd:monitors: [192.168.1.100:6789, 192.168.1.101:6789, 192.168.1.102:6789]pool: rbd-poolimage: my-imageuser: adminkeyring: /etc/ceph/keyringfsType: xfsreadOnly: false
其他volume
- **flocker:**使用Flocker管理存储卷;
- gitRepo: 通过挂载一个空目录,并从Git库clone一个git repository以供Pod使用;
- **secret:**一个Secret Volume用于为Pod提供加密的信息,你可以 将定义在Kubernetes中的Secret直接挂载为文件让Pod访问。Secret Volume是通过TMFS(内存文件系统)实现的,这种类型的Volume总是 不会被持久化的。
在上述中挂载外部存储,如ceph,gluster,nfs,iscsi等,的时候虽然pod可以直接进行挂载,但是kubernetes更加推荐我们先需要创建一个 PersistentVolume,并将其绑定到 PersistentVolumeClaim 上。然后,在 Pod 中使用该 PersistentVolumeClaim 来挂载。后面我们将会单独并且着重的介绍pv和pvc的功能和作用。
你可以 将定义在Kubernetes中的Secret直接挂载为文件让Pod访问。Secret Volume是通过TMFS(内存文件系统)实现的,这种类型的Volume总是 不会被持久化的。
相关文章:

【云原生|Kubernetes】05-Pod的存储卷(Volume)
【云原生Kubernetes】05-Pod的存储卷(Volume) 文章目录 【云原生Kubernetes】05-Pod的存储卷(Volume)简介Volume类型解析emptyDirHostPathgcePersistentDiskNFSiscsiglusterfsceph其他volume 简介 Volume 是Pod 中能够被多个容器访问的共享目录。 Kubern…...
Python实现数据结构
文章目录 一、Python实现数据结构1.1 python实现单向链表1.2 python实现单向循环链表1.3 python实现双向链表 一、Python实现数据结构 1.1 python实现单向链表 singleLinkedList.py class SingleNode:"""the node of single link list"""def …...

esp32CAM环境安装教程---串口驱动安装
前言 (1)本人安装好arduino 的ESP32环境之后, 发现一直下载不进去程序。一直说Cannot configure port, something went wrong. Original message: PermissionError。 (2)查阅了很多资料,用了各种办法&#…...
Java中List和Array转换
文章目录 List -> Array1. 调用toArray()方法直接返回一个Object[]数组:2. 给toArray(T[])传入一个类型相同的Array,List内部自动把元素复制到传入的Array中:3. 通过List接口定义的T[] toArray(IntFunction<T[]> generator)方法&…...
如何能确定数据库中root用户的密码是什么
如果您无法确定数据库中 root 用户的密码,有几种方法可以尝试找回或重置密码: 1. 使用已知密码:如果您有之前设置的 root 用户密码,可以使用该密码进行登录。 2. 查找密码文件:在某些情况下,MariaDB 可能…...

由浅入深Netty协议设计与解析
目录 1 为什么需要协议?2 redis 协议举例3 http 协议举例4 自定义协议要素4.1 编解码器4.2 什么时候可以加 Sharable 1 为什么需要协议? TCP/IP 中消息传输基于流的方式,没有边界。 协议的目的就是划定消息的边界,制定通信双方要…...
iptables防火墙(1)
iptables防火墙 一、iptables概述二、netfilter/iptables 关系三、四表五链1.四表2.五链 四、规则链之间的匹配顺序五、规则链内的匹配顺序六、iptables安装与配置七、常用的控制类型八、常用的管理选项九、规则命令1.添加新规则2.查看规则列表3.设置默认策略4.删除规则5.清空规…...
第九章 Productions最佳实践 - Productions开发的最佳实践
文章目录 第九章 Productions最佳实践 - Productions开发的最佳实践Productions开发的最佳实践项目目标项目交付文档 第九章 Productions最佳实践 - Productions开发的最佳实践 Productions开发的最佳实践 本章是一个总体概述,旨在帮助团队成员为从事生产项目做好…...
RocketMQ 怎么实现的消息负载均衡以及怎么能够保证消息被顺序消费
一、RocketMQ 怎么实现的消息负载均衡 RocketMQ是一种开源的分布式消息中间件,它使用了一种称为消息负载均衡的机制来实现消息的分发和消费的负载均衡。RocketMQ的消息负载均衡主要是通过以下两个方面实现的: 消息队列分组(Message Queue G…...

【随笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析
相关信息 硬件平台:全志T507 系统版本:Android 10 / Linux 4.9.170 问题描述:PF4 无法通过标准接口设置为中断模式,而 PF1、PF2、PF3、PF5 正常可用。 分析过程 一开始以为是引脚被其它驱动占用引起,或者该引脚不具…...

人手一个 Midjourney,StableStudio 重磅开源!
人手一个 Midjourney,StableStudio 重磅开源! Stability AI 公司在上个月 19 号推出了 Alpha 版本 StableLM 大语言模型,包含了 30 亿和 70 亿参数,并且支持商用。如今他们再次推出了 AI 图像生成平台 StableStudio,这…...

iptables防火墙(2)
iptables防火墙(2) 一、SNATSNAT应用环境SNAT原理SNAT转换前条件扩展 二、DNATDNAT应用环境DNAT原理DNAT转换前提条件扩展 三、防火墙规则的备份和还原导出(备份)所有表的规则导入(还原)规则 一、SNAT SNA…...

Windows和Kali上使用proxychains代理流量
Windows和Kali上使用proxychains代理流量 PS. 本文演示都是在kali进行的,如有出入还请联系我哦1. Linux(Debian)1.1. 检查一下是否有proxychains1.2 修改config文件 2. Linux(Debian)安装proxychians43. Windows3.1 下载3.2 配置 4. Windows下的配置5. 测试 PS. 写这…...

KEYSIGHT MSOS204A 2GHZ 4通道DSOS204A高清晰度示波器
KEYSIGHT是德DSOS204A/MSOS204A高清晰度示波器 附加功能: 2 GHz 带宽(可升级) 4 个模拟通道和 16 个数字通道 最大存储深度:800 Mpts(2 通道),400 Mpts(4 通道) 最大…...

最新Java适配商城系统
城前端功能展示 商城移动端 后端基于SpringBoot 研发,前端使用 Vue、uniapp开发 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者 api不需要单独部署,只需启动一个jar包就可以正…...

【KVM虚拟化】· virsh管理命令
目录 🍁libvirt架构概述 🍁使用virsh管理虚拟机 🍂常用命令总结 🍁kvm基本功能管理 🍂帮助命令 🍂KVM的配置文件存放目录 🍂查看虚拟机状态 🍂虚拟机关机与开机 🍂强制虚…...
JS Es6中判断b数组对象是否有跟a数组对象相同的数值(例如:id),有的话就过滤掉
如下[数组]对象a和b let a[{id:1,value:this},{id:2,value:is}] let b[{id:1,value:hello},{id:3,value:world}]filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。 some() 方法用于检测数组中的元素是否满足指定条件&#x…...

python获取某电商平台口红数据并制作词云
目录标题 前言开发环境:模块使用数据来源分析代码展示获取数据制作词云 尾语 💝 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 开发环境: Python 3.8 Pycharm 模块使用 requests jieba 结巴分词 wordcloud 词云 第三方模块安装: win R 输…...

阿里成立AIDC,用“增长”解题国际化
随着阿里巴巴集团2023财年年报的披露,AIDC也随即浮出了水面。 AIDC是阿里国际数字商业集团的英文简称,AIDC即Alibaba International Digital Commerce。阿里是在5月18日公布的截至2023年3月31日的2023财年Q4及全年财报,财报数据之外ÿ…...
全面理解:在计算机科学中同步、异步、并行、并发,他们之间到底有什么区别,如果正确更好的区分它们?
同步,异步,并行,并发的基础概念 在计算机中同步的基础概念 在计算机科学中,同步(Synchronization)是指在多个过程或线程中,它们的执行在时间上是有序的。换句话说,要执行一个特定的…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...