k8s 持久化存储解析:hostPath与NFS的应用与探索

🐇明明跟你说过:个人主页

🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、k8s为什么要有持久化存储

2、NFS简介

二、hostPath存储

1、hostPath工作原理

2、hostPath的定义

3、hostPath的优缺点分析

4、hostPath使用场景举例 

三、NFS存储

1、NFS在Kubernetes中的应用

2、NFS的优缺点分析


一、前言

1、k8s为什么要有持久化存储

Kubernetes (k8s) 引入持久化存储是为了处理容器化应用在动态调度和生命周期管理过程中遇到的数据持久性问题。在Kubernetes中,Pod是应用实例的载体,它们具有短暂性,即Pod可以根据集群的健康状况、资源需求等因素被创建、销毁、重启或迁移到不同的节点。这就意味着,如果Pod内部的容器直接将数据写在其自身的存储空间中,一旦Pod被删除或重建,这些数据就会丢失。

持久化存储在Kubernetes中的核心作用包括:

  1. 数据持久性:允许容器在Pod被重新调度、重启或迁移时,保持对其存储数据的访问,即使Pod本身发生了变化,数据也不会丢失。
  2. 状态管理:对于状态型应用(如数据库服务MySQL、Redis等),需要确保在任何情况下都能访问和维护其关键状态数据。
  3. 资源共享:支持多容器间的共享存储,使得同一Pod内的多个容器或不同Pod间的容器能读取和修改相同的数据集。
  4. 应用可移植性:通过抽象出PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 对象,Kubernetes可以灵活地对接各种类型的存储系统(如云存储服务、网络存储、本地磁盘等),从而实现了跨不同基础设施环境的存储兼容性和可移植性。

2、NFS简介

NFS,即网络文件系统(Network File System),是一种用于在计算机系统之间共享文件和目录的协议。NFS最初由Sun公司开发,目前已经成为全球广泛使用的网络文件系统之一,无论是在企业内部网络还是在云计算环境中。

NFS允许远程计算机像访问本地文件一样访问和操作远程文件,从而方便了多台计算机之间的文件共享和协作。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。NFS不仅适用于Linux与Unix之间实现文件共享,也能实现Linux与Windows间的文件共享功能。

NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,这样,从本地端的系统来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,使用上相当便利。

NFS的应用场景非常广泛,它可以用于办公环境,实现文件服务器的高可用性,保证数据的可靠传输和处理,提高工作效率;对于大型企业来说,NFS可以提供集中式的文件存储和管理,简化文件管理流程,降低运营成本。

二、hostPath存储

1、hostPath工作原理

HostPath的工作原理在于将宿主机的持久化存储挂载到Kubernetes集群上,使容器能够访问外部存储空间。具体来说,HostPath类型的存储卷是将工作节点上某个文件系统的目录或文件挂载到Pod中。这种挂载方式使得Pod能够独立于其生命周期访问这些存储资源,因此具有持久性。

在Kubernetes中,HostPath卷通过Volume抽象层将存储空间关联到容器,使容器可以直接访问宿主机上的文件系统。这意味着,当Pod被调度到某个节点上时,它会将宿主机上指定的目录或文件挂载到容器内部,使得容器可以像访问本地文件系统一样访问这些资源。

2、hostPath的定义

要使用hostPath在Kubernetes中创建一个Pod,我们可以编写一个YAML文件来定义这个Pod的配置。

以下是一个简单的示例,展示如何在YAML文件中使用hostPath卷:

yaml
apiVersion: v1  
kind: Pod  
metadata:  
  name: hostpath-example  
spec:  
  containers:  
  - name: mycontainer  
    image: nginx  
    volumeMounts:  
    - name: myvolume  
      mountPath: /data  
  volumes:  
  - name: myvolume  
    hostPath:  
      # 这里指定宿主机上的路径  
      path: /path/on/host  
      # 可选,指定hostPath卷的类型  
      # 默认为空字符串,表示任何类型的文件或目录都可以挂载  
      type: DirectoryOrCreate


在这个例子中,我们创建了一个名为hostpath-example的Pod,

它有一个容器mycontainer,这个容器使用了名为myvolume的卷,并将其挂载到容器的/data目录。

myvolume卷的类型是hostPath,它指定了宿主机上的/path/on/host路径作为存储源。

type字段是可选的,它指定了hostPath卷的类型。可用的类型包括:

  • DirectoryOrCreate:如果指定的路径不存在,则创建它作为目录。
  • Directory:如果指定的路径不存在,则不会创建。必须是一个已存在的目录。
  • FileOrCreate:如果指定的文件不存在,则创建它。
  • File:如果指定的文件不存在,则不会创建。必须是一个已存在的文件。
  • Socket:必须是已存在的UNIX套接字。
  • CharDevice:必须是已存在的字符设备。
  • BlockDevice:必须是已存在的块设备。

如果没有特定的类型需求,可以省略type字段,或者将其设置为空字符串。

保存这个YAML文件(例如,命名为hostpath-pod.yaml),然后使用kubectl命令行工具创建Pod:

kubectl apply -f hostpath-pod.yaml


之后,Pod将启动,并且容器内的/data目录将映射到宿主机上的/path/on/host目录。但要确保在宿主机上该路径是可访问的,并且Pod有足够的权限去读写这个路径。

3、hostPath的优缺点分析

优点:

  1. 直接访问宿主机文件系统:HostPath允许Pod直接访问宿主机上的文件系统,这使得某些需要直接操作宿主机文件或目录的场景变得可行。例如,当Pod需要访问Docker内部机制或特定的系统文件时,HostPath提供了这样的能力。
  2. 简单性和灵活性:相比其他复杂的存储解决方案,HostPath的配置和使用相对简单。同时,由于它直接关联到宿主机的文件系统,因此提供了较高的灵活性,可以根据需要挂载任何目录或文件。
  3. 特定场景下的实用性:在一些特定的应用场景下,如运行管理任务的系统级Pod资源,HostPath卷可以非常有用。这些Pod可能需要访问节点上的特定文件或目录来执行其任务。


缺点:

  1. 安全风险:HostPath卷允许容器直接访问宿主机的文件系统,这可能导致潜在的安全风险。如果Pod被恶意利用,攻击者可能通过访问HostPath卷来访问或修改宿主机上的敏感数据。
  2. 可靠性问题:宿主机上的文件或目录可能被容器意外修改或删除,这可能导致应用程序异常或数据丢失。特别是在多个容器或Pod共享同一个HostPath卷时,数据一致性和完整性的维护变得更加复杂。
  3. 可移植性问题:使用HostPath卷会使应用程序依赖于特定主机的文件系统结构。这意味着当应用程序需要迁移到另一个主机或集群时,可能需要重新配置HostPath卷的路径和权限,从而增加了迁移和部署的复杂性。
  4. 不适合大规模部署:由于HostPath卷是工作节点本地的存储空间,它不适合用于大规模部署或需要高可用性和持久性的场景。在大规模集群中,使用分布式存储系统或云提供商提供的存储服务通常更为合适。

 

4、hostPath使用场景举例 

  1. 日志收集:某些应用程序会在主机上生成日志文件,这些日志文件需要被收集和处理。通过使用HostPath卷,可以将主机上的日志目录挂载到Pod中,这样Pod内的应用程序或日志收集工具就可以直接读取和处理这些日志文件。
  2. 配置文件管理:有些应用程序需要在运行时访问位于主机上的配置文件。通过将主机上的配置目录挂载为Pod中的HostPath卷,应用程序可以读取并使用这些配置文件,而无需在Pod内部重新配置。
  3. 直接访问宿主机资源:在某些特殊场景下,容器需要直接访问宿主机上的资源,如摄像头、USB设备或其他硬件。HostPath卷允许将这些设备或设备文件挂载到Pod中,使得容器内的应用程序能够与这些设备进行交互。
  4. 运行系统级任务:对于需要执行系统级管理任务的Pod,HostPath卷可能非常有用。这些任务可能包括监控主机状态、管理主机上的服务或执行其他与宿主机紧密相关的操作。

三、NFS存储

1、NFS在Kubernetes中的应用

在Kubernetes中,可以使用NFS卷将NFS共享挂载到Pod中。这样,多个Pod就可以访问相同的配置文件、共享数据或实现持久存储。例如,多个应用程序或服务可能需要访问相同的配置文件,通过将配置文件存储在NFS共享上,并将其挂载到多个Pod中,可以确保它们都可以访问相同的配置数据。

NFS卷还可以作为持久性存储解决方案,在Pod重新调度或重启后仍然保留数据。这对于需要持久性数据的应用程序非常有用。

2、NFS的优缺点分析

优点:

  1. 共享与协作:NFS允许多个客户端同时挂载和访问同一个目录,使得数据可以在不同的节点之间轻松共享和协作。这对于需要共享配置文件、数据目录或实现多节点备份的应用场景非常有用。
  2. 简单性与易用性:NFS的配置和使用相对简单,客户端可以通过标准的文件系统接口(如挂载命令)来访问NFS共享。这使得NFS成为一种易于集成和管理的存储解决方案。
  3. 可靠性:NFS提供了文件锁定机制,可以确保在多个客户端同时访问共享文件时的数据一致性。这有助于避免数据损坏或不一致的问题。
  4. 可扩展性:NFS可以通过添加更多的服务器或扩展现有服务器的存储容量来支持更大的数据集和更高的并发访问量。这使得NFS能够适应不断增长的存储需求。

缺点:

  1. 单点故障:NFS服务通常依赖于单个服务器或服务器集群来提供共享存储。如果NFS服务器发生故障或宕机,将导致所有依赖该服务器的客户端无法访问共享文件,从而构成单点故障的风险。
  2. 性能瓶颈:在高并发或大规模数据访问的场景下,NFS的性能可能受到网络带宽、延迟或服务器资源限制的影响。这可能导致访问速度下降或响应延迟,特别是在处理大量小文件或频繁读写操作时。
  3. 安全性:NFS的默认配置可能不够安全,对于敏感数据的存储需要进行额外的安全配置。同时,NFS的数据是明文的,对数据完整性不做验证,可能存在数据泄露或篡改的风险。
  4. 复杂性随着规模增长:在大型集群或分布式系统中,管理多个NFS共享和客户端连接可能变得复杂。需要仔细规划和配置NFS服务器、网络和权限设置,以确保系统的稳定性和安全性。

 

 由于篇幅原因,有关NFS Server的搭建与在k8s中的实际应用,我们将在下一章节详细介绍

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!    

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

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

相关文章

post请求搜索功能爬虫

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>…

基于单片机干湿垃圾自动分类系统

**单片机设计介绍&#xff0c;基于单片机干湿垃圾自动分类系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的干湿垃圾自动分类系统是一个集成传感器技术、机械控制和单片机编程于一体的自动化解决方案。该系统的主要目标是实…

归并排序和计数排序

计数排序 计数排序是一种非比较排序。 count_sort 还会用到相对大小。 节省空间。 前提是遍历数组找到max和min 从而进一步确定range。 然后将数在数组中的相对位置&#xff0b;min对其进行输出。 void count_sort(int* a, int n) {int max a[0], min a[0],cnt0;for …

漂亮的个人主页HTML源码

漂亮的个人主页HTML源码&#xff0c;页面简约&#xff0c;一个卡片式的风格介绍&#xff0c;喜欢的朋友们可以拿去研究 源码下载 漂亮的个人主页HTML源码

TCP挥手中TIME_WAIT存在的原因

四次挥手的一般过程如图所示&#xff1a; 在客户端收到FIN结束报文的时候不是立刻进入CLOSED状态&#xff0c;而是进入TIME_WAIT状态&#xff0c;一般等2MLS后进入关闭状态。 原因&#xff1a; 1.可靠地终止 TCP 连接。 2.保证让迟来的 TCP报文段有足够的时间被识别并丢弃。 …

【CSDN云VS腾讯云】要不然怎么说CSDN开发云是打工人和学生党的福音呢?

&#x1f341;作者简介&#xff1a;&#x1f3c5;云计算领域优质创作者&#x1f3c5;新星计划第三季python赛道TOP1&#x1f3c5; 阿里云ACE认证高级工程师&#x1f3c5; ✒️个人主页&#xff1a;小鹏linux &#x1f48a;个人社区&#xff1a;小鹏linux&#xff08;个人社区&a…

Go 实战|使用 Wails 构建轻量级的桌面应用:仿微信登录界面 Demo

概述 本文探讨 Wails 框架的使用&#xff0c;从搭建环境到开发&#xff0c;再到最终的构建打包&#xff0c;本项目源码 GitHub 地址&#xff1a;https://github.com/mazeyqian/go-run-wechat-demo 前言 Wails 是一个跨平台桌面应用开发框架&#xff0c;他允许开发者利用 Go …

ElasticSearch分词检索

1. 倒排索引&#xff1a;表示一种数据结构&#xff0c;分词词条与文档id集合的隐射关系 2. 它跟关系型数据库是一种互补的关系&#xff0c;因为关系型数据库支持事务操作&#xff0c;满足ACID原则 #ik分词器下载 https://github.com/infinilabs/analysis-ik/releases POST /_a…

前端学习之DOM编程-案例div移动

这个案例是当你的鼠标按压下去后&#xff0c;div跟着你的鼠标移动而移动&#xff0c;当你的鼠标抬起后&#xff0c;div不随着鼠标移动而移动。类似于电脑移动应用图标的感觉。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

《Java面试自救指南》(专题四)Java基础

文章目录 有序集合有哪些?线程安全的集合有哪些&#xff1f;HashMap底层原理ConcurrentHashMap的底层数据结构ArrayList底层原理&#xff0c;ArrayList和Vector/LinkedList的区别String&#xff0c;StringBuffer&#xff0c;StringBuilder的区别 扩展&#xff1a;String不可变…

【THM】Exploit Vulnerabilities(利用漏洞)-

介绍 在这个房间里,我们将讨论一些识别漏洞的方法,并结合我们的研究技能来了解这些漏洞是如何被滥用的。 此外,您还会发现一些公开可用的资源,这些资源是您在执行漏洞研究和利用时的技能和工具的重要补充。然后,您将在房间的最后将所有这些应用到实际挑战中。 自动化与…

2021-2023年全国地表水水质监测数据集

1.监测范围 国家地表水水质自动监测网水质自动监测站。 2.监测项目监测项目为国家水质自动监测站配备的监测指标&#xff0c;主要包括五参数(水温、pH、溶解氧、电导率和浊度)、氨氮、高锰酸盐指数、总氮、总磷&#xff0c;部分水站增测总有机碳、叶绿素a、藻密度、VOCs、生物…

Day:004(2) | Python爬虫:高效数据抓取的编程技术(数据解析)

正则表达式实战-腾讯新闻 需求&#xff1a; 使用正则获取腾讯新闻标题内容 网站&#xff1a;https://sports.qq.com/ 代码&#xff1a; import reimport requests from fake_useragent import UserAgenturl https://sports.qq.com/ # 构建请求头信息 headers {User-Agent:…

Python爬取公众号封面图(零基础也能看懂)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

#{} 和 ${}区别

1、参数是Integer类型时候没区别&#xff08;#是预编译SQL&#xff0c;$是即时SQL&#xff09; 2、当参数是String类型时&#xff0c;就会出错了 &#xff08;1&#xff09;这是$的报错信息&#xff0c;因为我们的参数admin并没有加引号所以不满足字符串条件 (2)正确的SQL &am…

【最大值线段树】【二分查找】2286. 以组为单位订音乐会的门票

本文涉及知识点 线段树 最大值线段树 二分查找算法合集 LeetCode2286. 以组为单位订音乐会的门票 一个音乐会总共有 n 排座位&#xff0c;编号从 0 到 n - 1 &#xff0c;每一排有 m 个座椅&#xff0c;编号为 0 到 m - 1 。你需要设计一个买票系统&#xff0c;针对以下情况…

Win10 下 git error unable to create file Invalid argument 踩坑实录

原始解决方案参看&#xff1a;https://stackoverflow.com/questions/26097568/git-pull-error-unable-to-create-file-invalid-argument 本问题解决于 2024-02-18&#xff0c;使用 git 版本 2.28.0.windows.1 解决方案 看 Git 抛出的出错的具体信息&#xff0c;比如如下都来自…

星系炸弹(蓝桥杯真题填空题)

import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class BombExplosionDate { public static void main(String[] args) { // 定义贝塔炸弹的放置日期和定时天数 LocalDate placementDate LocalDate.of(2014, 11, 9); int daysToExplode 10…

【攻防世界】FlatScience

dirsearch 扫描发现四个文件 在login.php 中发现 输入 http://61.147.171.105:61912/login.php/?debug 发现源码 <?php if(isset($_POST[usr]) && isset($_POST[pw])){$user $_POST[usr];$pass $_POST[pw];$db new SQLite3(../fancy.db);$res $db->query(…

唯美首页纯静态html5引导页源码,格子化win8风格官方引导页面源码

唯美首页纯静态html5引导页源码&#xff0c;格子化win8风格官方引导页面源码&#xff0c;喜欢的朋友可以拿去使用 源码下载 唯美首页纯静态html5引导页源码