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

news2024/11/18 6:03:44

文章目录

    • 一、持久化存储理论
      • 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。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【三、网络配置与系统管理】

1 网络配置 ifconfig 显示网络接口的配置信息 [rootredis100 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::f5c3:6a96:fe05:1965 prefixlen 64 scop…

该怎么学Python?自学Python的方法和资料整理!

导语 Python 作为一门简洁、易学且功能强大的编程语言&#xff0c;备受程序员和初学者的喜爱。如果你也想学习 Python&#xff0c;但不知从何入手&#xff0c;本文将为你整理一些自学 Python 的方法&#xff0c;助你快速入门并掌握这门语言。 为什么学习Python&#xff1f;&a…

【2023华中杯】C题 空气质量预测与预警 56页论文及Python代码

【2023华中杯】C题 空气质量预测与预警 56页论文及Python代码 1 题目 空气污染对人类健康、生态环境、社会经济造成危害&#xff0c;其污染水平受诸多因素的影响&#xff0c; 如 PM2.5、PM10、CO、气温、风速、降水量等&#xff0c;探究 PM2.5 等污染物浓度的因素&#xff0c…

POI导出Excel (满满的干货啊)

已经实现的POI导出Excel 步骤一&#xff1a;导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi…

【js】js前端技巧之图片格式转换(File、Blob、base64):

文章目录 一、类型简介二、BLOB 与 File&#xff1a;【1】BLOB 转 File【2】File 转 BLOB 三、 BLOB 与 base64&#xff1a;【1】BLOB(url) 转 base64【2】base64 转 BLOB 四、File 与 base64&#xff1a;【1】File 转 base64【2】base64 转 File 五、案例&#xff1a; 一、类型…

AWS CodeWhisperer 心得体会:安装与使用

大家好&#xff0c;今天我要和大家分享一下我在使用 AWS CodeWhisperer 这个工具时的心得体会。首先&#xff0c;让我们了解一下什么是 AWS CodeWhisperer。 什么是 AWS CodeWhisperer&#xff1f; AWS CodeWhisperer 是一个用于帮助开发者在 AWS 云平台上更轻松地编写、测试…

从源码全面解析 dubbo 服务订阅的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

LearnOpenGL-高级光照-1.Blinn-Phong

本人初学者&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 文章目录 高级光照Phong光照的缺点Blinn-Phong介绍例子 GLSL中遇到的BUG 高级光照 Phong光照的缺点 造成Phong光照缺点的两个条件 当物体的高光反光度&#xff08;shiness&#xff09;比较小时 什么是高光…

测试员将迎来春天

这几年因为疫情、经济寒冬&#xff0c;导致IT从业者工作地很不容易。 而IT从业者中的测试员&#xff0c;这两年过得尤为艰难。大家都知道&#xff0c;不直接生产的测试员&#xff0c;在企业降本增效的口号下一定是首当其冲被优化掉的成本。所以&#xff0c;小厂倒了一大批&…

沐风晓月个人博客折腾记: 从零开始加上漂亮的前端模板,轻松提升博客品味

前言 在个人博客折腾记的专栏里&#xff0c;我们已经安装好了wordpress&#xff0c;能用但看上去不够好看&#xff1a; 我们希望让前端模板好看一点&#xff0c;如果你有好的前端模板推荐&#xff0c;可以评论区留言哦。 如果你还没有搭建wordpress 可以参考&#xff1a; 利…

C++开发—远程控制

C开发—远程控制 一&#xff0c;准备二&#xff0c;安装版本控制工具1&#xff0c;安装gitforwindows2&#xff0c;安装乌龟git1&#xff0c;安装乌龟git应用2&#xff0c;安装乌龟git对应的语言包 3&#xff0c;设置Visual Studio的git插件4&#xff0c;创建git项目 三&#x…

React Hook入门小案例 在函数式组件中使用state响应式数据

Hook是react 16.8 新增的特性 是希望在不编写 class的情况下 去操作state和其他react特性 Hook的话 就不建议大家使用class的形式了 当然也可以用 这个他只是不推荐 我们还是先创建一个普通的react项目 我们之前写一个react组件可以这样写 import React from "react&qu…

Java学习笔记(视频:韩顺平老师)2.0

如果你喜欢这篇文章的话&#xff0c;请给作者点赞哟&#xff0c;你的支持是我不断前进的动力。 因为作者能力水平有限&#xff0c;欢迎各位大佬指导。 变量 基本数据类型⭐️ 数值型 基本数据类型转化 自动类型转换 强制类型转换 基本数据类型和String类型转换 变量 变量…

Vulnhub靶机渗透:MY FILE SERVER: 1

MY FILE SERVER: 1 nmap扫描端口扫描服务扫描漏洞扫描选择渗透方向 21/2121 ftp445 samba2049/20048 nfs80 http目录爆破 获得立足点提权4061140847 获取flag 靶机链接: https://www.vulnhub.com/entry/my-file-server-1,432/ 靶机IP&#xff1a;192.168.54.33 kali IP&#x…

人工智能轨道交通行业周刊-第48期(2023.6.5-6.11)

本期关键词&#xff1a;铁路测绘、动车组限速、铁路四电、智源大会、苹果AR眼镜、AIGC商业落地 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMet…

如何通过绩效考核对互联网人精准打击条条致命?

在“经济形势就业压力”的双重打击下&#xff0c;打工人变得越来越温顺。曾经闹着要整顿职场的大多年轻人&#xff0c;也从年少轻狂逐步走向少年老成&#xff0c;突然少了许多“XX后整顿职场”这样的声音。在严峻的复杂形势下&#xff0c;大多公司为了降本增效&#xff0c;殚精…

2017~2018学年《信息安全》考试试题(A3卷)

北京信息科技大学 2017 ~2018 学年第一学期 《信息安全》考试试题 (A3 卷) 课程所在学院&#xff1a;计算机学院 适用专业班级&#xff1a; - 考试形式&#xff1a;闭卷 一、单选题(本题满分 20 分&#xff0c;共含 10 道小题&#xff0c;每小题 2 分) Wanncry 勒索攻击通过加…

LLM下的讨论230611

三、我们能研究什么&#xff1f; 在大模型时代&#xff0c;可以考虑深挖的方向&#xff0c;供大家参考&#xff1a; 3.1 Retrieval augmented in-context learningGPTs完成了NLP范式的更新迭代&#xff1a;从传统的有监督学习&#xff08;Supervised Learning&#xff09;转变…

有趣的图(一)(55)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 咱们今天的内容比较抽象&#xff0c;也比较有趣。 这里的图是指计算机中的图&#xff0c;确切地说&#xff0c;是…

Debian 12 x86_64 OVF (sysin) - 虚拟机自动化模板

Debian 12 x86_64 OVF (sysin) - VMware 虚拟机模板 请访问原文链接&#xff1a;https://sysin.org/blog/debian-12-ovf/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Debian GNU/Linux 12 (bookworm) (Linux debian 6.1.0-…