k8sday12数据存储(1/2)

目录

一、简单基本存储

1、EmptyDir

1.1概念

1.2作用

1.3配置文件

1.4测试

2、HostPath

2.1概念

2.2作用

2.3配置文件

2.4测试

①、数据共享

②、持久化存储

3、NFS

3.1概念

3.2作用

3.3NFS服务安装

①、设置主节点为NFS服务器

②、给副节点安装NFS客户端工具

3.4配置文件

3.4测试

①、数据共享

②、持久化存储


由于k8s中Pod的生命周期短暂,会被频繁的创建和销毁,容器的重启或迁移也会导致数据丢失,而有状态应用需求,如数据库、消息队列等需要持久化存储,确保数据在容器生命周期之外依然存在,方便用户调用,为了实现持久化保存数据,k8s引入Volume实现同一个Pod中的不同容器的数据共享和数据持久化,即使容器重启或迁移等等都不会导致Volume数据丢失。

常见Volume类型:

  • 简单基本存储:EmptyDir、HostPath、NFS

  • 高级核心存储:PV、PVC

  • 配置存储:ConfigMap、Secret

一、简单基本存储

1、EmptyDir

1.1概念

​ EmptyDir是在Pod被分配到Node时创建的,初始内容为空,无法指定宿主机对应的文件目录,一个EmptyDir相当于一个Host的空目录,当Pod销毁时,EmptyDir的数据也会被永久删除,即EmptyDir只在Pod的生命周期内有效。

1.2作用

由于EmptyDir只在Pod的生命周期内有效,故不适合做持久化的数据存储,只适合做临时存储

  • 作为临时空间,无须长久保留

  • 为同一个Pod内的不同容器实现数据共享

1.3配置文件
  apiVersion: v1kind: Podmetadata:name: nginx-busybox-lognamespace: defaultspec:containers:# ---------- Nginx ----------- name: nginximage: nginx:1.24.0           # 体积小、镜像拉取快ports:- containerPort: 80volumeMounts:- name: logs-volumemountPath: /var/log/nginx   # Nginx 默认日志目录# ---------- BusyBox ----------- name: busyboximage: busybox:1.36.1         # 推荐稳定版本command: ["/bin/sh","-c","tail -f /logs/access.log"]   # 初始命令,动态读取指定文件内容volumeMounts:- name: logs-volumemountPath: /logs            # BusyBox 内查看目录# ---------- 共享卷 ----------volumes:- name: logs-volume             # 共享卷名称emptyDir: {}                  # 数据卷类型,Pod 级临时目录,两容器共享
1.4测试

最终实现:每当我访问nginx,nginx会将访问的日志信息存储到/var/log/nginx目录下,而busybox可通过命令查看是否有日志生成,即实现同一个Pod中两个不同容器之间通过数据卷emptydir进行了数据共享。

  # 创建 Pod# 记住要在yaml文件目录下kubectl create -f nginx-busybox-emptydir.yaml​# 查看是否创建 Pod 成功kubectl get po nginx-busybox-log -o wide​# 访问 nginx kubectl exec nginx-busybox-log -- curl http://localhost​#-----------------双开终端--------------------------# 双开终端方便查看指定容器的标准输出# kubectl logs -f <你创建的数据卷名称> -n <你创建数据卷指定的命名空间> -c <指定容器>kubectl logs -f nginx-busybox-log -c busybox

  # 删除Pod,查看数据是否仍存在,是否仍可以进行数据共享kubectl delete -f nginx-busybox-emptydir.yaml​# 验证删除成功kubectl get po nginx-busybox-log -o wide​# 双开终端方便查看指定容器的标准输出# kubectl logs -f <你创建的数据卷名称> -n <你创建数据卷指定的命名空间> -c <指定容器>kubectl logs -f nginx-busybox-log -c busybox

发现数据已经不见了

2、HostPath

2.1概念

​ 当Pod销毁时,EmptyDir的数据也会被永久删除,即EmptyDir只在Pod的生命周期内有效。为了实现简单的数据持久化,即简单地将数据挂载到主机上,可选择HostPath

2.2作用

HostPath就是将Node主机上的一个实际目录挂载到Pod中,提供给容器使用,最终实现即使Pod销毁,数据依然存在在Node主机

2.3配置文件
  apiVersion: v1kind: Podmetadata:name: nginx-busybox-lognamespace: defaultspec:containers:# ---------- Nginx ----------- name: nginximage: nginx:1.24.0           # 体积小、镜像拉取快ports:- containerPort: 80volumeMounts:- name: logs-volumemountPath: /var/log/nginx   # Nginx 默认日志目录# ---------- BusyBox ----------- name: busyboximage: busybox:1.36.1         # 推荐稳定版本command: ["/bin/sh","-c","tail -f /logs/access.log"]   # 初始命令,动态读取指定文件内容volumeMounts:- name: logs-volumemountPath: /logs            # BusyBox 内查看目录# ---------- 共享卷 ----------volumes:- name: logs-volume             # 共享卷名称hostPath:                     # 数据卷类型path: /root/logs            # 保存到K8s 节点(即 Linux 虚拟机或裸机) 上的目录type: DirectoryOrCreate     # 目录存在就直接使用,不存在就先创建后使用
2.4测试

最终实现:每当我访问nginx,nginx会将访问的日志信息存储到K8s 节点(即 Linux 虚拟机或裸机) 上的目录(路径为path: /root/logs ),而我们可以直接去节点通过命令查看是否有日志生成,即实现将数据持久化存储到Node主机上,即使Pod删除了,数据仍存在。

①、数据共享
  # 创建 Pod# 记住要在yaml文件目录下kubectl create -f nginx-busybox-hostpath.yaml​# 查看是否创建 Pod 成功,并查看是创建在哪个节点kubectl get po nginx-busybox-log -o wide​# 访问 nginx kubectl exec nginx-busybox-log -- curl http://localhost​#-----------------双开终端--------------------------# 双开终端,方便查看指定文件docker exec -it <你的Pod创建所在节点> bash# 如我的是 docker exec -it my-multi-node-cluster1-worker bash​# 进入指定的节点路径,查看共享目录ls -l /root/logs​# 查看文件日志tail -f /root/logs/access.log

②、持久化存储
  # 删除Pod,查看数据是否仍存在,是否仍可以进行数据共享kubectl delete -f nginx-busybox-hostpath.yaml​# 验证删除成功kubectl get po nginx-busybox-log -o wide​#-----------------双开终端--------------------------# 双开终端,方便查看指定文件docker exec -it <你的Pod创建所在节点> bash# 如我的是 docker exec -it my-multi-node-cluster1-worker bash​# 进入指定的节点路径,查看共享目录ls -l /root/logs​# 查看文件日志是否仍然存在tail -f /root/logs/access.log

发现数据仍然存在

3、NFS

3.1概念

​ 虽然HostPath可以解决数据的持久化问题,但当数据存储所在的Node节点崩溃时,其内部的Pod和数据也会一并丢失,Pod此时需要转移到其他节点,需要准备单独的网络存储系统,此时可选NFS或CIFS等其他,这里只是使用NFS作为例子进行学习。

3.2作用

NFS作为一个网络文件的存储系统,我们可通过搭建一台NFS服务器,然后将Pod中的数据直接存储其中,这样即使Pod在节点上如何转移,我们只需要保证Node和NFS连接正常,数据即可正常访问。

NFS服务器一般需要备份,设置为高可用

3.3NFS服务安装
①、设置主节点为NFS服务器
  # 获取已有节点,找到control-plane容器记下输出容器内 IP( INTERNAL-IP )例如 172.18.0.2kubectl get node -o wide​# 进入控制面(control-plane)容器docker exec -it my-multi-node-cluster1-control-plane bash​# ---- 容器内执行 ----# 更新并安装NFS服务apt update && apt install -y nfs-kernel-server# 创建共享目录mkdir -p /root/logs# 把共享目录权限改成 “任何人可读可写可执行”chmod 777 /root/logs# 向 /etc/exports 追加一行 导出规则# 当然也可以手动进入 /etc/exports 然后编辑添加规则echo "/root/logs *(rw,sync,no_subtree_check,no_root_squash)" >> /etc/exports# 重新加载 /etc/exports 并立即生效exportfs -rav# 重启 NFS 服务进程systemctl restart nfs-kernel-server# 如果不可用systemctl,可改为:service nfs-kernel-server restart​# 退出控制面容器exit
②、给副节点安装NFS客户端工具

NFS 客户端功能已经内置在 Linux 内核nfs 文件系统模块,所以一般不需要额外安装

3.4配置文件

直接挂 NFS,无 PV/PVC

  apiVersion: v1kind: Podmetadata:name: nginx-busybox-lognamespace: defaultspec:containers:# ---------- Nginx ----------- name: nginximage: nginx:1.24.0           # 体积小、镜像拉取快ports:- containerPort: 80volumeMounts:- name: logs-volumemountPath: /var/log/nginx   # Nginx 默认日志目录# ---------- BusyBox ----------- name: busyboximage: busybox:1.36.1         # 推荐稳定版本command: ["/bin/sh","-c","tail -f /logs/access.log"]   # 初始命令,动态读取指定文件内容volumeMounts:- name: logs-volumemountPath: /logs            # BusyBox 内查看目录# ---------- 共享卷 ----------volumes:- name: logs-volume             # 共享卷名称nfs:                          # 数据卷类型path: /root/logs            # 共享目录路径(与上方在控制面容器创建的共享目录相同)server: 172.18.0.2          # nfs服务器地址(控制面容器的内部 IP )
3.4测试
①、数据共享
# 创建 Pod
# 记住要在yaml文件目录下
kubectl create -f nginx-busybox-nfs.yaml# 查看是否创建 Pod 成功kubectl get po nginx-busybox-log -o wide# 访问 nginx 
kubectl exec nginx-busybox-log -- curl http://localhost#-----------------双开终端--------------------------
# 双开终端,方便查看指定文件
kubectl logs -f nginx-busybox-log -c busybox# 进入主节点
docker exec -it my-multi-node-cluster1-control-plane bash# 查看共享目录
ls /tmp/logs# 查看是否含访问记录
cat /tmp/logs/access.log

②、持久化存储
# 删除Pod,查看数据是否仍存在,是否仍可以进行数据共享
kubectl delete pod nginx-busybox-log# 验证删除成功
kubectl get po nginx-busybox-log -o wide# 立即重新创建同名 Pod(只读验证)
kubectl apply -f nginx-busybox-nfs.yaml# 查看是否创建成功
kubectl get po nginx-busybox-log -o wide# 进入主节点,查看历史日志是否存在
docker exec -it my-multi-node-cluster1-control-plane bash
ls /tmp/logs
cat /tmp/logs/access.log
exit# 退出主节点后,立即查看busybox历史日志
kubectl exec nginx-busybox-log -c busybox -- cat /logs/access.log

发现数据仍然存在,并没有随着Pod的生命周期而丢失

PS:为什么我的snipaste截图的照片,过一段时间会自动消失,导致我又要重新做一遍演示,有没有大佬救救我QAQ

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

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

相关文章

Spring Framework 常用注解详解(按所属包分类整理)

在使用 Spring Framework 进行开发时&#xff0c;注解&#xff08;Annotation&#xff09;是实现 依赖注入&#xff08;DI&#xff09;、组件扫描、AOP 切面、事务管理 和 Web 请求映射 的核心手段。Spring 提供了丰富且结构清晰的注解体系&#xff0c;这些注解按照功能被组织在…

ROADS落地的架构蓝图

2 ROADS落地的架构蓝图 将ROADS体验从理念转化为现实&#xff0c;需要一套完整且自顶向下的架构蓝图作为支撑。华为的实践表明&#xff0c;数字化转型的成功依赖于多个架构层次的协同推进&#xff0c;而非单点技术的应用。该蓝图通常包含以下五个关键层次&#xff0c;每一层都承…

如何构建一个神经网络?从零开始搭建你的第一个深度学习模型

在深度学习的海洋中&#xff0c;神经网络就像一艘船&#xff0c;承载着数据的流动与特征的提取。而构建一个神经网络&#xff0c;就像是在设计这艘船的结构。本文将带你一步步了解如何使用 PyTorch 构建一个完整的神经网络模型&#xff0c;涵盖网络层的组织、前向传播与反向传播…

自学嵌入式第二十三天:数据结构(3)-双链表

一、strtokchar * strtok(char *s1,char *s2);截断字符串&#xff0c;在s1字符串中找到s2截取前一段返回&#xff0c;如需要再次截取剩余段&#xff0c;再使用此函数s1输入NULL即可&#xff1b;二、bzerobzero(char *p,size_t size);清零,从p地址开始&#xff0c;清零size个bit…

河南萌新联赛2025第六场 - 郑州大学

暑期集训已经接近尾声&#xff0c;一年六场的暑期萌新联赛也已经结束了&#xff0c;进步是比较明显的&#xff0c;从一开始的七八百名到三四百名&#xff0c;虽然拿不出手&#xff0c;但是这也算对两个月的集训的算法初学者的我一个交代。 比赛传送门&#xff1a;河南萌新联赛…

2-1.Python 编码基础 - 基础运算符(算术运算符、赋值运算符、比较运算符、逻辑运算符)

一、算术运算符 1、基本介绍编号运算符说明示例输出结果1两数相加10 20302-两数相减10 - 20-103*两数相乘&#xff0c;或者返回一个被重复若干次的字符串10 * 202004/两数相除10 / 200.55//两数相除并返回商的整数部分9 // 246%两数相除并返回余数10 % 507**幂运算10 ** 21002…

CMOS知识点 MOS管不同工作区域电容特性

知识点14&#xff1a;MOSFET的电容主要来源于其物理结构&#xff1a;栅氧层电容&#xff1a;栅极&#xff08;G&#xff09;与衬底&#xff08;B&#xff09;、沟道、源&#xff08;S&#xff09;、漏&#xff08;D&#xff09;之间隔着二氧化硅绝缘层&#xff0c;自然形成电容…

预测性维护+智能优化:RK3568+FPGA方案在储能行业的应用

在储能行业&#xff0c;RK3568FPGA方案通过预测性维护和智能优化技术&#xff0c;显著提升系统可靠性和经济性。该方案采用异构架构&#xff08;FPGA处理高速信号采集&#xff0c;RK3568负责策略计算与通信管理&#xff09;&#xff0c;实现微秒级响应和精准控制。‌26一、预测…

工业4.0时代,耐达讯自动化Profibus转光纤如何重构HMI通信新标准?“

在智能制造与工业4.0浪潮下&#xff0c;HMI&#xff08;人机界面&#xff09;作为设备与操作员之间的“桥梁”&#xff0c;承担着实时数据显示、设备监控及交互控制的核心职能。然而&#xff0c;传统Profibus总线在HMI连接中常因电磁干扰、传输距离限制等问题&#xff0c;导致画…

SpringClound——网关、服务保护和分布式事务

一、网关网络的关口&#xff0c;负责请求的路由、转发、身份验证server:port: 8080 spring:cloud:nacos:discovery:server-addr: 192.168.96.129:8848gateway:routes:- id: item-serviceuri: lb://item-servicepredicates:- Path/items/**,/search/**- id: user-serviceuri: lb…

【C++】模版(初阶)

目录 一. 函数模版 1. 格式 原理 2. 函数模版的实例化 二. 类模板 void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char&…

InfluxDB 开发工具链:IDE 插件与调试技巧(二)

四、利用 IDE 插件提升开发效率 4.1 代码编写技巧 在使用安装了 InfluxDB 插件的 IDE 进行代码编写时&#xff0c;我们可以充分利用插件提供的代码导航和智能提示功能&#xff0c;来显著提高编写 InfluxDB 相关代码的效率和准确性。 以一个涉及多个 Measurement 和复杂查询条…

定制开发开源AI智能名片S2B2C商城小程序:场景体验新维度与四重目标达成

摘要&#xff1a;本文聚焦于定制开发开源AI智能名片S2B2C商城小程序&#xff0c;探讨其在场景体验领域的应用与价值。通过深入分析场景体验的最高境界——深体验、强认知、高传播、关系深化这四个目标&#xff0c;阐述该小程序如何凭借自身特性与功能&#xff0c;在商业场景中实…

开源 GIS 服务器搭建:GeoServer 在 Linux 系统上的部署教程

GeoServer 是一个开源的地理信息服务服务器&#xff0c;可以发布地图、矢量数据和栅格数据。 1. 更新系统 sudo apt update && sudo apt upgrade -y2. 安装 Java 11 GeoServer 需要 Java 运行环境&#xff0c;这里用 OpenJDK 11。 sudo apt install openjdk-11-jdk…

前端面试通关:Cesium+Three+React优化+TypeScript实战+ECharts性能方案

前端面试题详解与更多面试题 WebGLCesiumThree 1. 自我介绍 回答要点&#xff1a; 教育背景和工作经验技术栈和专长领域参与过的重点项目个人优势和学习能力职业规划 示例&#xff1a; “我是一名有前端开发经验的工程师&#xff0c;熟练掌握React、Vue等主流框架&#x…

集成电路学习:什么是Object Tracking目标跟踪

Object Tracking:目标跟踪 Object Tracking,即目标跟踪,是计算机视觉领域的一个重要研究方向,它专注于在视频帧序列中连续地监测和定位一个或多个目标对象的位置。以下是对目标跟踪技术的详细解析: 一、定义与目的 定义: 目标跟踪是指在视频序列中,通过特定的算法…

深入理解计算机系统

参考书籍 8-18 处理器体系结构不同于冯诺依曼与哈佛体系 压栈与退栈与理解c等高级语言的工作原理息息相关&#xff0c;也是常用的攻击手段 Buffer Overflow的主要技术基础 day2 继续读前言之类的 本书前言 这本书&#xff0c;讲述应用程序员如何能够利用系统知识来编写更好…

LLM 中 token 简介与 bert 实操解读

一、什么是 LLM&#xff1f; LLM&#xff0c;全称为 Large Language Model&#xff08;大语言模型&#xff09;&#xff0c;是一种基于神经网络&#xff08;主要是 Transformer 结构&#xff09;的大规模自然语言处理&#xff08;NLP&#xff09;模型。其核心能力在于理解、生成…

【运维心得】三步更换HP笔记本电脑外壳

目录 准备工作 第一步&#xff1a;拆卸电池与后盖 第二步&#xff1a;处理隐藏螺丝 第三步&#xff1a;断开内部排线 总结一下 今天又碰到了两台HP的笔记本&#xff0c;一台外壳完好&#xff0c;但是无法开机&#xff0c;判断是主板问题。另外一台外壳有损坏&#xff0c;但…

深入 Linux 网络(一) -- 网卡队列

文章目录网卡网卡的核心功能网卡的关键技术单队列网卡多队列网卡查看网卡信息ifconfigethtool查看网卡队列Linux 查看中断绑定网卡中断查询查看中断绑定的 cpu总结1. 默认情况&#xff08;单队列网卡&#xff09;2. 多队列网卡3. 如何查看和配置绑定关系&#xff1f;4. 性能优化…