(九)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 存储中的数据。

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

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

相关文章

TDengine 报错 failed to connect to server, reason: Unable to establish connection

一、前文 TDengine 入门教程——导读 二、遇到问题 taos 命令行&#xff08;CLI&#xff09;连接不上&#xff0c;进不去。 [rootiZ2ze30dygwd6yh7gu6lskZ ~]# taos Welcome to the TDengine Command Line Interface, Client Version:3.0.0.1 Copyright (c) 2022 by TDengine…

Linux 安装nodejs、npm、yarn、nrm(超实用)

前言&#xff1a;初衷想要本地通过dockerfile文件直接把项目打包到linux服务器&#xff0c;不用再本地加载再上传等&#xff0c;后续再贴上配置文件 一、什么是nodejs 来自官网的介绍&#xff0c;Node.js 是一个开源的跨平台 JavaScript 运行时环境。它几乎是任何类型项目的流…

JVM内存结构介绍

我们都知道&#xff0c;Java代码是要运行在虚拟机上的&#xff0c;而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域&#xff0c;这些区域都有各自的用途。其中有些区域随着虚拟机进程的启动而存在&#xff0c;而有些区域则依赖用户线程的启动和结束…

远程访问群晖Drive并挂载为电脑磁盘同步备份文件「无需公网IP」

文章目录 前言视频教程1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 转发自CSDN远程穿透的文章&…

【Netty】Reactor 模型(十)

文章目录 前言一、传统服务的设计模型二、NIO 分发模型三、Reactor 模型3.1、Reactor 处理请求的流程3.2、Reactor 三种角色 四、单Reactor 单线程模型4.1、消息处理流程4.2、缺点 五、单Reactor 多线程模型5.1、消息处理流程5.2、缺点 六、主从Reactor 多线程模型6.1、Reactor…

【How to Design Translation Prompts for ChatGPT: An Empirical Study 论文略读】

How to Design Translation Prompts for ChatGPT: An Empirical Study 论文略读 INFORMATIONAbstract1 Introduction2 Background3 Experiments3.1 Prompt Design3.2 Experimental Setup3.2.1 Datasets3.2.2 Baselines and Evaluation Metrics 3.3 Multilingual Translation3.4…

Vue实现订单确认界面禁止浏览器返回操作导致重复提交订单的问题

哈喽 大家好啊 最近遇到一个问题&#xff0c;就是在提交订单成功后的页面&#xff0c;然后用户去浏览器返回&#xff0c;就导致又提交了一次 然后就想到了如果提交成功页面&#xff0c;就阻止浏览器返回操作 主要实现如下&#xff1a; 1.在mounted的钩子函数&#xff1a; 2.…

论文阅读:GLOBAL PROTOTYPE ENCODING FOR INCREMENTALVIDEO HIGHLIGHTS DETECTION

摘要&#xff1a; 视频亮点检测 (VHD) 是计算机视觉中的一个活跃研究领域&#xff0c;旨在在给定原始视频输入的情况下定位最吸引用户的片段。然而&#xff0c;大多数 VHD 方法都是基于封闭世界假设&#xff0c;即预先定义固定数量的高亮类别&#xff0c;并且所有训练数据都是…

4.Ansible Inventory介绍及实战 - A list or group of lists nodes

什么是inventory&#xff1f; 官方解释&#xff1a;Ansible automates tasks on managed nodes or “hosts” in your infrastructure, using a list or group of lists known as inventory. Ansible可以同时与您基础设施中的一个或多个系统协同工作&#xff61;为了与多台服务…

RPC核心原理(整体架构/调用过程)

Server: Provider ,暴露服务,服务提供方 Client: Consumer ,服务消费,调用远程服务 Registry:服务注册与发现 RPC的调用过程如下&#xff1a; 第一步&#xff1a;server会将他需要暴露的服务以及他的地址信息注册到Registry这一注册中心。 第二步&#xff1a;client通过注册…

【分布鲁棒和多目标非负矩阵分解】基于DR-NMF的对NMF问题噪声模型的识别鲁棒性研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Doris的一些进阶用法

6.doris进阶 6.1修改表 6.1.1修改表名 示例&#xff1a; 将名为 table1 的表修改为 table2 SQLALTER TABLE table1 RENAME table2; -- 示例 ALTER TABLE aggregate_test RENAME aggregate_test1; 将表 example_table 中名为 rollup1 的 rollup index 修改为 rollup2 SQLA…

Ex-ChatGPT本地部署+Azure OpenAI接口配置+docker部署服务

Ex-ChatGPT项目分为 Ex-ChatGPT 和 WebChatGPTEnhance 两部分&#xff0c;Ex-ChatGPT启动后是个web服务&#xff0c;通过访问ip端口体验&#xff1b; WebChatGPTEnhance可编译生成一个浏览器插件&#xff0c;Chrome或者Microsoft edge浏览器可以安装该插件&#xff0c;点击该插…

【MySQL】如何实现单表查询?

在我们对数据进行操作时&#xff0c;查询无疑是至关重要的&#xff0c;查询操作灵活多变&#xff0c;我们可以根据开发的需求&#xff0c;设计高效的查询操作&#xff0c;把数据库中存储的数据展示给用户。 文章目录 前言1. 基础查询1.1 基础查询语法1.2 基础查询练习 2. 条件查…

数据库基础——5.运算符

这篇文章我们来讲一下SQL语句中的运算符操作。 说点题外话&#xff1a;SQL本质上也是一种计算机语言&#xff0c;和C&#xff0c;java一样的&#xff0c;只不过SQL是用来操作数据库的。在C&#xff0c;java中也有运算符&#xff0c;这两种语言中的运算符和数学中的运算符差距不…

crontab定时任务介绍

1 crontab概述 crontab是linux操作系统上用来设置定时任务的基础命令&#xff0c;是基于crond服务实现任务调度执行。 当安装完成操作系统后&#xff0c;默认会安装crond服务及其附属命令&#xff0c;并且会自动启动crond进程&#xff0c;crond进程每分钟会定期检查是否有要执…

还在用 JS 做节流吗?CSS 也可以防止按钮重复点击

目录 一、CSS 实现思路分析 二、CSS 动画的精准控制 三、CSS 实现的其他思路 四、总结一下 众所周知&#xff0c;函数节流&#xff08;throttle&#xff09;是 JS 中一个非常常见的优化手段&#xff0c;可以有效的避免函数过于频繁的执行。 举个例子&#xff1a;一个保存按…

11.PasswordEncoder详解与实战

security/day07 这节课我们开始讲PasswordEncoder&#xff0c;如果大家还有印象的话&#xff0c;我们前面有提到过PasswordEncoder: 为什么密码使用{noop}开头呢&#xff1f;我们也做出了相应的解释&#xff0c;这节课开始带大家真正的了解PasswordEncoder, PassworderEncoder…

哈夫曼树(Huffman)【数据结构】

目录 ​编辑 一、基本概念 二、哈夫曼树的构造算法 三、哈夫曼编码 假如<60分的同学占5%&#xff0c;60到70分的占15%…… 这里的百分数就是权。 此时&#xff0c;效率最高&#xff08;判断次数最少&#xff09;的树就是哈夫曼树。 一、基本概念 权&#xff08;we…

关于宝塔部署jar包和war包

文章目录 前言一、jar包部署二、war包部署1.maven如果打包不了使用命令打包2.安装Tomcat进行访问是否成功2.进入Tomcat目录进行配置war包 一、项目访问方法 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、jar包部署 1.其实jar包没什么讲的&…
最新文章