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

k8s pod数据存储Volumes

一、说在前面的话

在 Kubernetes 的 Deployment 中,您可以使用多种类型的 Volumes 来管理 Pod 中的数据。
作用是用来共享目录及配置,不用在每个pod里进行配置。

本文主要概述怎么使用HostPath、PersistentVolumeClaim、ConfigMap。

二、k8s有哪些Volumes

来自chatgpt

以下是一些常见的 Volume 类型:1. **EmptyDir**: 这是一个临时目录,在 Pod 被调度到 Node 上时创建,Pod 终止时被删除。可以用于容器之间共享临时数据。2. **HostPath**: 将宿主机的文件或目录挂载到 Pod 中。在一些特定场景中可能会用到,但要注意宿主机文件的权限和共享问题。3. **PersistentVolumeClaim (PVC)**: PVC 是与持久卷 (Persistent Volume, PV) 绑定的声明,它表示 Pod 对持久卷的需求。通过 PVC,Pod 可以请求特定的持久存储。4. **ConfigMap**: ConfigMap 可以用于将配置文件或配置数据注入到 Pod 中。可以用于配置容器的环境变量、配置文件等。5. **Secret**: Secret 类型的 Volume 用于将敏感信息(如密码、凭据等)安全地注入到 Pod 中。6. **NFS**: 允许将 NFS (Network File System) 挂载到 Pod 中,用于实现持久化存储。7. **Azure Disk/Azure File**: Azure Cloud 提供的磁盘和文件存储,在 Azure Kubernetes Service (AKS) 中常用。8. **GCE Persistent Disk**: Google Cloud 提供的持久磁盘,在 Google Kubernetes Engine (GKE) 中常用。9. **AWS Elastic Block Store (EBS)**: Amazon Web Services (AWS) 提供的块存储,在 Amazon Elastic Kubernetes Service (EKS) 中常用。10. **Ceph RBD**: Ceph 是一个分布式存储系统,RBD (Rados Block Device) 可以用于在 Pod 中挂载 Ceph 存储。这些是 Kubernetes 中常见的 Volume 类型,您可以根据应用的需求选择合适的 Volume 类型来管理 Pod 的数据。

下面,我将选几种volumes进行详细说明。

三、PersistentVolumeClaim (PVC)

1、deployment.yaml

  • {{.Values.appName}} 为项目名称,这里都以xx-job为例。
  • 注意,这里有一个subPath,值是xx-job
    containers:       volumeMounts:- mountPath: /opt/xxx/{{ .Values.appName }}/resourcesname: volume-resourcessubPath: {{ .Values.appName }}volumes:- name: volume-resourcespersistentVolumeClaim:claimName: application-resources

2、创建pvc

在这里插入图片描述

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
# pvc的名称,对应上文的claimNamename: application-resources
# 命名空间,必须填写,和Pod的namespace在一起namespace: java-service
spec:accessModes:- ReadWriteManyresources:requests:storage: 10Gi# 需要先创建存储类:Storage Class,或者指定已创建好的volumeNamestorageClassName: managed-nfs-storagevolumeMode: Filesystem# 如果没有像下面这样指定volumeName,则需要指定存储类storageClassName# volumeName: nfs-mvn-repo

在这里插入图片描述
创建成功,见下图:
在这里插入图片描述

如此,它会自动创建pv:pvc-25c8493c-d820-49c4-b523-111c86ceaa6d
在这里插入图片描述
在这里插入图片描述

验证是否已创建了持久化卷。

在这里插入图片描述

  • 可以看到,目录下已创建了子目录xx-job。

# 挂载nfs
mount -t nfs 192.168.80.170:/srv/nfs/disk /mnt/nfs/# 各个pod之间共享目录xx-job下的内容
root@dev-vm-k8s-master:/mnt/nfs/java-service-application-resources-pvc-25c8493c-d820-49c4-b523-111c86ceaa6d# ll
total 8
drwxrwxrwx  3 root root   28 Aug  2 09:30 ./
drwxr-xr-x 33 root root 4096 Aug  3 00:35 ../
drwxrwxrwx  2 root root   10 Aug  2 09:30 xx-job/

四、HostPath

使用示例:

    containers:volumeMounts:- mountPath: /etc/localtimename: volume-localtimevolumes:- hostPath:path: /etc/localtimetype: ''name: volume-localtime

五、ConfigMap

可以用于将配置文件或配置数据注入到 Pod 中。可以用于配置容器的环境变量、配置文件等

deployment.yaml引用ConfigMap有好几种方式:

  • 使用ConfigMap中的配置
     containers:envFrom:- configMapRef:name: {{ .Values.appName }}
  • 使用特定的配置项
     containers:env:- name: ENV_VAR_NAMEvalueFrom:configMapKeyRef:name: {{ .Values.appName }}key: key-in-configmap
  • 挂载的方式
     containers:volumeMounts:- mountPath: /opt/xxx/{{ .Values.appName }}/configname: config-volumereadOnly: truevolumes:- configMap:name: {{ .Values.appName }}name: config-volume

创建ConfigMap

在这里插入图片描述

kind: ConfigMap
apiVersion: v1
metadata:name: xx-jobnamespace: java-servicelabels:app: xx-job
data:spring.profiles.active: devapplication.yml: |-spring:datasource:url: jdbc:log4jdbc:mysql://192.168.8.19:3306/xxl_job_k8s?zeroDateTimeBehavior=CONVERT_TO_NULL&useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456driver-class-name: net.sf.log4jdbc.DriverSpy

Pod节点可以读取到环境变量spring.profiles.active,其值为dev。

另外,你在目录/opt/xxx/xx-job/config已挂载了application.yml和spring.profiles.active。

  • 进入pod容器里验证,可以看到已经把ConfigMap(xx-job)内的key、file挂载上来。
/opt/xxx/xx-job/config # ls
spring.profiles.active application.yml

六、总结

不同的Volumes,适用于不同的数据或文件的共享。
在我们的开发过程中,会遇到各种各样的情景:

  • 环境变量
  • 第三方jar包所依赖的文件,比如Hanlp的data数据
  • 支付所需的证书文件
  • 字节码技术的java agent jar包,用于数据透传、灰度发布、apm等场景,比如pinpoint/skywalking、transmittable-thread-local等等

相关文章:

k8s pod数据存储Volumes

一、说在前面的话 在 Kubernetes 的 Deployment 中,您可以使用多种类型的 Volumes 来管理 Pod 中的数据。 作用是用来共享目录及配置,不用在每个pod里进行配置。 本文主要概述怎么使用HostPath、PersistentVolumeClaim、ConfigMap。 二、k8s有哪些Vol…...

ZYNQ在Petalinux系统下双网口同网段的实现

ZYNQ在Petalinux系统下双网口同网段的实现 1.开发环境 采用了赛灵思zynq xc7z100芯片,外部挂载了两个网口phy芯片(marvell 88e1510),且两个网口phy芯片公用MDIO管脚,bd配置如下: 2.问题说明 忙去了&am…...

突破传统监测模式:业务状态监控HM的新思路 | 京东云技术团队

一、传统监控系统的盲区,如何打造业务状态监控。 在系统架构设计中非常重要的一环是要做数据监控和数据最终一致性,关于一致性的补偿,已经由算法部的大佬总结过就不再赘述。这里主要讲如何去补偿?补偿的方案哪些?这就…...

7-16 验证“哥德巴赫猜想” (20 分)

7-16 验证“哥德巴赫猜想” (20 分) 数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24519,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以…...

GEE学习02 --设置Jupyter Notebook的打开路径

直接双击Jupyter Notebook 桌面图标运行时,打开的文件路径是默认的:C:\用户\用户名 如果使用python命令提示符打开jupyter notebook , 而我新建的GEE学习文件夹在另一个路径,可以直接修改默认的保存路径:…...

stm32与上位机电脑间最快的通信方式是什么?

对于小型多关节机械臂的控制电路设计,选择合适的通信方式可以提高MCU与上位机之间的实时性。以下是一些在STM32上常用的通信方式,你可以根据你的具体需求选择适合的: 串口通信(UART):串口通信是一种常见的…...

pytorch学习——卷积神经网络——以LeNet为例

目录 一.什么是卷积? 二.卷积神经网络的组成 三.卷积网络基本元素介绍 3.1卷积 3.2填充和步幅 3.2.1填充(Padding) 填充是指在输入数据周围添加额外的边界值(通常是零),以扩展输入的尺寸。填充可以在卷…...

stm32 mpu6050 cubemx DMP法读取角度

文章目录 前言一、相关文件二、cubemx配置三、代码变量初始化主循环 总结 前言 文件 记录使用dmp库来读取mpu6050的角度。 这是参考文件 参考1–主要参考 github参考 参考2 参考三 一、相关文件 相关文件在这里下载(未填,不过可以在上面的git中下载&a…...

.Net6 Core Web API 配置 log4net + MySQL

目录 一、导入NuGet 包 二、添加配置文件 log4net.config 三、创建MySQL表格 四、Program全局配置 五、帮助类编写 六、效果展示 小编没有使用依赖注入的方式。 一、导入NuGet 包 ---- log4net 基础包 ---- Microsoft.Extensions.Logging.Log4Net…...

校园跑腿小程序运营攻略

作为一名校园跑腿小程序的运营者,你可能会面临诸如用户获取、平台推广、服务质量保证等挑战。在本篇推文中,我将为你提供一些关键的运营策略,帮助你成功运营校园跑腿小程序。 1. 用户获取和留存 用户是校园跑腿小程序成功的关键。以下是一些…...

InfluxDB2如何求增量数据

需求 项目中需要接入电表设备,求用电量。 按天和设备统计用电量 按天统计用电量 统计总用电量 存在的问题 difference 函数可以求增量,但是以上计算均存在一个问题,比如xx设备有8.1号和8.2号的数据,我统计每天的用电量&#xf…...

Flink作业调度的9种状态

1.什么是作业调度 Flink 通过 Task Slots 来定义执行资源。每个 TaskManager 有一到多个 task slot,每个 task slot 可以运行一条由多个并行 task 组成的流水线。 这样一条流水线由多个连续的 task 组成,比如并行度为 n 的 MapFunction 和 并行度为 n 的…...

8、Kubernetes核心技术 - ConfigMap

目录 一、ConfigMap概述 二、ConfigMap创建 2.1、命令行方式创建 2.2、yaml 文件方式创建 三、ConfigMap查询 四、ConfigMap更新 4.1、kubectl edit方式 4.2、kubectl apply方式 五、ConfigMap使用 5.1、spec.env 【环境变量】 5.2、spec.envFrom 【环境变量】 5.3…...

音视频--DTMF信号发送及检测

参考资料 https://zh.wikipedia.org/wiki/%E5%8F%8C%E9%9F%B3%E5%A4%9A%E9%A2%91https://www.cnblogs.com/lijingcheng/p/4454932.html 1. DTMF是什么 1.1 DTMF定义 双音多频信号(英语:Dual-Tone Multi-Frequency,简称:DTMF&a…...

阿里云容器服务助力极氪荣获 FinOps 先锋实践者

作者:海迩 可信云评估是中国信息通信研究院下属的云计算服务和软件的专业评估体系,自 2013 年起历经十年发展,可信云服务评估体系已日臻成熟,成为政府支撑、行业规范、用户选型的重要参考。 2022 年 5 月国务院国资委制定印发《…...

C++ 通过time.windows.com获取时间

C++ 通过time.windows.com获取时间 在C++中,你可以使用 <ctime>头文件中的 time()函数来获取当前的系统时间。然后,你可以使用 <ctime>头文件中的 localtime()函数将时间转换为本地时间,并从中获取小时、分钟和秒。 以下是一个示例代码,演示如何通过time.windo…...

MPLAB加载c文件为什么不能添加到工程中的source files中

MPLAB加载c文件为什么不能添加到工程中的source files中 因为你安装好MAPLAB软件之后你的编译器是默认的编译器&#xff0c;所以当你添加C文件时&#xff0c;软件是不认识C文件的&#xff0c;只有手动的将编译器改成自安装的PICC编译器才能进行C文件的正确加载。 具体修改步骤…...

Tcp的粘包和半包问题及解决方案

目录 粘包&#xff1a; 半包&#xff1a; 应用进程如何解读字节流&#xff1f;如何解决粘包和半包问题&#xff1f; ①&#xff1a;固定长度 ②&#xff1a;分隔符 ③&#xff1a;固定长度字段存储内容的长度信息 粘包&#xff1a; 一次接收到多个消息&#xff0c;粘包 应…...

路由的hash和history模式的区别

目录 ✅ 路由模式概述 一. 路由的hash和history模式的区别 1. hash模式 2. history模式 3. 两种模式对比 二. 如何获取页面的hash变化 ✅ 路由模式概述 单页应用是在移动互联时代诞生的&#xff0c;它的目标是不刷新整体页面&#xff0c;通过地址栏中的变化来决定内容区…...

CS5366+VL171母座正反插HDMI(CS5466也可搭配)国产芯片TYPEC方案设计 ASL电路原理图 集睿致远+威锋设计

VL171是威锋芯片,可搭配ASL集睿致远CS5366设计TypeC母座正反插转HDMI高清投屏方案&#xff0c;CS5366是2lane 芯片&#xff0c;支持4K60HZ,是CS5266的升级版&#xff0c;CS5366设计拓展坞方案可以替代CS5266携带快充100W的PD和US,多口HUB也不在话下&#xff0c;而画面的刷新率和…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...