当前位置: 首页 > 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.xdnf.cn/news/1397575.html

相关文章:

  • 【机器学习基础】机器学习中的容量、欠拟合与过拟合:理论基础与实践指南
  • 【高级机器学习】 4. 假设复杂度与泛化理论详解
  • HiFi-GAN模型代码分析
  • 理解JVM
  • web渗透ASP.NET(Webform)反序列化漏洞
  • psql介绍(PostgreSQL命令行工具)(pgAdmin内置、DBeaver、Azure Data Studio)数据库命令行工具
  • 【OpenGL】LearnOpenGL学习笔记17 - Cubemap、Skybox、环境映射(反射、折射)
  • sql简单练习——随笔记
  • 打工人日报#20250830
  • 鸿蒙ArkUI 基础篇-12-List/ListItem-界面布局案例歌曲列表
  • 音视频学习(六十二):H264中的SEI
  • [字幕处理]一种使用AI翻译mkv视频字幕操作流程 飞牛
  • 【Blender】二次元人物制作【一】:二次元角色头部建模
  • Java的Optional实现优雅判空新体验【最佳实践】
  • 【已解决】could not read Username for ‘https://x.x.x‘: No such device or address
  • 算法(③二叉树)
  • leetcode算法刷题的第二十二天
  • DVWA靶场通关笔记-文件包含(Impossible级别)
  • 数据治理进阶——解读数据治理体系基础知识【附全文阅读】
  • 【DreamCamera2】相机应用修改成横屏后常见问题解决方案
  • 用户态网络缓冲区设计
  • MQTT 连接建立与断开流程详解(二)
  • Vue3 + GeoScene 地图点击事件系统设计
  • 学习大模型,还有必要学习机器学习,深度学习和数学吗
  • DAEDAL:动态调整生成长度,让大语言模型推理效率提升30%的新方法
  • Oracle下载安装(学习版)
  • Nacos-3.0.3 适配PostgreSQL数据库
  • 基于Spring Boot小型超市管理系统的设计与实现(代码+数据库+LW)
  • 如何理解 nacos 1.x 版本的长轮询机制
  • 从咒语到意念:编程语言的世纪演进与人机交互的未来