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

2024-04-07 10:12

本文主要是介绍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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

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

这篇关于k8s 持久化存储解析:hostPath与NFS的应用与探索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#