K8s数据存储之详解(Detailed Explanation of K8s Data Storage)

K8s数据存储相关概念详解(临时存储,节点存储,网络存储,PV/PVC)

本篇文章分享一下存储卷和数据持久化的相关概念:

  • 存储卷概述

  • 临时存储卷(Ephemeral Volumes

  • 节点存储卷(Node-local Volumes

  • 网络存储卷(Network Volumes

  • 持久存储卷(Persistent Volumes

  • 图片

1. 存储卷概述

存储卷(Volume) 是一个抽象层,是定义在Pod资源之上,表示可以被容器挂载的存储资源。每个容器都可以通过卷来持久化或共享数据。存储卷的生命周期由 Pod 控制,Pod 被销毁时,相关的卷也会被销毁(除非是持久化存储卷)。

Kubernetes 中的存储卷有以下几个关键特性:

  • 生命周期:与 Pod 生命周期相同。Pod 启动时,存储卷被挂载到容器中,Pod 销毁时,存储卷也随之销毁(但对于持久化存储卷,存储内容会被保留)。

  • 数据共享:多个容器可以挂载同一个存储卷,从而实现数据共享和互操作。

  • 支持多种存储后端:Kubernetes 支持多种存储类型,包括本地磁盘、NFS、云存储、分布式存储等。

存储卷类型:

  • 临时存储卷

  • 节点存储卷

  • 网络存储卷

  • 持久存储卷

2. 临时存储卷

临时存储卷是与 Pod 生命周期紧密绑定的,它们在 Pod 启动时创建,并在 Pod 被销毁时删除。临时存储卷适用于容器运行时的短期数据存储需求。例如,容器内部的缓存数据或其他不需要持久化的数据。

常见的临时存储卷:

  • emptyDir:在 Pod 启动时创建,Pod 被删除时删除,适合用于容器间的临时数据交换。例如,可以用它来在多个容器之间共享数据。

  •  configMap:用于存储配置文件,将配置数据挂载为文件供容器访问。可以动态更新配置。

  • secret:用于存储敏感数据(如密码、API 密钥等),并提供加密存储和访问的能力。

  • downwardAPI:允许容器访问有关 Pod 和容器的元数据,如 Pod 名称、Pod IP 等信息。

emptyDir:配置参考

apiVersion: v1
kind: Pod
metadata:
  name: emptydir-example
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:   
        - mountPath: /data
          name: data-volume
  volumes:
    - name: data-volume
      emptyDir: {}

特点:

  • 数据会在 Pod 销毁时丢失。

  • 不具有持久化能力,不适用于需要持久化数据的应用场景。

3. 节点存储卷

hostPath类型的存储卷是指与某个节点直接关联的存储资源,通常用于存储与特定节点相关的数据。。它们的生命周期依赖于节点,Pod 可以使用节点存储卷进行高效的本地存储。

hostPath存储卷将主机文件系统上的某个目录挂载到 Pod 中,可以使用本地节点的磁盘资源。这种类型的存储卷适用于测试环境、存储日志文件或共享存储等。 

hostPath卷:配置参考

apiVersion: v1
kind: Pod
metadata:
  name: hostpath-example
spec:
  containers:
    - name: nginx
      image: nginx
      volumeMounts:   # 定义存储卷挂载列表
        - mountPath: /var/log   # 容器的挂载目录
          name: varlog
          readOnly: true  # 可选字段,默认false
  volumes:   # 定义存储卷列表
    - name: varlog
      hostPath:
        path: /var/log   # 主机上目录位置
        type: Directory  # 此字段可选

常见的hostPath卷类型type

类型说明
""空字符串(默认)用于向后兼容,这意味着在安装 hostPath 卷之前不会执行任何检查。
DirectoryOrCreate路径上什么都不存在,那么将根据需要创建空目录,权限设置为 0755
Directory路径上必须存在的目录
FileOrCreate路径上什么都不存在,那么将在那里根据需要创建空文件,权限设置为 0644
File路径上必须存在的文件

特点:

  • 具有持久化能力,但仅限固定节点。

  • 适合需要在特定节点上存储数据的场景,daemonset控制器。

  • 存储卷只能在节点本地使用,无法跨节点共享(缺点)。

  • hostPath 卷的使用需要谨慎,因为它会与节点的文件系统直接交互,可能引发数据一致性和安全性问题。

4. 网络存储卷

网络存储卷是指通过网络协议将远程存储系统挂载到 Kubernetes 集群中的存储卷。它们适用于跨节点共享数据的场景,通常需要支持多 Pod 或多节点的并发访问。

常见的网络存储卷类型:

  • NFS(Network File System):通过 NFS 协议共享文件系统,多个 Pod 可以共享同一个存储卷,适用于文件存储、共享文件等场景。

  • GlusterFS:一个开源的分布式文件系统,支持高可用性和横向扩展,适用于大规模的文件存储。

  • CephFS:Ceph 的分布式文件系统,支持高可用、高性能和数据冗余,适合大规模存储系统。

    温馨提示:

  • GlusterFS在v1.25 版本中被弃用,然后在 v1.26 版本中被完全移除。

  • Ceph RBD在v1.28 版本中被弃用,并在 v1.31 版本中被完全移除。

  • NFS存储仍然支持,后期可能进入大量支持云存储阶段

4.1 NFS卷:配置参考

前提:有可用的NFS服务器并配置相应的挂载目录。

apiVersion: v1
kind: Pod
metadata:
  name: nfs-pod
spec:
  containers:
    - name: redis
      image: redis
      volumeMounts:
        - mountPath: /data # 挂载到容器的路径
          name: nfs-volume
  volumes:
    - name: nfs-volume
      nfs:
        server: <nfs-server-ip>  # NFS服务器IP
        path: /data/redis    # nfs服务器的共享路径
        readOnly: true   # 可选,默认为false

4.2 RBD存储卷:配置参考

前提:在Kubernetes集群外存在一个Cepht RBD存储集群,网络与集群互通。

apiVersion v1
kind: Pod
metadata:
  name: rbd-pod
spec:
  containers:
  - name: redis
    image: redis
    ports:
    - containerPort: 6379
      name: redisport
    volumeMounts:
    - mountPath: /data
      name: reids-rdb-vol
  volumes:
    - name: redis-rbd-vol
      rbd:
        monitors:
        - '10.0.0.105':6789
        - '10.0.0.106':6789
        - '10.0.0.107':6789
        pool: k8s-rbd
        image: redis
        fsType: xfs
        readOnly: false
        user: admin
        secretRef:
          name: ceph-secret

字段说明:

  • monitors:Ceph 存储监视器

  • image: rados image 的名称

  • pool: rados 存储名称,默认为 RBD。

  • user: rados 用户名,默认为 admin。

  • secretRef:RBD 用户认证时使用的保存有相应认证信息的 Secret 对象

  • readOnly:是否以只读的方式进行访问,默认为false。

  • fsType:要挂载的存储卷的文件系统类型,如 ext4、xfs、ntfs 等,默认为 ext4。

网络存储卷特点:

  • 支持跨节点的文件共享。

  • 适用于多容器共享数据的场景。

  • 性能可能受到网络带宽和延迟的影响。

5. 持久存储卷

持久存储卷(Persistent Volumes,简称 PV)与普通的临时存储卷不同,PV 设计用于持久化存储,在 Pod 的生命周期之外仍然存在,适用于需要长期存储的数据,如数据库、日志文件、缓存、重要的配置文件等。

持久化存储卷(PV)有两种形式:

  • 静态 PV:管理员手动预先创建并配置 PV,它绑定到一个具体的存储资源(如 NFS、iSCSI、云存储等)。PV 的生命周期与 Pod 无关,即便 Pod 被销毁,PV 中的数据仍然保留。PV 的生命周期与 Pod 无关,即便 Pod 被销毁,PV 中的数据仍然保留。

  • 动态 PV:通过 StorageClass 进行动态创建。管理员通过 StorageClass 定义存储的类型和参数,Kubernetes 会根据 PVC 请求动态创建相应的 PV。

5.1. PV 和 PVC 的关系

PV和PVC通过声明式的方式实现存储的管理:

  • PV:集群层面资源,不受namespace限制。通常与物理存储或云存储后端绑定。每个 PV 定义了存储容量、访问模式、存储类型(如 NFS、Ceph、EBS)等属性。

  • PVC:是对 PV 的请求。PVC 声明了存储需求(例如容量、访问模式等),Kubernetes 会根据 PVC 来匹配并绑定到合适的 PV。

用户通过 PVC 请求存储,Kubernetes 会自动将 PVC 和 PV 绑定。PVC 提供了对存储资源的抽象,应用程序无需关心具体的存储实现。

PV配置参考:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage-class
  nfs:
    path: /data/nfs
    server: <nfs-server-ip>

PVC配置参考:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: nfs-storage-class

5.2. PV/PVC的生命周期

其实PV 的生命周期和 PVC 的生命周期是分开的,PV 的生命周期与 Pod 无关,即便 Pod 被销毁,PV 中的数据仍然保留。

PV和PVC的整体的生命周期:

图片

5.2.1. PV 的生命周期

创建完成的PV资源可能处于下面四种状态的其中一种,代表着PV资源生命周期的各个阶段

  • 可用状态(Available):当 PV 被创建时,它处于Available状态。此时,PV 可以绑定到 PVC。

  • 已绑定状态(Bound):当 PVC 与 PV 绑定时,PV 会进入Bound状态。此时,PVC 和 PV 之间存在绑定关系,存储已经被分配给 Pod。

  • 回收状态(Released):当 PVC 被删除时,PV 进入Released状态,但存储本身仍然存在,资源尚未被集群回收。

  • 失败(Falied):因自动回收资源失败而处于的故障状态,此时,PV不可用

5.2.2. PVC 的生命周期

  • Pending 状态:PVC 创建后处于 Pending 状态,表示系统正在寻找合适的 PV 来满足 PVC 的请求。

  • Bound 状态:当 PVC 与 PV 成功绑定后,PVC 会进入 Bound 状态,表示存储已经分配给 PVC。

  • Deleted 状态:当 PVC 被删除时,绑定的 PV 进入 Released 状态,存储资源的回收与否取决于 PV 的 ReclaimPolicy

5.2.3. 回收策略

ReclaimPolicy 决定了当 PVC 删除时,PV 的处理方式。常见的回收策略有:

  • Retain:保留 PV,存储资源不会被删除,数据仍然保留,需要管理员手动清理。

  • Delete:删除 PV,相关的存储资源会被删除

  • Recycle:将 PV 中的数据清除(已废弃,不推荐使用)。

5.3. PV 的访问模式

  • ReadWriteOnce (RWO):PV 可以被单个节点的一个 Pod 以读写模式访问。

  • ReadOnlyMany (ROX):多个 Pod 可以以只读模式同时访问 PV。通常用于只读文件共享存储。

  • ReadWriteMany (RWX):多个 Pod 可以以读写模式同时访问 PV。通常用于支持并发读写的网络文件系统(如 NFS、GlusterFS、CephFS)等存储后端。

5.4. 动态存储卷

动态存储卷 是通过 StorageClass 结合 PVC 实现的。

当用户创建 PVC 时,Kubernetes 根据指定的 StorageClass 动态创建相应的 PV,而无需管理员手动创建 PV。

动态存储卷使得存储管理更加灵活和自动化。

StorageClass配置参考:

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

StorageClass 参数解释:

  • provisioner:指定存储后端供应器。

  • parameters:可以定义与存储类型相关的参数,

总结:持久化存储特点:

  • 数据在 Pod 销毁时依然存在,数据能够跨 Pod 和节点持久化。。

  • 支持多种存储后端,包括云存储、本地存储和分布式文件系统。

  • 提供高可用性和冗余机制,保证数据的持久性和容错能力。

  • 易于备份、恢复和扩展,支持弹性和跨平台迁移。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java求职学习day12

1 泛型机制&#xff08;熟悉&#xff09; 1.1 基本概念 &#xff08;1&#xff09;通常情况下集合中可以存放不同类型的元素&#xff0c;是因为将所有对象都看作Object类型放入&#xff0c;因此从集合中取出元素时&#xff0c;也是Object类型&#xff0c;为了表达该元素真实的…

相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型

在统计分析中交互作用是指某因素的作用随其他因素水平变化而变化&#xff0c;两因素共同作用不等于两因素单独作用之和(相加交互作用)或之积(相乘交互作用)。相互作用的评估是尺度相关的&#xff1a;乘法或加法。乘法尺度上的相互作用意味着两次暴露的综合效应大于&#xff08;…

Spring Boot 2 学习全攻略

Spring Boot 2 学习资料 Spring Boot 2 学习资料 Spring Boot 2 学习资料 在当今快速发展的 Java 后端开发领域&#xff0c;Spring Boot 2 已然成为一股不可忽视的强大力量。它简化了 Spring 应用的初始搭建以及开发过程&#xff0c;让开发者能够更加专注于业务逻辑的实现&am…

【面试题】技术场景 4、负责项目时遇到的棘手问题及解决方法

工作经验一年以上程序员必问问题 面试题概述 问题为在负责项目时遇到的棘手问题及解决方法&#xff0c;主要考察开发经验与技术水平&#xff0c;回答不佳会影响面试印象。提供四个回答方向&#xff0c;准备其中一个方向即可。 1、设计模式应用方向 以登录为例&#xff0c;未…

30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <1> 5分钟快速创建一个springboot web项目

快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui&#xff0c;并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…

【Rust自学】11.10. 集成测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.10.1. 什么是集成测试 在Rust里&#xff0c;集成测试完全位于被测试库的外部。集成测试调用库的方式和其他代码一样&#xff0c;这也…

JAVA实现2048小游戏(附源码)

文章目录 一、设计来源2048小游戏讲解1.1 主界面1.2 4*4难度界面1.3 5*5难度界面1.4 6*6难度界面1.5 挑战失败提示界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/a…

【自动化测试】—— Appium安装配置保姆教程(图文详解)

目录 一. 环境准备 二. JDK安装 1. 下载JDK 2. 安装JDK 3. 配置环境 4. 验证安装 三. Android SDK安装 1. 下载Android SDK 2. 安装Android SDK 3. 安装工具 4. 配置环境 5. 验证安装 四. NodeJS安装 1. 下载NodeJS 2. 安装NodeJS 3. 验证安装 4. 安装淘宝镜像…

vs2022+QT6.7.3打包程序流程

1、新建目录test 2、将项目配置为Release X64&#xff0c;生成XXX.exe 3、将XXX.exe放到test目录 4、管理员方式打开Qt 6.7.3 (MSVC 2022 64-bit)&#xff0c;进入test目录&#xff0c;执行&#xff1a;windeployqt6.exe XXX.exe 5、管理员方式打开x64 Native Tools Command…

RabbitMQ---消息确认和持久化

&#xff08;一&#xff09;消息确认 1.概念 生产者发送消息后&#xff0c;到达消费端会有以下情况&#xff1a; 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除&#xff0c;那么就可能会导致&#xff0c;消息处理异常想要再获取这条消息的时…

【C++】反向迭代器

反向迭代器 一.源码及框架分析二.反向迭代器实现代码1.ReverseIterator.h2.Vector.h3.List.h4.Test.cpp 一.源码及框架分析 SGI-STL30版本源代码&#xff0c;反向迭代器实现的核心源码在stl_iterator.h中&#xff0c;反向迭代器是一个适配器&#xff0c;各个容器中再适配出自己…

浅谈云计算02 | 云计算模式的演进

云计算计算模式的演进 一、云计算计算模式的起源追溯1.2 个人计算机与桌面计算 二、云计算计算模式的发展阶段2.1 效用计算的出现2.2 客户机/服务器模式2.3 集群计算2.4 服务计算2.5 分布式计算2.6 网格计算 三、云计算计算模式的成熟与多元化3.1 主流云计算服务模式的确立3.1.…

WEB 攻防-通用漏-XSS 跨站脚本攻击-反射型/存储型/DOMBEEF-XSS

XSS跨站脚本攻击技术&#xff08;一&#xff09; XSS的定义 XSS攻击&#xff0c;全称为跨站脚本攻击&#xff0c;是指攻击者通过在网页中插入恶意脚本代码&#xff0c;当用户浏览该网页时&#xff0c;恶意脚本会被执行&#xff0c;从而达到攻击目的的一种安全漏洞。这些恶意脚…

Vue3组件设计模式:高可复用性组件开发实战

Vue3组件设计模式:高可复用性组件开发实战 一、前言 在Vue3中&#xff0c;组件设计和开发是非常重要的&#xff0c;它直接影响到应用的可维护性和可复用性。本文将介绍如何利用Vue3组件设计模式来开发高可复用性的组件&#xff0c;让你的组件更加灵活和易于维护。 二、单一职责…

深度剖析RabbitMQ:从基础组件到管理页面详解

文章目录 一、简介二、Overview2.1 Overview->Totals2.2 Overview->Nodesbroker的属性2.3 Overview->Churn statistics2.4 Overview->Ports and contexts2.5 Overview->Export definitions2.6 Overview->Import definitions 三、Connections连接的属性 四、C…

Unity 语音转文字 Vosk 离线库

市场有很多语音库&#xff0c;这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的&#xff0c;&#xff08;确保麦克风正常&#xff0c;且索引正确&#xff09;分大…

播放音频文件同步音频文本

播放音频同步音频文本 对应单个文本高亮显示 使用audio音频文件对应音频文本资源 音频文本内容&#xff08;Json&#xff09; [{"end": 4875,"index": 0,"speaker": 0,"start": 30,"text": "70号二啊,","tex…

【React】新建React项目

目录 create-react-app基础运用React核心依赖React 核心思想&#xff1a;数据驱动React 采用 MVC体系package.jsonindex.html好书推荐 官方提供了快速构建React 项目的脚手架&#xff1a; create-react-app &#xff0c;目前使用它安装默认是19版本&#xff0c;我们这里降为18…

mac homebrew配置使用

本文介绍mac上homebrew工具的安装、配置过程。homebrew功能类似于centos的yum&#xff0c;用于软件包的管理&#xff0c;使用上有命令的差异。 本次配置过程使用mac&#xff0c;看官方文档&#xff0c;在linux上也可以用&#xff0c;但我没试过&#xff0c;有兴趣的同学可以试试…

第一次作业三种方式安装mysql(Windows和linux下)作业

在Windows11上安装sever&#xff08;服务&#xff09;端和客户端 server端安装 打开官网MySQL 进入到主页 点击DOWMLOAD 进入下载界面 点击下方MySQL Community (GPL) Downloads 进入社区版mysql下载界面 点击 MySQL Community Server 进入server端下载 选择8.4.3LTS&…