(九)K8S数据持久化高级存储

这篇具有很好参考价值的文章主要介绍了(九)K8S数据持久化高级存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.数据存储NFS网络文件系统搭建

NFS 概述:

NFS(Network File System)是一种分布式文件系统协议,用于通过网络共享文件和目录。它允许客户端计算机通过网络访问和读取远程服务器上的文件,就像它们在本地文件系统中一样。NFS 是一种常见的网络文件共享协议,在许多环境中被广泛使用。

用途:

在 Kubernetes 中,NFS 可以作为一种持久化存储解决方案,用于存储和共享数据。NFS 存储适用于需要多个 Pod 共享相同数据的场景,如数据库、文件共享、日志文件存储等。它提供了可靠的数据持久性和高可用性,使多个 Pod 可以访问和修改相同的文件。

部署NFS服务器

1.下载nfs-util (对应要用到的节点都需要安装,但是不需要启动)

yum install nfs-utils -y

2.创建目录(nfs服务器)

#目录可以自定义
mkdir /opt/nfsdata
#给路径授权
chmod 777 /opt/nfsdata

3.编辑/etc/exports 配置文件(nfs服务器)

vim /etc/exports
# 目录的读写权限暴露给这个网段的全部主机
/opt/nfsdata 172.31.101.0/24(rw,insecure,sync)

解释:
172.31.101.0/24表示的IP范围, 换成32位二进制,四组,每组8位
/24 表示前24位不变,后8位由全0变化到全1的过程,也就是由“00000000”变化到“11111111”
又因为全0是子网网络地址,全1是子网广播地址,这两个地址是不分配给主机使用的。
所以有效的可分配的范围是前24位不变,后8位由“00000001”变化为“11111110”的范围
再转换回十进制就是172.31.101.1~172.31.101.254

参数:

  • rw 共享目录可读可写
  • secure 限制客户端只能从小于1024的tcp/ip端口连接服务器;
  • insecure允许客户端从大于1024的tcp/ip端口连接服务器;
  • sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
  • async 将数据先保存在内存缓冲区中,必要时才写入磁盘;

4.启动rpcbind(安装nfs依赖包会自动下载)和nfs服务

systemctl start rpcbind
systemctl start nfs

5.验证

showmount -e localhost

2.K8S数据存储之NFS持久卷挂载

创建pod挂载nfs

apiVersion: v1
kind: Pod
metadata:
  name: my-nfs
  namespace: dev
  labels: 
    apps: nginx-nfs
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    ports:
    - containerPort: 80
    volumeMounts:
    - name: logs-volume
      mountPath: /var/log/nginx
  volumes:
  - name: logs-volume
    nfs:
      server: 172.31.101.8  #nfs服务器地址
      path: /opt/nfsdata #共享文件路径

暴露服务

kubectl expose pod my-nfs -n dev --port=80 --target-port=80 --type=NodePort

查看nfs服务器的/opt/nfsdata此时路径下面已经有内容了

3.K8S高级存储PV,PVC

概述:

PV 和 PVC 提供了一种管理持久化存储的抽象层,使得应用程序可以方便地访问持久化的数据,并且与底层存储设备解耦,应用程序不需要关心具体的存储设备,只需通过 PVC 请求所需的存储资源。通过使用 PV 和 PVC,可以更好地管理和分配存储资源,确保数据的持久性和可靠性。
PV 是集群中的持久化存储资源,而 PVC 则是 Pod 对 PV 的请求。

PV(PersistentVolume):

  • PV 是集群中的持久化存储资源,它可以由集群管理员预先配置和管理。
  • PV 独立于 Pod 存在,可以被多个 Pod 共享使用。
  • PV 可以连接到各种后端存储系统,如本地磁盘、网络存储、云存储等。
  • PV 有自己的生命周期,可以手动创建、删除和管理。
  • PV 通过定义存储容量、访问模式和存储类等属性来描述存储资源。

PVC(PersistentVolumeClaim):

  • PVC 是 Pod 对 PV 的申请,它表示 Pod 对持久化存储资源的需求。
  • PVC 是在命名空间级别上创建的,可以绑定到同一命名空间中的多个 PV 上。
  • PVC 可以指定存储容量、访问模式和存储类等属性,用于匹配符合需求的 PV。
  • PVC 通过声明需要的存储资源,让 Kubernetes 自动分配和管理 PV 的使用。

用途

PV 和 PVC 用于管理和提供持久化存储资源,适用于各种应用场景,例如:

  • 数据库存储:将数据库数据持久化保存在 PV 上,确保数据的持久性和可靠性。
  • 文件存储:将文件系统挂载到 PVC 上,供多个 Pod 共享读写文件。
  • 日志存储:将应用程序的日志输出保存在 PV 上,便于日志分析和存档。

PV和PVC逻辑

  • PV 是集群中的【资源】,PVC 是对这些【资源的请求】

  • PV 和 PVC 之间的相互作用遵循这个生命周期
    Provisioning(配置) —> Binding(绑定) —> Using(使用) —> Releasing(释放) —> Recycling(回收)

PV的yaml模板

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi #存储大小
  accessModes:#访问模式
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle #回收策略
  storageClassName: slow #存储类别
  nfs:#卷插件
    path: /tmp
    server: 172.31.101.8
  • 存储大小:存储大小是可以设置和请求的唯一资源。 未来可能会包含 IOPS、吞吐量等属性

  • 访问模式:用户对资源的访问权限

    • ReadWriteOnce(RWO):读写权限,只能被单个节点挂载
    • ReadOnlyMany(ROX): 只读权限,可以被多个节点挂载
    • ReadWriteMany(RWX):读写权限,可以被多个节点挂载
  • 存储类别:

    • 每个 PV 可以属于某个类,通过将其 storageClassName属性设置为某个 StorageClass 的名称来指定。
    • 特定类的 PV 卷只能绑定到请求该类存储卷的 PVC 申领。
    • 未设置 storageClassName 的 PV 卷没有类设定,只能给到那些没有指定特定 存储类的 PVC 申领。
  • 回收策略(当PV不再被使用了之后的处理策略)

    • 保留 Retain – 当PV对象被删除之后,与之相关的位于外部的基础设施中的数据仍然存在(如nfs),需要根据实际情况手动回收
    • 回收 Recycle – 相当于在卷上执行rm -rf /volume/* 操作,之后该卷可以用于新的pvc申领
    • 删除 Delete – 当PV对象被删除之后,与之相关的位于外部的基础设施中的数据也被一并删除(如nfs),需要根据实际情况手动回收,更多是云厂商设备

PV 的生命周期有4种不同状态

  • Available(可用)——一块空闲资源还没有被任何声明绑定
  • Bound(已绑定)——卷已经被声明绑定
  • Released(已释放)——声明被删除,但是资源还未被集群重新声明
  • Failed(失败)——该卷的自动回收失败

PVC的yaml模板

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
  namespace: dev
spec:
  accessModes: # 访问模式
  - ReadWriteMany
  selector: # 采用label标签对PV选择过滤
  storageClassName: # 存储类别,设置对应的class的PV才能被系统选出
  resources: # 需要存储资源的请求
    requests:
      storage: 3Gi

PVC 的生命周期有5种不同状态

  • Pending(可用)——PVC已经创建,但尚未绑定到可用的PersistentVolume(PV)
  • Bound(已绑定)——PVC已经成功绑定到可用的PV
  • Lost(丢失)——PVC与绑定的PV之间的关联丢失
  • Released(已释放)——PVC已经释放了对绑定PV的占用
  • Failed(失败)——PVC创建或绑定过程中发生错误

3.K8S高级存储PV+PVC+NFS使用

1.PV配置文件 pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv  # PV的名称
spec:
  capacity:
    storage: 1Gi  # PV的存储容量
  accessModes:
    - ReadWriteMany  # PV的访问模式
  persistentVolumeReclaimPolicy: Retain  # PV的回收策略
  nfs:
    path: /path/to/nfs  # NFS服务器上的路径
    server: <NFS_SERVER_IP>  # NFS服务器的IP地址

将 <NFS_SERVER_IP> 替换为实际的NFS服务器IP地址,/path/to/nfs 替换为实际的NFS共享路径。

2.PVC配置文件 pvc.yaml:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc  # PVC的名称
spec:
  accessModes:
    - ReadWriteMany  # PVC的访问模式
  resources:
    requests:
      storage: 1Gi  # PVC的存储容量

3.使用NFS存储的Pod配置文件 pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: nfs-pod  # Pod的名称
spec:
  containers:
    - name: app-container  # 容器的名称
      image: nginx  # 使用的镜像
      volumeMounts:
        - mountPath: /var/www/html  # 挂载的路径
          name: nfs-volume  # 使用的卷名称
  volumes:
    - name: nfs-volume  # 卷的名称
      persistentVolumeClaim:
        claimName: nfs-pvc  # 关联的PVC名称
        readOnly: false

替换 <NFS_SERVER_IP> 为实际的NFS服务器IP地址,并根据需要调整存储容量和挂载路径。然后,可以使用 kubectl apply -f <文件名> 命令依次创建PV、PVC和Pod。

这样,Pod 将使用 PVC 挂载到对应的 NFS 存储路径上,使得 Pod 内的容器能够访问 NFS 存储中的数据。文章来源地址https://www.toymoban.com/news/detail-464036.html

到了这里,关于(九)K8S数据持久化高级存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • k8s 持久化存储

    我们继续来查看 k8s 的卷,上一次我们分享了将磁盘挂载到容器中,empyDir 和 gitRepo 都是会随着 pod 的启动而创建,随着 pod 的删除而销毁 那么我们或许会有这样的需求,期望在 pod 上面读取节点的文件或者使用节点的文件系统来访问节点的设备 这个时候,我们就可以让 hostP

    2024年02月16日
    浏览(32)
  • K8S之持久化存储

    在K8S中部署的应用都是以pod容器的形式运行的,假如部署数据库服务 例如:MySQL、Redis等,需要对产生的数据做备份。如果pod不挂载数据卷,那pod被删除或重启后这些数据会随之消失,想要长久的保留这些数据就要用到pod数据持久化存储。 查看K8S支持哪些存储 常用的如下:

    2024年04月09日
    浏览(33)
  • 【k8s存储--使用OpenEBS做持久化存储】

    使用OpenEBS,你可以将有持久化数据的容器,像对待其他普通容器一样来对待。OpenEBS本身也是通过容器来部署的,支持Kubernetes、Swarm、Mesos、Rancher编排调度,存储服务可以分派给每个pod、应用程序、集群或者容器级别,包括: 跨节点的数据持久化 跨可用区和云厂商的数据同步

    2024年04月23日
    浏览(25)
  • K8S持久化存储--- PVC和PV的存储

    PersistentVolume ( PV )是群集中的一块存储,由管理员配置或使用存储类动态配置。 它是集群中的资源,就像 pod 是 k8s 集群资源一样。 PV是容量插件,如 Volumes ,其生命周期独立于使用 PV 的任何单个 pod 。 PersistentVolumeClaim ( PVC )是一个持久化存储卷,我们在创建 pod 时可以

    2023年04月10日
    浏览(37)
  • 飞天使-k8s基础组件分析-持久化存储

    emptyDir hostpath pv和pvc介绍 nfs作为静态pv案例 nfs作为动态pv案例 使用本地文件夹作为pv 改变默认存储类及回收策略 参考文档

    2024年02月11日
    浏览(34)
  • Kubernetes基础(二十三)-k8s持久化存储详解

    1.1 介绍 在容器中的磁盘文件是短暂的,当容器崩溃时,Kubelet会重新启动容器,但容器运行时产生的数据文件都将会丢失,之后容器会以最干净的状态启动。另外,当一个Pod运行多个容器时,各个容器可能需要共享一些文件,诸如此类的需求都可以使用Volume解决。Pod只需要通

    2024年03月17日
    浏览(37)
  • k8s篇-应用持久化存储(PV和PVC)

    一般来说,容器一旦被删除后,容器运行时内部产生的所有文件数据也会被清理掉,因此,Docker提供了 Volume 这种方式来将数据持久化存储。 可以说,Volume 是Pod与外部存储设备进行数据传递的通道,也是Pod内部容器间、Pod与Pod间、Pod与外部环境进行数据共享的方式。 实际上

    2023年04月08日
    浏览(32)
  • 03-k8s的pod资源01-数据持久化、env环境变量、网络暴露

    1,pod资源是k8s集群当中,最小的管理单位; 2,其他所有资源都是围绕着为pod资源提供服务的;给pod提供服务的; 3,pod就是“一组”容器,一个pod中可以有1个或者多个容器;         emptyDir存储卷,本质上是一个临时的目录,其生命周期与pod相同,pod被删除,则数据也会被

    2024年02月21日
    浏览(30)
  • k8s通过nfs-provisioner配置持久化存储

    一、nfs-client-provisioner简介 Kubernetes集群中NFS类型的存储没有内置 Provisioner。但是你可以在集群中为NFS配置外部Provisioner。 Nfs-client-provisioner是一个开源的NFS 外部Provisioner,利用NFS Server为Kubernetes集群提供持久化存储,并且支持动态购买PV。但是nfs-client-provisioner本身不提供NFS,需

    2024年02月11日
    浏览(33)
  • K8S使用持久化卷存储到NFS(NAS盘)

    参考文章:K8S-v1.20中使用PVC持久卷 - 知乎 目录 1、概念: 1.1 基础概念 1.2 PV的配置 1.2.1 静态PV配置 1.2.2 动态PV配置 1.2.3 PVC与PV的绑定 1.2.4 PVC及PV的使用 2 部署PV及PVC 2.1 所有K8S机器都需要安装NFS程序 2.2 仅针对需要暴露文件服务的机器开启NFS服务         2.2.1 Linux为例开启NFS服

    2023年04月26日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包