【Kubernetes存储篇】常见存储方案及场景分析

文章目录

    • 一、持久化存储理论
      • 1、为什么要做数据持久化存储?
      • 2、常见持久化存储方案
    • 二、案例:持久化存储方案
      • 1、emptydir临时存储卷
      • 2、hostPath本地存储卷
      • 3、NFS网络共享存储卷

一、持久化存储理论

官方中文参考文档:

1、为什么要做数据持久化存储?

在k8s中部署的应用都是以pod容器的形式运行的,假如我们部署MySQL、Redis等数据库,需要对这些数据库产生的数据做备份。因为Pod是有生命周期的,如果pod不挂载数据卷,那pod被删除或重启后这些数据会随之消失,如果想要长久的保留这些数据就要用到pod数据持久化存储。

2、常见持久化存储方案

  • emptyDir:是一种临时性的卷,它的生命周期与 Pod 相同。emptyDir 卷是在 Pod 被调度到节点上时创建的,并且在 Pod 被删除时一并删除。emptyDir 卷通常用于在容器之间共享文件或者缓存数据。
  • HostPath:是一种本地存储卷,可以将宿主机目录映射到容器中,删除Pod后宿主机卷不会跟随删除,但是调用到不通节点,卷内容会不一致(MySQL数据在Node1节点存储,删除MySQL Pod后调度到Node2上了,导致数据不一致)。
  • NFS:是一种共享卷,需要依赖于NFS服务端,所有Pod共享NFS卷内容,不需要考虑Pod调度在不同节点导致数据不一致问题,但是NFS基于网络传输,会占用带宽。
  • PVC:用来实现持久化存储,可以将存储资源独立出来,方便管理和共享。

二、案例:持久化存储方案

1、emptydir临时存储卷

临时卷,当Pod被删除时,卷也会删除,用于存储一些不重要的数据。

创建Pod资源,使用emptydir卷方式挂载 ,YAML如下:

cat emptydir-pod.yaml 

---
apiVersion: v1
kind: Pod
metadata:
  name: empty-pod
  labels: 
    type: empty-pod
spec:
  containers:
  - name: empty-pod
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts: 
    - name: volume-empty  # 挂载路径名称,必须与下面卷名称一致
      mountPath: /usr/share/nginx/html  # 卷挂载目录
  volumes:
  - emptyDir: {}         # emptyDir类型,{}表示一个空的配置
    name: volume-empty   # 卷名称

执行YAML文件:

kubectl apply -f emptydir-pod.yaml

如何查看本地挂载卷路径位置呢?

第一步:确认Pod当前所在节点,可以使用以下命令确认:

kubectl get pods empty-pod -o wide

第二步:确认Pod的uid值,可以使用以下名称确认:

kubectl get pods empty-pod -o yaml|grep uid
uid: 9f76e568-05a9-41c3-9fb2-c43505214b99

第三步:在Pod所在节点中的/var/lib/kubelet/pods/uid 目录下:

cd /var/lib/kubelet/pods/9f76e568-05a9-41c3-9fb2-c43505214b99
cd volumes/kubernetes.io~empty-dir/volume-empty  # 此目录对应Pod中/usr/share/nginx/html 目录

确认本地卷对应目录后,我们进入路径,创建index.html文件:

cd /var/lib/kubelet/pods/9f76e568-05a9-41c3-9fb2-c43505214b99/volumes/kubernetes.io~empty-dir/volume-empty

echo "qinzt666" > index.html 

访问Pod网站内容:

kubectl get pods empty-pod -o wide
curl 10.244.235.233

在这里插入图片描述

我们删除Pod后宿主机上此目录也会跟随删除

kubectl delete pods empty-pod

在这里插入图片描述

2、hostPath本地存储卷

本地存储卷,指定宿主机目录,与容器目录做映射,删除Pod,宿主机目录不会跟随删除,hostPath可以支持很多挂载类型,如挂载目录,挂载文件等,如下图,此图来自官方:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oFuKgorE-1686472737397)(D:\MD归档文档\IMG\image-20230610135129908.png)]

创建Pod资源,使用hostPath卷方式挂载 ,YAML如下:

cat hostpath-pod.yaml 
---
apiVersion: v1
kind: Pod
metadata:
  name: hostpath-pod
  labels: 
    type: hostpath-pod
spec:
  containers:
  - name: hostpath-pod
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts: 
    - name: volume-hostpath  # 挂载路径名称,必须与下面卷名称一致
      mountPath: /usr/share/nginx/html  # 容器挂载目录
  volumes:
  - hostPath:
      path: /data1              # 宿主机挂载目录
      type: DirectoryOrCreate   # 卷类型,DirectoryOrCreate表示目录,宿主机不存在则创建空目录
    name: volume-hostpath       # 卷名称

执行YAML文件:

kubectl apply -f hostpath-pod.yaml

在Pod调度节点的宿主机挂载卷位置创建 index.html 文件

kubectl get pods hostpath-pod -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aRI1MJWD-1686472737397)(D:\MD归档文档\IMG\image-20230610150624530.png)]

echo "hello world qinzt 666 ...." >/data1/index.html

访问Pod网站内容,Pod 的IP地址如上图也可以查看到:

curl 10.244.235.198

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U3A8LZ2Q-1686472737398)(D:\MD归档文档\IMG\image-20230610150808795.png)]

删除此Pod,节点上的数据依旧存在。

kubectl delete pod hostpath-pod
ls /data1/

index.html

3、NFS网络共享存储卷

NFS共享存储卷,需要先搭建NFS服务端,Pod共享NFS服务端数据,解决了Pod调度在不通Node节点,导致数据不一致问题,但是NFS需要依赖网络带宽。

搭建NFS服务端:所有Node节点上都需要安装 nfs-utils

yum install nfs-utils -y
mkdir /data/volumes -p

vim /etc/exports
/data/volumes *(rw,no_root_squash)

加载配置生效 && 启动NFS服务

exportfs -arv
systemctl enable nfs --now

在其他Node节点上面测试 NFS 是否可以正常挂载:

yum install nfs-utils -y
mkdir /test
mount 16.32.15.200:/data/volumes /test

df -hT /test/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRbzOJDc-1686472737398)(D:\MD归档文档\IMG\image-20230610194008907.png)]

如上图测试无问题,卸载挂载:

umount /test

OK,至此NFS服务端已经搭建完成,测试没有问题了。

编写 YAML 使用 NFS 类型存储卷:

cat nfs-deployment.yaml 
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-test
  namespace: default
  labels:
    type: nfs
spec:
  replicas: 3
  selector:
    matchLabels:
      type: nfs
  template:
    metadata:
      labels:
        type: nfs
    spec:
      volumes:
      - name: nfs-test-volume     # 卷名称
        nfs: 
          server: 16.32.15.200    # NFS服务端IP地址
          path: /data/volumes     # NFS服务端共享目录
      containers:
      - name: nfs-test
        image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: nfs-test-volume             # 挂载卷名称
          mountPath: /usr/share/nginx/html  # 容器内挂载目录

执行YAML 资源清单文件:

kubectl apply -f nfs-deployment.yaml

在 宿主机NFS共享卷创建 index.html 文件

echo "qinzt coolest 666." > /data/volumes/index.html

访问 Pod网站,由于没有创建Service资源,我们使用Pod IP地址进行访问。

kubectl get pods -o wide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-37x2Mi68-1686472737398)(D:\MD归档文档\IMG\image-20230610202255398.png)]

上面curl 两个节点上的Pod都可以访问,说明挂载nfs存储卷成功了,nfs支持多个客户端挂载,可以创建多个pod,挂载同一个nfs服务器共享出来的目录;但是nfs如果宕机了,数据也就丢失了,所以需要使用分布式存储,常见的分布式存储有glusterfs和cephfs。

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

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

相关文章

CloudQuery一体化数据库SQL操作安全管控平台

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! CloudQuery一体化数据库SQL操作安全管控平台 导读 CloudQuery作为业界领先的面向企业的数据库安全解决方案,CloudQuery致力于打造一站式安全可靠的数据操…

开源赋能,决胜未来 — 参加原子全球开源峰会有感

目录 文章目录 目录前言开源决胜未来:闭源摧毁 UNIX,开源成就 Linux开源创新:软硬件协同,共建开源生态 前言 开源原子基金会作为国内首家开源基金会组织,由其主办的首届 “开放原子全球开源峰会” 也是第一次被冠以 “…

软件测试工程师如何从功能测试转成自动化测试

功能测试转成自动化测试,答案就三个字:“靠学习”。 学习自动化的方法无非是三种: 一、靠培训(下方有如何选择培训机构) 在相对有氛围的学习环境中来学习自动化测试,这是一个较快学习的方法。二、靠自学自…

2023年网络安全竞赛——网络安全应急响应Server2228

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接) 用户名:root,密码:pssw0rd123 1. 找出被黑客修改的系统别名,并将倒数第二个别名作为Flag值提交&#xff1b…

大数据Doris(四十四):kafka json 数组格式数据导入到Doris

文章目录 kafka json 数组格式数据导入到Doris 一、创建 Doris 表 二、创建 Kafka topic

Appium知多少

Appium我想大家都不陌生,这是主流的移动自动化工具,但你对它真的了解么?为什么很多同学搭建环境时碰到各种问题也而不知该如何解决。 appium为什么英语词典查不到中文含义? appium是一个合成词,分别取自“applicatio…

知识图谱实战应用16-知识图谱在化学物质结构上的应用,快速查找化学分子式与结构

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用16-知识图谱在化学物质结构上的应用,快速查找化学分子式与结构。在化学领域,知识图谱可以应用于化学物质结构上。化学物质结构主要指分子结构和化学键的组成情况。知识图谱可以将化学物质结构的相关数据以图谱的形式展…

Opensearch基本介绍

OpenSearch 是一个社区驱动的开源搜索和分析套件,开发人员使用该套件来摄取、搜索、可视化和分析数据。 OpenSearch 由数据存储和搜索引擎 (OpenSearch)、可视化和用户界面 (OpenSearch Dashboards) 以及服务器端数据收集器 (Data Prepper) 组成。 用户可以使用一系…

devart ADO.NET Data Providers 2023

ADO.NET Data Providers 2023 dotConnect 开发与数据相关的 .NET 应用程序的终极解决方案,具有 ORM 支持的快速灵活综合功能丰富的 ADO.NET 提供程序 ADO.NET 数据提供者 高性能 ADO.NET 数据提供程序 dotConnect 是一个增强的数据连接解决方​​案,它建立在 ADO.N…

Canvas.drawText 是以哪里为基线往什么方向开始画的。有什么居中方案?

0 前言 Canvas.drawText(String text, float x, float y, Paint paint) 这个方法在绘制文本时是从以什么为基线向什么地方开始绘制呢,水平方向上,可以通过设置 setTextAlign(Paint.Align.??) 来设置基线在文本左边、右边或者中间。但是垂直方向上是在哪…

Spark SQL数据源:JSON数据集

文章目录 一、读取JSON文件简介二、读取JSON文件案例演示(一)创建JSON文件并上传到HDFS(二)读取JSON文件,创建临时表,进行关联查询1、读取user.json文件,创建临时表t_user2、读取score.json文件…

驱动开发:内核遍历文件或目录

在笔者前一篇文章《驱动开发:内核文件读写系列函数》简单的介绍了内核中如何对文件进行基本的读写操作,本章我们将实现内核下遍历文件或目录这一功能,该功能的实现需要依赖于ZwQueryDirectoryFile这个内核API函数来实现,该函数可返…

Java蓝桥杯

目录 往年真题 题目分类 搜索 动态规划 并查集 贪心算法 二分查找 输入输出 图论 其他 往年真题 2022年第十三届蓝桥杯大赛软件类决赛Java研究生组真题 - 题库 - C语言网 2021年蓝桥杯第十二届省赛及国赛真题 - 题库 - C语言网 2020年蓝桥杯第十一届省赛及国赛真题…

Nginx网站服务

文章目录 Nginx网站服务一.Nginx服务基础1.关于Nginx2.Nginx和Apache的差异:3.编译安装Nginx服务(1)关闭防火墙(2)安装依赖包(3)创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制…

深眸科技专注机器视觉的研发与创新,开启工业自动化、智能化进程

在智能制造、工业效能提升的社会背景之下,中国制造2025战略持续落实,工业制造业转型升级加速,作为人工智能领域重要技术之一的机器视觉,凭借着高精度、高准确度等优势检测能力,不断渗透进工业领域,并呈现出…

oVirt 4.4.10三节点超融合集群安装配置及集群扩容(三)

本篇主要记录安装及使用过程中遇到的问题<包含4.4.x, 4.5.x> 设置engine管理页面可以通过IP访问ssh连接engine服务器并在/etc/ovirt-engine/engine.conf.d新建99-custom-sso-setup.conf,添加engine节点的IP或出口IPSSO_ALTERNATE_ENGINE_FQDNS="engine103.cluster.…

day54_spring整合mybatis

SpringMybatis整合【重点】 Spring学完了,主要学习Spring两个内容:IOCAOP 利用这两个知识来完成spring和mybatis的整合 IOC: 控制反转,用来创建对象 XxxService通过数据源创建数据库连接创建SqlSessionFactory创建SqlSession获得XxxMapper代理对象 AOP: 面向切面 控制事务 具体…

STM32——08-STM32感应开关盖垃圾桶

项目二&#xff1a;感应开关盖垃圾桶 项目需求 检测靠近时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c; 2 秒后关盖 发生震动时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c; 2 秒后关盖 按下按键时&#xff0c;垃圾桶自动开盖并伴随滴一声&#xff0c; 2 秒后…

插件化工程R文件瘦身技术方案 | 京东云技术团队

随着业务的发展及版本迭代&#xff0c;客户端工程中不断增加新的业务逻辑、引入新的资源&#xff0c;随之而来的问题就是安装包体积变大&#xff0c;前期各个业务模块通过无用资源删减、大图压缩或转上云、AB实验业务逻辑下线或其他手段在降低包体积上取得了一定的成果。 在瘦…

【2023年最新】提高分类模型指标的六大方案详解

文章目录 数据增强特征选择调整模型参数模型集成迁移学习模型解释完结 当今&#xff0c;机器学习模型得到了广泛的应用&#xff0c;其中分类模型是其中最常见和重要的一种。在实际应用中&#xff0c;如何提高分类模型的指标&#xff0c;使其在不同场景下表现更佳并且具有更好的…