【云原生|Kubernetes】05-Pod的存储卷(Volume)

news2024/12/25 23:59:00

【云原生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使用的内存会被计入容器的内存消耗,将受到资源限制和配额的管理。

示例

  1. 在pod中创建两个容器:tomcat和busybox,在pod级别设置名为‘app-logs’的volume,用于tomcat容器向其中写日志文件,busybox容器从中读取日志文件。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iJwiIjjH-1684847247245)(D:\学习\学习笔记\图片\110.png)]

apiVersion: v1
kind: Pod
metadata:
  name: volume-pod

spec:
  containers:
    - name: tomcat-container
      image:  tomcat
      ports:
        - containerPort: 8080
      volumeMounts:
        - name: app-logs
          mountPath:  /usr/loacl/tomcat/logs


    - name: busybox-container
      image:  busybox
      command: ["sh", "-c", "tail -f /logs/catalins*.log"]
      volumeMounts:
        - name: app-logs
          mountPath: /logs

  volumes:
    - name: app-logs
      emptyDir: {}
  • 查看pod的详细信息
 kubectl describe pods volume-pod

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d0cLlGp0-1684847247246)(D:\学习\学习笔记\图片\111.png)]

HostPath

  • hostpath为在Pod上挂载宿主机的文件或目录,通常可以用于以下几个方面:
    • 在容器应用程序生成的日志文件需要永久保存时,可以使用宿主机的高速文件系统对其存储;
    • 需要访问宿主机上的Docker引擎内部数据结构的容器应用时,可以通过定义hostPath为宿主机/var/lib/docker目录,使容器内部的应用可以直接访问docker的文件系统。
  • 在使用这种类型的Volume时,需要注意以下几点:
    • 在不同的Node上具有相同配置的Pod,可能会因为宿主机上的 目录和文件不同而导致对Volume上目录和文件的访问结果不一致。
      • 目录和文件路径不同:不同节点上的宿主机可能具有不同的目录和文件路径,这意味着在不同节点上运行的 Pod 访问 HostPath 卷上的目录和文件时,可能会得到不同的结果。例如,在一个节点上,HostPath 卷可能映射到 /mnt/data 目录,而在另一个节点上,它可能映射到 /data 目录。
      • 目录和文件权限不同:不同节点上的宿主机可能具有不同的文件权限,这意味着在不同节点上运行的 Pod 访问 HostPath 卷上的目录和文件时可能需要不同的权限。
    • 如果使用了资源配额管理,则Kubernetes无法将hostPath在宿主 机上使用的资源纳入管理。

示例

  1. 在pod中创建一个容器:tomcat,在pod级别设置名为‘app-logs1’的volume,将本地/var/log目录挂载到pod的/data/log1下
apiVersion: v1
kind: Pod
metadata:
  name: volume-pod1

spec:
  containers:
    - name: tomcat-container1
      image:  tomcat
      ports:
        - containerPort: 8080
      volumeMounts:
        - name: app-logs1
          mountPath:  /data/log1

  volumes:
    - name: app-logs1
      hostPath:
        path: /var/log
        type: Directory

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jy3WDtfL-1684847247247)(D:\学习\学习笔记\图片\112.png)]

gcePersistentDisk

  • gcePersistentDisk是Google Cloud Platform(GCP)提供的一种持久性磁盘存储。它是一种网络附加的块存储解决方案,为在Google Compute Engine上运行的虚拟机实例提供耐用且高性能的存储。

    gcePersistentDisk具有多种优点,包括:

    • 耐久性:存储在gcePersistentDisk上的数据在多个物理磁盘和计算机上进行复制,确保高耐用性和可用性。
    • 性能:gcePersistentDisk提供高性能存储,具有实现高读写速度的能力。
    • 可扩展性:gcePersistentDisk可以轻松调整大小,以满足不断变化的存储需求,无需停机。
    • 兼容性:gcePersistentDisk可以与在Google Compute Engine上运行的各种虚拟机实例一起使用,使其成为一种灵活的存储解决方案。
  • 使用gcePersistentDisk时有以下一些限制条件:

    • Node(运行kubelet的节点)需要是GCE虚拟机。
    • 这些虚拟机需要与PD存在于相同的GCE项目和Zone中。

示例

  1. 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-container
    image: nginx
    volumeMounts:
    - name: my-volume
      mountPath: /mnt/data
  volumes:
  - name: my-volume
    gcePersistentDisk:
      pdName: my-disk
      fsType: ext4

NFS

  • NFS(Network File System)是一种分布式文件系统协议,用于在网络上共享文件和目录。它允许多个计算机共享相同的文件系统,从而使多个计算机可以访问相同的文件和数据。

示例

  1. 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-pod

spec:
  containers:
    - name: tomcat-container3
      image: tomcat
      imagePullPolicy: IfNotPresent
      ports:
        - name: tomcat-port
          containerPort:  8080

      volumeMounts:
        - name: nfs-volume
          mountPath: /nfs
  
  volumes:
    - name: nfs-volume
      nfs:
        server: 192.168.194.134
        path: /data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NJfLxhis-1684847247248)(D:\学习\学习笔记\图片\113.png)]

iscsi

  • iSCSI(Internet Small Computer System Interface)是一种基于TCP/IP的存储协议,用于在计算机网络上共享块存储设备。它允许远程计算机(即iSCSI客户端)通过网络连接访问存储设备(即iSCSI存储设备),就像它们是直接连接在本地计算机上的一样。
  • 在Kubernetes中,可以将iSCSI存储设备挂载到Pod中,以为Pod提供持久性的块存储。

示例

  1. 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-container
    image: nginx
    volumeMounts:
    - name: my-volume
      mountPath: /mnt/data
  volumes:
  - name: my-volume
    iscsi:
      targetPortal: 192.168.1.100:3260
      iqn: iqn.2022-05.com.example:storage.target01
      lun: 0
      fsType: ext4
      readOnly: false

glusterfs

  • GlusterFS是一种开源的分布式文件系统,用于在计算机网络上共享文件和目录。它是一种基于用户空间的文件系统,可以在多个服务器之间创建一个可扩展的、高可用性的存储池,从而提供高性能、可靠的存储解决方案。

  • GlusterFS可以通过将多个存储节点组合成一个存储池来扩展存储容量。每个存储节点都运行一个GlusterFS客户端,用于将本地存储设备映射到存储池中。这样,多个存储节点就可以共享相同的文件系统,并提供高可用性和容错性。

s示例

  1. 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-container
    image: nginx
    volumeMounts:
    - name: my-volume
      mountPath: /mnt/data
  volumes:
  - name: my-volume
    glusterfs:
      endpoints: glusterfs-cluster
      path: my-volume
      readOnly: false

ceph

  • RBD(RADOS Block Device)是一种基于Ceph存储集群的块存储协议,用于在计算机网络上共享块存储设备。它允许远程计算机(即RBD客户端)通过网络连接访问存储设备(即RBD存储设备),就像它们是直接连接在本地计算机上的一样。

  • RBD协议的工作原理是将块设备映射到Ceph存储集群中的对象存储池,从而提供分布式、高可用性、高性能的块存储服务。RBD存储设备可以动态调整大小,并且可以在多个客户端之间共享。

示例

  1. 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-container
    image: nginx
    volumeMounts:
    - name: my-volume
      mountPath: /mnt/data
  volumes:
  - name: my-volume
    rbd:
      monitors: [192.168.1.100:6789, 192.168.1.101:6789, 192.168.1.102:6789]
      pool: rbd-pool
      image: my-image
      user: admin
      keyring: /etc/ceph/keyring
      fsType: xfs
      readOnly: 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总是 不会被持久化的。

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

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

相关文章

ChatGPT可以帮助开发人员的8种方式...

“适应或灭亡”是科技界的口头禅,如果您是开发人员,则尤其如此。 由于技术的动态发展,开发人员面临着比大多数人更大的压力,他们要领先于适应和精通最好的工具。ChatGPT 是最新的此类工具。 虽然有人说 ChatGPT 是“工作杀手”&…

比Figma更丝滑的“Figma网页版“

随着互联网的全面普及和全球化,设计协作工具逐渐成为团队协作中不可或缺的一部分。设计师们常需要通过在线设计协作工具来完成设计任务,而 Figma 作为协作工具的佼佼者,成为了许多设计师心中的首选。但是,对于国内设计师来说&…

Leetcode406. 根据身高重建队列

Every day a Leetcode 题目来源:406. 根据身高重建队列 解法1:贪心 题解:根据身高重建队列 我们先按照身高从大到小排序(身高相同的情况下K小的在前面),这样的话,无论哪个人的身高都小于等于…

kubeadm安装集群的时候kube-proxy是如何安装的

背景 最近升级k8s集群时遇到这个问题,集群是使用kuberadm自动化脚本安装的,之前一直认为kubeadm安装的集群这些组件除了kubelet都是静态pod跑起来的。 其实kube-proxy并不是. kube-proxy是如何安装的 在使用kubeadmin安装Kubernetes集群时&#xff0c…

Echarts通过Jquery添加下拉列表动态改变展示的数据和图表

前言 在项目中,有时候我们会一些需求,比如要用Echarts绘制一个饼状图,并且要设置一个下拉列表,当我点击某个选项的时候,饼状图里面的数据会改变,图表样式也会发生改变。我们可以配合Jquery来实现这个功能。…

数字电路基础

目录 一、不同进制之间的转换 二、逻辑代数基础 三、门电路 四、组合逻辑电路 五、半导体存储电路 六、时序电路 一、不同进制之间的转换 二-十转换: 十-二转换: 二-十六转换 十六-二转换 八-二转换 二-八转换 十六-十转换: 先转换成…

python绘制气泡图|随机生成数据

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

log4cpp的使用

log4cpp的使用逻辑构造基本模板布局的格式化目的地对象操作文件回卷文件 log4cpp的使用 逻辑构造 目的地Appender:用于表示日志系统最后输出到哪 布局Layout:表示你输出的格式,类似与printf 优先级Priority:常见的优先级有emerg&…

【WSN覆盖】基于麻雀搜索算法的三维无线传感器网络覆盖优化 三维WSN覆盖优化【Matlab代码#26】

文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. SSA算法2. 三维覆盖模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. SSA算法 2. 三维覆盖模型 三维覆盖模…

搜狐发布Q1财报:读懂前瞻性布局背后的长期主义

5月15日,搜狐发布了2023年第一季度财报。财报显示,搜狐总收入为1.62亿美元,其中,品牌广告收入为2300万美元;在线游戏收入为1.29亿美元。 同时,归于搜狐公司的非美国通用会计准则净亏损为1300万美元。 搜狐…

ChatGPT+Mermaid Live Editor画流程图

1.粘贴代码通过gpt翻译成Mermaid代码&#xff0c;生成流程图 public int largestValsFromLabels(int[] values, int[] labels, int numWanted, int useLimit) {// 将元素按值从大到小排序PriorityQueue<int[]> pq new PriorityQueue<>((a, b) -> b[0] - a[0])…

MySQL运维篇

一.日志 1.1 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 错误日志是默认开启的…

数学(四) -- LC[29][166] 两数相除与分数到小数

1 分数到小数 1.1 题目描述 题目链接&#xff1a;https://leetcode.cn/problems/fraction-to-recurring-decimal/description/ 1.2 思路分析 1. 长除法 题目要求根据给定的分子和分母&#xff0c;将分数转成整数或小数。由于给定的分子和分母的取值范围都是 [ − 2 31 , 2 …

Linux环境变量提权

linux提权信息收集 Exploit Database - Exploits for Penetration Testers, Researchers, and Ethical Hackers Vulnerability & Exploit Database - Rapid7 NVD - Home CVE -CVE SecWiki GitHub linux系统内核漏洞提权 脏牛提权漏洞&#xff1a; 脏牛提权&#xf…

推荐5个免费好用的UI模板网站!

1、即时设计 即时设计资源广场是一个聚集了大量优秀设计作品和大厂设计系统超过3000个UI组件库的设计师灵感库。该广场每月更新上百个精品模板&#xff0c;且还将这些模板分门别类按不同类型素材进行分类&#xff0c;其丰富的设计资源包括移动设计、网页设计、插画、线框图、矢…

Qt--信号和槽

写在前面 信号与槽机制是Qt中最重要的特性之一&#xff0c;也是其与其他GUI框架的主要区别之一。信号与槽机制允许不同对象之间进行通信和交互&#xff0c;从而实现程序的模块化和可重用性。 在Qt中&#xff0c;信号是一种事件&#xff0c;它可以被任何对象接收并执行相应的操…

Zookeeper、Nacos、Dubbo、Kafka之间的关系

1.Zookeeper Zookeeper 是 Apache Hadoop 的子项目&#xff0c;是一个树型的目录服务&#xff0c;支持变更推送&#xff0c;适合作为 Dubbo 服务的注册中心&#xff0c;工业强度较高。 Zookeeper的功能主要是它的树形节点来实现的。当有数据变化的时候或者节点过期的时候&…

AGV/AMR控制器--科聪

AGV/AMR控制器--科聪 1 行业介绍1.1 控制器概念1.2 行业发展1.3 竞争格局 2 科聪控制器 MRC50002.1 介绍2.2 支持多种导航方式2.3 适配各种轮系底盘2.4 核心参数2.5 优势灵活的二次开发平台&#xff1a;机器人设计软件&#xff08;xRobotStudio&#xff09;完备的实施调试工具&…

干货|写好论文,从一篇优秀的开题报告开始

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 在今天的推文里&#xff0c;要给大家分享的是从开题报告到论文写作&#xff0c;快来一起看看哦~ 开题报告旨在总结与研究课题有关的立论依据、总体规划和预期研究成果&#xff0c;便于潜在…

一分钟带你了解网络安全(如何自学)

一、关于网络安全职业 早些年&#xff0c;网络安全刚起步&#xff0c;作为一个网络安全从业人员&#xff0c;最苦恼的事情就是每当回到村里变成狗蛋儿的时候&#xff0c;七大姑八大姨&#xff0c;邻里乡亲&#xff0c;村子里的各种人都会来找你&#xff0c;狗蛋儿&#xff0c;你…