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 的生命周期
-
配置 - 管理员创建 PV 或 StorageClass
-
绑定 - 用户创建 PVC,系统将其绑定到合适的 PV
-
使用 - Pod 通过 PVC 使用 PV
-
释放 - 用户删除 PVC
-
回收 - 根据 PV 的回收策略(Retain/Delete/Recycle)处理
二、Kubernetes 中的 emptyDir 卷详解
emptyDir 是 Kubernetes 中最简单的 Volume 类型之一,它为 Pod 中的容器提供了一个临时的工作目录。下面我将全面介绍 emptyDir 的特性、用途和工作原理。
基本概念
emptyDir 是一个临时目录,它在 Pod 被分配到节点时创建,并随着 Pod 从节点上删除而被清除。它的生命周期与 Pod 的生命周期完全一致。
关键特性
-
临时性存储:数据不会持久化,Pod 删除后数据丢失
-
节点绑定:存储在 Pod 运行的节点本地
-
容器共享:可被 Pod 内的所有容器访问
-
初始为空:创建时目录为空,因此得名 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 支持两个可选参数:
-
medium:存储介质类型
-
默认:"" (节点默认存储介质,通常是磁盘)
-
Memory:使用 RAM 作为存储介质 (tmpfs)
-
-
sizeLimit:卷的大小限制
-
默认:nil (无限制)
-
示例:
sizeLimit: 500Mi
-
使用内存作为存储介质的示例
volumes:
- name: ram-volumeemptyDir:medium: MemorysizeLimit: 256Mi
典型使用场景
-
临时工作空间:作为应用程序的临时工作目录
-
容器间共享数据:同一 Pod 中多个容器共享文件
-
缓存数据:存储不需要持久化的缓存数据
-
检查点数据:保存应用程序的检查点数据以便从崩溃中恢复
-
日志收集:存储日志文件直到日志收集器处理它们
工作原理
-
创建时机:当 Pod 被分配到节点上时,kubelet 会在节点上创建一个空目录
-
挂载过程:该目录被挂载到 Pod 中指定的容器路径
-
生命周期:
-
Pod 删除 → 目录被删除
-
容器崩溃/重启 → 目录和数据保留
-
Pod 被调度到新节点 → 在新节点上创建新空目录
-
-
存储位置:通常位于节点的
/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 删除后数据丢失
-
不适合存储重要数据
-
节点故障会导致数据丢失
-
内存介质受限于节点可用内存
最佳实践
-
仅用于临时数据:不要用它存储需要持久化的数据
-
合理设置大小限制:特别是使用内存介质时
-
考虑性能需求:对IO要求高的临时数据可使用内存介质
-
监控使用情况:避免占用过多节点资源
-
清理敏感数据:应用应负责清理敏感临时数据
emptyDir 是 Kubernetes 中轻量级的临时存储解决方案,理解它的特性和限制有助于在合适的场景中有效使用它。
相关文章:
k8s存储介绍(三)valume概述与emptydir
目录 一、Kubernetes 中的 Volume 详解 基本概念 Volume 的主要类型(这里简单介绍,后续章节会详细介绍) 1. 本地存储类型 2. 网络存储类型 3. 云提供商存储 4. 特殊用途类型 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) S…...
Nodejs 项目打包部署方式
方式一:PM2 一、准备工作 确保服务器上已安装 Node.js 环境建议使用 PM2 进行进程管理(需要额外安装) 二、部署步骤 1.首先在服务器上安装 PM2(推荐): npm install -g pm22.将项目代码上传到服务器&…...
uv - Getting Started 开始使用 [官方文档翻译]
文章目录 uv亮点安装项目脚本工具Python 版本pip 接口了解更多 入门安装 uv安装方法独立安装程序PyPICargoHomebrewWinGetScoopDockerGitHub 发布 升级 uvShell 自动补全卸载 第一次使用 uv特性Python 版本脚本项目工具pip 接口实用工具 获取帮助帮助菜单查看版本故障排除问题在…...
C++类与对象的的第三个简单的实战练习-3.25笔记
哔哩哔哩C面向对象高级语言程序设计教程(118集全) 简单实战三 创建项目 打开VS,点击创建一个新项目 创建一个空项目 点击下一步 点击工程名称,选择添加 选择新建项 选择C类 取名 点击确定,这时候还需要一个main.cpp …...
CentOS安装sshpass工具-自动化SSH密码认证
sshpass是一个在Linux环境下用于自动化SSH密码认证的工具。 一、功能特点 自动化SSH登录:sshpass允许用户在命令行中直接传递密码,从而无需在SSH连接时手动输入密码。这对于自动化脚本和批处理任务非常有用,因为它可以在非交互式环境下完成…...
k8s中service概述(一)ClusterIP
ClusterIP 是 Kubernetes 中最基础且常用的 Service 类型,主要用于在集群内部提供稳定的网络访问端点。以下是关于 ClusterIP Service 的详细说明: 1. ClusterIP 的核心功能 集群内部访问:ClusterIP 提供一个集群内部的虚拟 IP(VI…...
详解接口的常见请求方式
详解接口的常见请求方式 一、 常见接口请求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 实现方法1. 前端实现2. 后端实现 三、 作用与主要区别四、 举例讲解1. 创建 Spring Boot 工程2. 添加依赖3. 编写 Controller 实现接口关键点说明 4. 启动与测试5. 总…...
HarmonyOS-ArkUI Grip组件
我们在学习List的时候,已经捎带引入了Grid。讲解如下图所示: 也就是,如果一个表,长宽基本都是一致的,那么此时可以完全不用Grid也可以实现,并且,优先考虑的就是List。 如果List实现不了的情况下…...
2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip
一、资料列表 第一课:Deepseek基础入门 第二课:DeepSeek赋能职场 第三课:普通人如何抓住DeepSeek红利 第四课:让科研像聊天一样简单 第五课:DeepSeek与AI幻觉 第六课:基于DeepSeek的AI音乐词曲的创造法 第…...
jupyter使用过程中遇到的问题
1、No module named ‘notebook.extensions’ 报错内容为: No module named notebook.extensions解决办法 出现这个错误代表你尝试给 Jupyter notebook 安装自动补全的插件,但是 notebook 没安装成功; 解决办法:不用 pip 安装 n…...
mac vim命令快捷键
目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首,移动到光标所在行的"行首"$跳到行末,移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…...
【Golang】defer与recover的组合使用
在Go语言中,defer和recover是两个关键特性,通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例: 1. defer 的应用场景 defer用于延迟执行函数调用,确保在函数退出前执行特定操作。主要用途包括ÿ…...
低代码配置式Web组态解析
低代码配置式Web组态技术通过可视化操作和预置组件库,大幅降低开发门槛,适用于工业控制、物联网监控、数据可视化等场景。以下是综合行业实践和产品特性的分析: 一、核心功能与优势 可视化编辑与拖拽布局 提供图形化编辑器࿰…...
KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来
第一部分:KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…...
基于web的家政服务网站
内容摘要 由于互联网的使用,人们在管理、应用、服务等领域使用数据更加简洁、方便,大大提高了工作效率。互联网正逐渐融入我们的生活,影响和改变我们的生活。 家政服务管理系统是典型的信息管理系统(MIS)。其开发主要…...
mac命令行快捷键
光标移动 Ctrl A: 将光标移动到行首。Ctrl E: 将光标移动到行尾。Option 左箭头: 向左移动一个单词。Option 右箭头: 向右移动一个单词。 删除和修改 Ctrl K: 删除从光标到行尾的所有内容。Ctrl U: 删除从光标到行首的所有内容。Ctrl W: 删除光标前的一个单词。Ctrl …...
聚水潭数据集成到MySQL的最佳实践分享
聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中,我们将探讨如何通过轻易云数据集成平台,将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体的集成方案为“聚水潭-商品信息查询-->BI初本-商品信息表_copy”。该方案旨在实现从聚水潭获取商…...
线性代数核心概念与NumPy科学计算实战全解析
前言 学习方法: 思维导图,梳理 多记忆,函数名和功能,参数 学会应用,不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上,标量通常表示为一个普通的数字,如质量…...
Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案
Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案 在Spring Boot中,当接口数据字段为 Long 类型时,返回页面的JSON中该字段通常会被序列化为数字类型。 例如,一个Java对象中有一个 Long 类型的属性 id …...
C#自定义曲线便器功能实现(简化版)
目录 一、曲线编辑器实现功能 二、实现方法说明 三、关键代码说明 1、绘制背景板和曲线 2、绘制坐标系面板 3、绘制曲线 四、工程下载连接 一、曲线编辑器实现功能 添加或者删除控制点,通过移动控制点来修改曲线形状 二、实现方法说明 1、坐标系系统&#x…...
Unity Shader编程】之复杂光照
在Unity Shader的LightMode标签中,除了前向渲染和延迟渲染外,还支持多种渲染模式设置。以下是主要分类及用途: 一、核心渲染路径模式 前向渲染相关 ForwardBase 用于基础光照计算,处理环境光、主平行光、逐顶点/SH光源及光照贴图。…...
解锁U盘属性0字节困境,重获数据生机
在数字化浪潮中,U盘宛如一位忠诚的“数据信使”,频繁穿梭于各种设备之间,为我们存储和传输着重要信息。然而,当U盘突然显示属性为0字节时,就如同这位信使突然“失声”,让我们陷入了数据丢失的恐慌之中。U盘…...
⭐算法OJ⭐二叉树的直径【树】(C++实现)Binary Tree Paths
543. Binary Tree Paths(二叉树的直径) 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 遵循官方安装说明即可,windows需要下载docker desktop后在doc…...
字典树与01trie
字典树简介 当我们通过字典查一个字或单词的时候,我们会通过前缀或关键字的来快速定位一个字的位置,进行快速查找。 字典树就是类似字典中索引表的一种数据结构,能够帮助我们快速定位一个字符串的位置。 字典树是一种存储字符串的数据结构…...
vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.
问题描述: vue项目中,对表单数组赋值时,控制台抛出警告: 问题代码: 问题分析: 1、Vue 要求每个虚拟 DOM 节点必须有唯一的 key。该警告信息通常出现在使用v-for循环的场景中,多个同级节点使用…...
mysql中show命令的使用
在 MySQL 中,SHOW 命令是一个非常实用的工具,用于查询数据库元数据(如数据库、表、列、索引等信息)。以下是常见的 SHOW 命令及其用法: 1. 显示所有数据库 SHOW DATABASES;列出服务器上的所有数据库。 2. 显示当前数据…...
各类神经网络学习:(三)RNN 循环神经网络(中集),同步多对多结构的详细解释
上一篇下一篇RNN(上集)RNN(下集) 同步多对多结构 1)结构详解 ①图解: ②参数含义: x t x_t xt :表示每一个时刻的输入; o t o_t ot :表示每一个时刻的输…...
Python Web 框架 Django、Flask 和 FastAPI 对比
在探索 Python Web 框架时,Django、Flask 和 FastAPI 无疑是最常被提及的名字。根据我们最新的 Python 开发者调查,这三大框架继续稳坐后端 Web 开发的热门宝座。它们均为开源项目,并且与 Python 的最新版本无缝兼容。然而,面对不…...
Hyperlane 似乎是一个轻量级、高性能的 Rust HTTP 服务器库
关键要点 Hyperlane 是一个轻量级、高性能的 Rust HTTP 服务器库,适合简化网络服务开发。它支持 HTTP 请求解析、响应构建、TCP 通信,并提供中间件、WebSocket 和服务器发送事件(SSE)功能。安装通过 cargo add hyperlane 完成&am…...
