k8s pod数据存储Volumes

2024-01-18 09:10

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618578

相关文章

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

MySQL使用binlog2sql工具实现在线恢复数据功能

《MySQL使用binlog2sql工具实现在线恢复数据功能》binlog2sql是大众点评开源的一款用于解析MySQLbinlog的工具,根据不同选项,可以得到原始SQL、回滚SQL等,下面我们就来... 目录背景目标步骤准备工作恢复数据结果验证结论背景生产数据库执行 SQL 脚本,一般会经过正规的审批