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

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

目录

一、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-dataemptyDir: {}
  • hostPath: 将主机节点上的文件或目录挂载到 Pod 中

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

    • 示例:

      volumes:
      - name: host-path-volumehostPath:path: /datatype: Directory

2. 网络存储类型

  • NFS: 网络文件系统

    • 示例:

      volumes:
      - name: nfs-volumenfs:server: nfs-server.example.compath: /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-volumesecret: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: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: slownfs:server: nfs-server.example.compath: /exports

示例 PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvc-claim
spec:storageClassName: slowaccessModes:- ReadWriteOnceresources:requests:storage: 3Gi

StorageClass

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

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

Volume 使用示例

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

apiVersion: v1
kind: Pod
metadata:name: mypod
spec:containers:- name: mycontainerimage: nginxvolumeMounts:- name: myvolmountPath: /usr/share/nginx/htmlvolumes:- name: myvolpersistentVolumeClaim: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: nginxname: nginx-containervolumeMounts:- mountPath: /cachename: cache-volumevolumes:- name: cache-volumeemptyDir: {}

配置选项

emptyDir 支持两个可选参数:

  1. medium:存储介质类型

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

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

  2. sizeLimit:卷的大小限制

    • 默认:nil (无限制)

    • 示例:sizeLimit: 500Mi

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

volumes:
- name: ram-volumeemptyDir:medium: MemorysizeLimit: 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: writerimage: alpinecommand: ["/bin/sh", "-c"]args:- while true; doecho "$(date)" >> /data/log;sleep 1;donevolumeMounts:- name: shared-datamountPath: /data- name: readerimage: alpinecommand: ["/bin/sh", "-c"]args:- tail -f /data/logvolumeMounts:- name: shared-datamountPath: /datavolumes:- name: shared-dataemptyDir: {}

优缺点分析

优点

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

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

  • 适合临时数据存储需求

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

缺点

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

  • 不适合存储重要数据

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

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

最佳实践

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

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

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

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

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

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

相关文章:

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

目录 一、Kubernetes 中的 Volume 详解 基本概念 Volume 的主要类型&#xff08;这里简单介绍&#xff0c;后续章节会详细介绍&#xff09; 1. 本地存储类型 2. 网络存储类型 3. 云提供商存储 4. 特殊用途类型 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) S…...

Nodejs 项目打包部署方式

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

uv - Getting Started 开始使用 [官方文档翻译]

文章目录 uv亮点安装项目脚本工具Python 版本pip 接口了解更多 入门安装 uv安装方法独立安装程序PyPICargoHomebrewWinGetScoopDockerGitHub 发布 升级 uvShell 自动补全卸载 第一次使用 uv特性Python 版本脚本项目工具pip 接口实用工具 获取帮助帮助菜单查看版本故障排除问题在…...

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

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

CentOS安装sshpass工具-自动化SSH密码认证

sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录&#xff1a;sshpass允许用户在命令行中直接传递密码&#xff0c;从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用&#xff0c;因为它可以在非交互式环境下完成…...

k8s中service概述(一)ClusterIP

ClusterIP 是 Kubernetes 中最基础且常用的 Service 类型&#xff0c;主要用于在集群内部提供稳定的网络访问端点。以下是关于 ClusterIP Service 的详细说明&#xff1a; 1. ClusterIP 的核心功能 集群内部访问&#xff1a;ClusterIP 提供一个集群内部的虚拟 IP&#xff08;VI…...

详解接口的常见请求方式

详解接口的常见请求方式 一、 常见接口请求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 实现方法1. 前端实现2. 后端实现 三、 作用与主要区别四、 举例讲解1. 创建 Spring Boot 工程2. 添加依赖3. 编写 Controller 实现接口关键点说明 4. 启动与测试5. 总…...

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音乐词曲的创造法 第…...

jupyter使用过程中遇到的问题

1、No module named ‘notebook.extensions’ 报错内容为&#xff1a; No module named notebook.extensions解决办法 出现这个错误代表你尝试给 Jupyter notebook 安装自动补全的插件&#xff0c;但是 notebook 没安装成功&#xff1b; 解决办法&#xff1a;不用 pip 安装 n…...

mac vim命令快捷键

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

【Golang】defer与recover的组合使用

在Go语言中&#xff0c;defer和recover是两个关键特性&#xff0c;通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例&#xff1a; 1. defer 的应用场景 defer用于延迟执行函数调用&#xff0c;确保在函数退出前执行特定操作。主要用途包括&#xff…...

低代码配置式Web组态解析

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

KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来

第一部分&#xff1a;KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…...

基于web的家政服务网站

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

mac命令行快捷键

光标移动 Ctrl A: 将光标移动到行首。Ctrl E: 将光标移动到行尾。Option 左箭头: 向左移动一个单词。Option 右箭头: 向右移动一个单词。 删除和修改 Ctrl K: 删除从光标到行尾的所有内容。Ctrl U: 删除从光标到行首的所有内容。Ctrl W: 删除光标前的一个单词。Ctrl …...

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

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

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

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

Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案

Spring Boot中接口数据字段为 Long 类型时&#xff0c;前端number精度丢失问题解决方案 在Spring Boot中&#xff0c;当接口数据字段为 Long 类型时&#xff0c;返回页面的JSON中该字段通常会被序列化为数字类型。 例如&#xff0c;一个Java对象中有一个 Long 类型的属性 id …...

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

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

Unity Shader编程】之复杂光照

在Unity Shader的LightMode标签中&#xff0c;除了前向渲染和延迟渲染外&#xff0c;还支持多种渲染模式设置。以下是主要分类及用途&#xff1a; 一、核心渲染路径模式 前向渲染相关 ForwardBase 用于基础光照计算&#xff0c;处理环境光、主平行光、逐顶点/SH光源及光照贴图。…...

解锁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…...

docker使用命令笔记

docker使用命令笔记 1. 安装docker2. 拉取镜像3. 镜像与容器4. 基于镜像创建容器4. 操作创建好的容器5. docker文件传输6. ubuntu的docker的一些基本环境搭建 记录docker的一些使用命令 1. 安装docker 遵循官方安装说明即可&#xff0c;windows需要下载docker desktop后在doc…...

字典树与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;多个同级节点使用…...

mysql中show命令的使用

在 MySQL 中&#xff0c;SHOW 命令是一个非常实用的工具&#xff0c;用于查询数据库元数据&#xff08;如数据库、表、列、索引等信息&#xff09;。以下是常见的 SHOW 命令及其用法&#xff1a; 1. 显示所有数据库 SHOW DATABASES;列出服务器上的所有数据库。 2. 显示当前数据…...

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

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

Python Web 框架 Django、Flask 和 FastAPI 对比

在探索 Python Web 框架时&#xff0c;Django、Flask 和 FastAPI 无疑是最常被提及的名字。根据我们最新的 Python 开发者调查&#xff0c;这三大框架继续稳坐后端 Web 开发的热门宝座。它们均为开源项目&#xff0c;并且与 Python 的最新版本无缝兼容。然而&#xff0c;面对不…...

Hyperlane 似乎是一个轻量级、高性能的 Rust HTTP 服务器库

关键要点 Hyperlane 是一个轻量级、高性能的 Rust HTTP 服务器库&#xff0c;适合简化网络服务开发。它支持 HTTP 请求解析、响应构建、TCP 通信&#xff0c;并提供中间件、WebSocket 和服务器发送事件&#xff08;SSE&#xff09;功能。安装通过 cargo add hyperlane 完成&am…...