k8s存储介绍(三)valume概述与emptydir

news2025/3/30 0:32:32

目录

一、Kubernetes 中的 Volume 详解

基本概念

Volume 的主要类型(这里简单介绍,后续章节会详细介绍)

1. 本地存储类型

2. 网络存储类型

3. 云提供商存储

4. 特殊用途类型

PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

StorageClass

Volume 使用示例

Volume 的生命周期

二、Kubernetes 中的 emptyDir 卷详解

基本概念

关键特性

创建 emptyDir 卷

配置选项

使用内存作为存储介质的示例

典型使用场景

工作原理

内存介质 (tmpfs) 的特殊说明

大小限制 (sizeLimit)

示例:多容器共享 emptyDir

优缺点分析

优点

缺点

最佳实践


一、Kubernetes 中的 Volume 详解

Volume(卷)是 Kubernetes 中用于持久化存储的核心概念,它解决了容器文件系统临时性的问题。下面我将详细介绍 Kubernetes 中的 Volume。

基本概念

Volume 是 Pod 中能够被多个容器访问的共享目录,它与 Pod 的生命周期相同,但比其中的任何容器都持久。当容器重启时,Volume 中的数据会保留。

Volume 的主要类型(这里简单介绍,后续章节会详细介绍)

1. 本地存储类型

  • emptyDir: 临时目录,随 Pod 创建而创建,删除而删除

    • 用途:容器间共享文件、临时缓存等

    • 示例:

      volumes:
      - name: shared-data
        emptyDir: {}
  • hostPath: 将主机节点上的文件或目录挂载到 Pod 中

    • 用途:访问主机系统文件、开发测试环境等

    • 示例:

      volumes:
      - name: host-path-volume
        hostPath:
          path: /data
          type: Directory

2. 网络存储类型

  • NFS: 网络文件系统

    • 示例:

      volumes:
      - name: nfs-volume
        nfs:
          server: nfs-server.example.com
          path: /share
  • iSCSI: iSCSI 存储设备

  • GlusterFS: 分布式文件系统

  • CephFS: Ceph 文件系统

  • FC (Fibre Channel): 光纤通道存储

3. 云提供商存储

  • awsElasticBlockStore: AWS EBS 卷

  • azureDisk: Azure 磁盘

  • azureFile: Azure 文件存储

  • gcePersistentDisk: GCE 持久化磁盘

4. 特殊用途类型

  • secret: 用于将敏感信息(如密码)挂载到 Pod

    • 示例:

      volumes:
      - name: secret-volume
        secret:
          secretName: my-secret
  • configMap: 将配置数据挂载到 Pod

  • downwardAPI: 使 Pod 和容器的元数据可用作文件

  • persistentVolumeClaim: 使用持久卷声明(PVC)来动态提供存储

PersistentVolume (PV) 和 PersistentVolumeClaim (PVC)

这是 Kubernetes 中更高级的持久化存储方案:

  • PersistentVolume (PV): 集群中的存储资源,由管理员配置

  • PersistentVolumeClaim (PVC): 用户对存储的请求,类似于 Pod 消耗节点资源的方式

示例 PV:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-volume
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: slow
  nfs:
    server: nfs-server.example.com
    path: /exports

示例 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-claim
spec:
  storageClassName: slow
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

StorageClass

StorageClass 允许管理员描述他们提供的存储"类",可以动态配置 PV:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ext4

Volume 使用示例

在 Pod 中使用 Volume 的完整示例:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: nginx
    volumeMounts:
    - name: myvol
      mountPath: /usr/share/nginx/html
  volumes:
  - name: myvol
    persistentVolumeClaim:
      claimName: pvc-claim

Volume 的生命周期

  1. 配置 - 管理员创建 PV 或 StorageClass

  2. 绑定 - 用户创建 PVC,系统将其绑定到合适的 PV

  3. 使用 - Pod 通过 PVC 使用 PV

  4. 释放 - 用户删除 PVC

  5. 回收 - 根据 PV 的回收策略(Retain/Delete/Recycle)处理

二、Kubernetes 中的 emptyDir 卷详解

emptyDir 是 Kubernetes 中最简单的 Volume 类型之一,它为 Pod 中的容器提供了一个临时的工作目录。下面我将全面介绍 emptyDir 的特性、用途和工作原理。

基本概念

emptyDir 是一个临时目录,它在 Pod 被分配到节点时创建,并随着 Pod 从节点上删除而被清除。它的生命周期与 Pod 的生命周期完全一致。

关键特性

  1. 临时性存储:数据不会持久化,Pod 删除后数据丢失

  2. 节点绑定:存储在 Pod 运行的节点本地

  3. 容器共享:可被 Pod 内的所有容器访问

  4. 初始为空:创建时目录为空,因此得名 emptyDir

创建 emptyDir 卷

在 Pod 定义中创建 emptyDir 的基本语法:

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: nginx
    name: nginx-container
    volumeMounts:
    - mountPath: /cache
      name: cache-volume
  volumes:
  - name: cache-volume
    emptyDir: {}

配置选项

emptyDir 支持两个可选参数:

  1. medium:存储介质类型

    • 默认:"" (节点默认存储介质,通常是磁盘)

    • Memory:使用 RAM 作为存储介质 (tmpfs)

  2. sizeLimit:卷的大小限制

    • 默认:nil (无限制)

    • 示例:sizeLimit: 500Mi

使用内存作为存储介质的示例

volumes:
- name: ram-volume
  emptyDir:
    medium: Memory
    sizeLimit: 256Mi

典型使用场景

  1. 临时工作空间:作为应用程序的临时工作目录

  2. 容器间共享数据:同一 Pod 中多个容器共享文件

  3. 缓存数据:存储不需要持久化的缓存数据

  4. 检查点数据:保存应用程序的检查点数据以便从崩溃中恢复

  5. 日志收集:存储日志文件直到日志收集器处理它们

工作原理

  1. 创建时机:当 Pod 被分配到节点上时,kubelet 会在节点上创建一个空目录

  2. 挂载过程:该目录被挂载到 Pod 中指定的容器路径

  3. 生命周期

    • Pod 删除 → 目录被删除

    • 容器崩溃/重启 → 目录和数据保留

    • Pod 被调度到新节点 → 在新节点上创建新空目录

  4. 存储位置:通常位于节点的 /var/lib/kubelet/pods/<pod-uid>/volumes/kubernetes.io~empty-dir/ 目录下

内存介质 (tmpfs) 的特殊说明

当设置 medium: Memory 时:

  • 数据存储在 RAM 中而不是磁盘上

  • 读写速度极快

  • 节点重启会导致数据丢失

  • 受限于节点内存资源

  • 计入容器的内存使用量

大小限制 (sizeLimit)

  • 当设置 sizeLimit 时,kubelet 会监控目录的空间使用

  • 如果超过限制,Pod 可能会被驱逐 (Evicted)

  • 对于内存介质,限制的是内存使用量

  • 对于磁盘介质,限制的是磁盘使用量

示例:多容器共享 emptyDir

apiVersion: v1
kind: Pod
metadata:
  name: shared-volumes
spec:
  containers:
  - name: writer
    image: alpine
    command: ["/bin/sh", "-c"]
    args:
    - while true; do
        echo "$(date)" >> /data/log;
        sleep 1;
      done
    volumeMounts:
    - name: shared-data
      mountPath: /data

  - name: reader
    image: alpine
    command: ["/bin/sh", "-c"]
    args:
    - tail -f /data/log
    volumeMounts:
    - name: shared-data
      mountPath: /data

  volumes:
  - name: shared-data
    emptyDir: {}

优缺点分析

优点

  • 简单易用,无需额外配置

  • 访问速度快,特别是使用内存介质时

  • 适合临时数据存储需求

  • 同一 Pod 中容器间共享数据的便捷方式

缺点

  • 数据不持久,Pod 删除后数据丢失

  • 不适合存储重要数据

  • 节点故障会导致数据丢失

  • 内存介质受限于节点可用内存

最佳实践

  1. 仅用于临时数据:不要用它存储需要持久化的数据

  2. 合理设置大小限制:特别是使用内存介质时

  3. 考虑性能需求:对IO要求高的临时数据可使用内存介质

  4. 监控使用情况:避免占用过多节点资源

  5. 清理敏感数据:应用应负责清理敏感临时数据

emptyDir 是 Kubernetes 中轻量级的临时存储解决方案,理解它的特性和限制有助于在合适的场景中有效使用它。

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

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

相关文章

Nodejs 项目打包部署方式

方式一&#xff1a;PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理&#xff08;需要额外安装&#xff09; 二、部署步骤 1.首先在服务器上安装 PM2&#xff08;推荐&#xff09;&#xff1a; npm install -g pm22.将项目代码上传到服务器&…

C++类与对象的的第三个简单的实战练习-3.25笔记

哔哩哔哩C面向对象高级语言程序设计教程&#xff08;118集全&#xff09; 简单实战三 创建项目 打开VS&#xff0c;点击创建一个新项目 创建一个空项目 点击下一步 点击工程名称&#xff0c;选择添加 选择新建项 选择C类 取名 点击确定&#xff0c;这时候还需要一个main.cpp …

HarmonyOS-ArkUI Grip组件

我们在学习List的时候&#xff0c;已经捎带引入了Grid。讲解如下图所示&#xff1a; 也就是&#xff0c;如果一个表&#xff0c;长宽基本都是一致的&#xff0c;那么此时可以完全不用Grid也可以实现&#xff0c;并且&#xff0c;优先考虑的就是List。 如果List实现不了的情况下…

2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip

一、资料列表 第一课&#xff1a;Deepseek基础入门 第二课&#xff1a;DeepSeek赋能职场 第三课&#xff1a;普通人如何抓住DeepSeek红利 第四课&#xff1a;让科研像聊天一样简单 第五课&#xff1a;DeepSeek与AI幻觉 第六课&#xff1a;基于DeepSeek的AI音乐词曲的创造法 第…

mac vim命令快捷键

目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首&#xff0c;移动到光标所在行的"行首"$跳到行末&#xff0c;移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…

低代码配置式Web组态解析

低代码配置式Web组态技术通过可视化操作和预置组件库&#xff0c;大幅降低开发门槛&#xff0c;适用于工业控制、物联网监控、数据可视化等场景。以下是综合行业实践和产品特性的分析&#xff1a; ‌一、核心功能与优势‌ ‌可视化编辑与拖拽布局‌ 提供图形化编辑器&#xff0…

基于web的家政服务网站

内容摘要 由于互联网的使用&#xff0c;人们在管理、应用、服务等领域使用数据更加简洁、方便&#xff0c;大大提高了工作效率。互联网正逐渐融入我们的生活&#xff0c;影响和改变我们的生活。 家政服务管理系统是典型的信息管理系统&#xff08;MIS&#xff09;。其开发主要…

聚水潭数据集成到MySQL的最佳实践分享

聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中&#xff0c;我们将探讨如何通过轻易云数据集成平台&#xff0c;将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体的集成方案为“聚水潭-商品信息查询-->BI初本-商品信息表_copy”。该方案旨在实现从聚水潭获取商…

线性代数核心概念与NumPy科学计算实战全解析

前言 学习方法&#xff1a; 思维导图&#xff0c;梳理 多记忆&#xff0c;函数名和功能&#xff0c;参数 学会应用&#xff0c;不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上&#xff0c;标量通常表示为一个普通的数字&#xff0c;如‌质量…

C#自定义曲线便器功能实现(简化版)

目录 一、曲线编辑器实现功能 二、实现方法说明 三、关键代码说明 1、绘制背景板和曲线 2、绘制坐标系面板 3、绘制曲线 四、工程下载连接 一、曲线编辑器实现功能 添加或者删除控制点&#xff0c;通过移动控制点来修改曲线形状 二、实现方法说明 1、坐标系系统&#x…

解锁U盘属性0字节困境,重获数据生机

在数字化浪潮中&#xff0c;U盘宛如一位忠诚的“数据信使”&#xff0c;频繁穿梭于各种设备之间&#xff0c;为我们存储和传输着重要信息。然而&#xff0c;当U盘突然显示属性为0字节时&#xff0c;就如同这位信使突然“失声”&#xff0c;让我们陷入了数据丢失的恐慌之中。U盘…

⭐算法OJ⭐二叉树的直径【树】(C++实现)Binary Tree Paths

543. Binary Tree Paths&#xff08;二叉树的直径&#xff09; Given the root of a binary tree, return the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or m…

字典树与01trie

字典树简介 当我们通过字典查一个字或单词的时候&#xff0c;我们会通过前缀或关键字的来快速定位一个字的位置&#xff0c;进行快速查找。 字典树就是类似字典中索引表的一种数据结构&#xff0c;能够帮助我们快速定位一个字符串的位置。 字典树是一种存储字符串的数据结构…

vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.

问题描述&#xff1a; vue项目中&#xff0c;对表单数组赋值时&#xff0c;控制台抛出警告&#xff1a; 问题代码&#xff1a; 问题分析&#xff1a; 1、Vue 要求每个虚拟 DOM 节点必须有唯一的 key。该警告信息通常出现在使用v-for循环的场景中&#xff0c;多个同级节点使用…

各类神经网络学习:(三)RNN 循环神经网络(中集),同步多对多结构的详细解释

上一篇下一篇RNN&#xff08;上集&#xff09;RNN&#xff08;下集&#xff09; 同步多对多结构 1&#xff09;结构详解 ①图解&#xff1a; ②参数含义&#xff1a; x t x_t xt​ &#xff1a;表示每一个时刻的输入&#xff1b; o t o_t ot​ &#xff1a;表示每一个时刻的输…

UR5e机器人位姿

UR5e 作为一款 6 自由度协作机器人&#xff0c;其末端执行器的位姿&#xff08;位置与姿态的组合&#xff09;控制是实现精准操作的核心。在笛卡尔坐标系中&#xff0c;位姿通常用齐次变换矩阵表示&#xff0c;包含末端的三维位置&#xff08;x, y, z&#xff09;和三维姿态&am…

导入 Excel 规则批量修改或删除 PDF 文档内容

需要对 PDF 文档内容进行修改的时候&#xff0c;通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候&#xff0c;有什么方法可以帮我们实现批量操作呢&#xff1f;今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…

ISIS-1 ISIS概述

前面几章我们介绍了OSPF的基础工作原理以及怎样交互LSA形成LSDB链路状态数据库的 这一章我们来介绍另一个链路状态路由协议,ISIS路由协议 一、概述 ISIS(Intermediate System to Intermediate System,中间系统到中间系统)是由ISO(International Organization for Standardiza…

茱元游戏TV2.9.3 | 适配多设备的经典街机游戏集合

茱元游戏TV是一款专为TV端设计的游戏软件&#xff0c;同时适配手机、投影仪和车机等多种设备。尽管其兼容性一般&#xff0c;仅支持安卓9.0以上系统&#xff0c;但它提供了丰富的经典街机游戏资源&#xff0c;非常适合8090后怀旧游玩。注意&#xff0c;游戏需先下载才能玩&…

RTD2525BE《HDMI转EDP,DP转EDP》显示器芯片

一、产品概述 瑞昱RTD2525BE是一款专为高端显示设备设计的多接口转换芯片&#xff0c;支持HDMI 2.0与DisplayPort&#xff08;DP&#xff09;1.4双输入&#xff0c;并高效转换为嵌入式DisplayPort&#xff08;eDP&#xff09;输出。该芯片集成先进信号处理技术&#xff0c;支持…