当前位置: 首页 > news >正文

K8s卷机制:数据持久化与共享

在 Kubernetes(K8s)中,卷(Volume) 是用于解决容器内数据持久化、容器间数据共享以及与外部存储交互的核心机制。它本质上是一个可供 Pod 中容器访问的存储目录,生命周期独立于容器(容器重启或销毁后,卷中的数据可保留)。

一、卷的核心作用

  1. 数据持久化:容器本身是临时的(销毁后数据丢失),卷可将数据存储在容器外部(如本地磁盘、网络存储),确保数据不随容器消失。
  2. 容器间共享:同一 Pod 内的多个容器可通过挂载同一个卷实现数据共享(如前端容器生成的文件供后端容器处理)。
  3. 对接外部存储:卷支持多种存储类型(本地磁盘、NFS、云存储等),让 Pod 能便捷使用集群外的存储资源。

二、卷的类型与常见实例

K8s 支持多种卷类型,适用于不同场景,以下是常用类型及实例:

1. 临时卷(Ephemeral Volumes)

  • 特点:生命周期与 Pod 一致(Pod 销毁后卷也删除),但数据不依赖单个容器,适合临时缓存、日志等。

  • 常见类型

    • emptyDir:Pod 创建时自动生成的空目录,所有容器可读写,Pod 销毁后数据删除。

    实例:同一 Pod 内的两个容器共享数据

    yaml

    apiVersion: v1
    kind: Pod
    metadata:name: shared-pod
    spec:containers:- name: container-1image: busyboxcommand: ["sh", "-c", "echo 'hello from container1' > /shared/data.txt; sleep 3600"]volumeMounts:  # 挂载卷到容器内目录- name: shared-volumemountPath: /shared- name: container-2image: busyboxcommand: ["sh", "-c", "cat /shared/data.txt; sleep 3600"]volumeMounts:  # 挂载同一个卷- name: shared-volumemountPath: /sharedvolumes:  # 定义卷- name: shared-volumeemptyDir: {}  # 使用 emptyDir 类型
    

2. 持久卷(Persistent Volumes)

  • 特点:生命周期独立于 Pod(集群级资源),数据长期保留,需配合 PVC(PersistentVolumeClaim) 使用(详见前文 PV/PVC 概念)。
  • 实例:通过 PVC 挂载持久卷

    yaml

    apiVersion: v1
    kind: Pod
    metadata:name: pvc-pod
    spec:containers:- name: appimage: nginxvolumeMounts:- name: pv-storagemountPath: /usr/share/nginx/htmlvolumes:- name: pv-storagepersistentVolumeClaim:claimName: my-pvc  # 关联已创建的 PVC
    

3. 本地卷(Local Volumes)

  • 特点:使用节点(Node)本地磁盘作为存储,性能高但数据仅存于单个节点(节点故障可能丢失数据),适合对性能要求高的场景(如数据库临时缓存)。
  • 实例:挂载节点的 /data/local 目录

    yaml

    apiVersion: v1
    kind: Pod
    metadata:name: local-volume-pod
    spec:containers:- name: appimage: busyboxcommand: ["sleep", "3600"]volumeMounts:- name: local-storagemountPath: /mnt/localvolumes:- name: local-storagehostPath:path: /data/local  # 节点上的实际目录type: DirectoryOrCreate  # 若目录不存在则创建
    

4. 网络卷(Network Volumes)

  • 特点:数据存储在网络中的远程服务器,可跨节点访问,适合多 Pod 共享数据(如 NFS、Ceph、云存储等)。
  • 实例:挂载 NFS 网络存储

    yaml

    apiVersion: v1
    kind: Pod
    metadata:name: nfs-pod
    spec:containers:- name: appimage: busyboxcommand: ["sleep", "3600"]volumeMounts:- name: nfs-storagemountPath: /mnt/nfsvolumes:- name: nfs-storagenfs:server: 172.25.254.254  # NFS 服务器 IPpath: /nfs/shared  # NFS 共享目录
    

三、卷的使用流程

  1. 定义卷:在 Pod 的 volumes 字段中声明卷的名称和类型(如 emptyDirhostPathpersistentVolumeClaim 等)。
  2. 挂载卷:在容器的 volumeMounts 字段中,将卷挂载到容器内的指定路径(mountPath)。
  3. 使用数据:容器通过挂载路径读写卷中的数据,实现数据共享或持久化。

四、核心总结

  • 本质:卷是 Pod 内的存储目录,生命周期独立于容器,解决数据持久化和共享问题。
  • 类型:根据场景选择(临时存储用 emptyDir,持久化用 PV/PVC,本地高性能用 hostPath,跨节点共享用 NFS 等网络卷)。
  • 关键:卷是 Pod 级资源,同一 Pod 内的容器可共享卷;跨 Pod 共享需依赖网络存储或 PV/PVC。

通过卷,K8s 实现了容器与存储的解耦,让应用数据管理更灵活、可靠。

http://www.dtcms.com/a/358861.html

相关文章:

  • 当“循环经济”遇上“小程序”,旧物回收正迎来“智慧”升级
  • 奥普新汽车声学测试方案书
  • 谷歌 “Nano Banana“ 深度解析:AI 图像的未来是精准编辑,而非从零生成
  • 构建现代化的“历史上的今天“网站:从API到精美UI的全栈实践
  • jumpserver
  • 字数统计器和文本AI处理,非常好用
  • 【Leetcode】17、电话号码的字母组合
  • MYSQL速通(3/5)
  • Agno - 轻量级Python多智能体系统框架
  • Python可视化与交互-matplotlib库
  • 后台技术方案设计经验之谈
  • C读写xlsx库xlsxio的编译和测试
  • 第2.3节:AI大模型之Claude系列(Anthropic)
  • k8s 定时任务需求模板
  • 直流无刷电机2
  • 【计算机408计算机网络】第四章:自底向上五层模型之网络层
  • Linux IO复用
  • DeepConf:基于置信度提高LLM表现
  • Tomcat 企业级运维实战系列(五):Tomcat 优化和安全加固
  • Tiptrans转运 | 免费5国转运地址
  • Java中不太常见的语法-总结
  • static静态文件和requests请求对象
  • 内网穿透系列十二:一款基于 HTTP 传输和 SSH 加密保护的内网穿透工具 Chisel ,具备抗干扰、稳定、安全特性
  • PromptPerfect-将你的提示词提升到完美
  • 【Java基础知识 19】继承
  • BGP路由协议(三):路径属性
  • Cybero: 1靶场渗透
  • 2021-11-10 C++不变初心数
  • 从咒语到意念:编程语言的世纪演进与人机交互的未来
  • Carrier Aggregation Enabled MIMO-OFDM Integrated Sensing and Communication